![]()
人工無脳は考える |
掲示板 |
資料 |
アーカイブ
2005/03/13 update 2005/03/20 計画ブロック入門編 |
next:計画ブロック入門編(2) >> Next Session:人工無脳の条件
人工無脳でも人間でも、場面にあった返答をするのはなかなか難しい。その理由は会話の流れだけでなく時刻、立場、意思、戦略などによっても返すべき言葉が変わるからである。いつかはそういったテーマについて考えたいものであるが、そのための最初のステップとしてもっとも基本的な返答アルゴリズムについて考えよう。
会話においては状況や役割を限定するほど受け答えが容易になる。状況を限定するには、たとえばラジオボタンを使ってしまえば必要な答えだけを確実に得ることができる(Fig. 1)。
役割限定の例としては、道先案内に特化した会話を行なうエージェントがあり、これらは人工知能業界で実際に研究されている。人工無脳ではAI-COMなどがその方法を取り入れている。ひるがえって、人工無脳で多く用いられている方法はたった一つのアルゴリズムであらゆる会話をこなそうとするものである。場面に拘束されない会話では文脈の把握がいっそう重要になるが、このアルゴリズムはそれをログの活用に求める。すなわちユーザ同士の会話を記録したログは文脈が内蔵されているわけで、それなりに正しい返答を返すには予め用意した会話のログの中を捜して与えられた入力文字列と似た文を探し、その次の行を返すという方法が知られている。Fig. 2に概略を示す。
![]() |
すなわち、まず類似文字列をログの中から探す。そして次行を丸ごと返事とするか、次行の行頭の形態素をマルコフ連鎖の起点として用いている訳である。
人工無脳の記憶にデータベースソフトを利用すれば、似た文字列を探す関数が用意されていることが多いのだが、まずは自前で用意することを考えよう。英語のスペルチェックやDNA検索には編集距離という概念が用いられている。これは、文字列Aを文字列Bに変形するのに必要な、最小の編集回数である。例えばadiquitをadequateに変形するには、Fig.1に示すようにI→E、I→A、Eを付け加える、の3回の編集で充分である。
![]() |
ところがこの方法は人工無脳ではあまり参考にならない。なぜかというと、日本語は英語やDNAの塩基配列に比べて語順が柔軟だからである。例えば、「人知れず私たちが落ち合うには都合がよかった」という文は「私たちが人知れず落ち合うには都合がよかった。」と同じ意味になる。そこで人工無脳ではふたつの文を構成する形態素のリストを作り、順番を考えずに一致するものが多いかどうかで類似性を判断する方が良いと考えられる。その他に考慮すべき点がふたつある。ひとつは「赤く大きい林檎」と「大きく赤い林檎」を一致させるには、「大きい」「大きく」「大きな」を同じとして扱いたい。さらには「から」「まで」「を」というような助詞が一致してもあまり役に立たないが、名詞や動詞の一致は重要な意味を持つはずである。というわけで茶筌を使って、解析した文字列の詳しい情報を眺めてみる。
$ chasen その特徴的な雰囲気と、気安く頭を撫でるクセは間違いないね。 その ソノ その 連体詞 特徴 トクチョウ 特徴 名詞-一般 的 テキ 的 名詞-接尾-形容動詞語幹 な ナ だ 助動詞 特殊・ダ 体言接続 雰囲気 フンイキ 雰囲気 名詞-一般 と ト と 助詞-並立助詞 、 、 、 記号-読点 気安く キヤスク 気安い 形容詞-自立 形容詞・アウオ段 連用テ接 続 頭 アタマ 頭 名詞-一般 を ヲ を 助詞-格助詞-一般 撫でる ナデル 撫でる 動詞-自立 一段 基本形 クセ クセ クセ 名詞-一般 は ハ は 助詞-係助詞 間違い マチガイ 間違い 名詞-ナイ形容詞語幹 ない ナイ ない 助動詞 特殊・ナイ 基本形 ね ネ ね 助詞-終助詞 。 。 。 記号-句点 EOS
ざっと見たところ、品詞の番号 %hなどで名詞、形容詞、形容動詞、動詞くらいをマークすればいいようである。さらに、三列目に表示されている見出し全体(基本形) %Mを使えば、ある程度の変化には対応できると思われる。
$ chasen -F '%M\t%h\n' その特徴的な雰囲気と、気安く頭を撫でるクセは間違いないね。 その 57 特徴 2 的 33 だ 74 雰囲気 2 と 68 、 79 気安い 51 頭 2 を 61 撫でる 47 クセ 2 は 65 間違い 40 ない 74 ね 69 。 78 EOS
これらの情報を使えば、名詞には50点、動詞と形容動詞は30点、形容詞には20点、そのほか2点といった具合に種類ごとに違うスコアをつけ、集計することで人工無脳的にもっとも類似した文字列を探し出すことが可能になる。サンプルプログラム(類似文字列の検索)では、ログの全ての行についてスコアを計算し、その中で最大の値を持つ行を探している。最大値の行が複数あった場合の考え方は「新しいものの方がより文脈的に近い」「複数を集めて乱数で選ぶ」などいくつかあるが、始めに見つかったものを返す。
ログが短かったり全く新規な話題が現れた場合にこの処理を考えなければならない。また、昔の人工無脳はほとんどこの機能だけで会話をしていた。現在でも人工無脳が未熟なうちは会話の主要な部分をこの処理が担当してしまう場合が多いので、充分に作りこむ必要がある。人工無脳を改良するときに必要な情報もここに埋まっており、注意して観察したい。以下に対応策の例を挙げる。
| Table 1. 類似文が見つからない場合の処理 | |
| 処理 | 内容 |
| ランダムに数行前のログ文字列を返す | 最近の発言ほど文脈的に近いはずなので、それを返す |
| 最近使われた名詞や動詞を核にして文を作る | (名詞)ってどんなの?などと返す |
| 相槌 | 意外と通用する場合が多い |
| 沈黙 | 考えてるふりをする |