![]()
人工無脳は考える |
掲示板 |
資料 |
アーカイブ
2005/08/01 ゆるい構造の会話モデル |
next:連続性の維持 II >> Next Session:人工無脳の条件
人工無脳と人間とが会話するための、必要条件は何かをこれまで考えてきた。それは例えば日本語文法であり、受け答えであり、ターンテイキングだった。これらのルールを全て満たすようになれば、人工無脳は会話できる存在に近づくのだろうか?残念ながらそうではないような気がする。日本語文法は曖昧さと例外をたくさん含んでおり、プログラミングの立場からはとてもルールとは呼べないが、われわれは会話の中で文法から外れた部分も許容できるし、それを積極的にニュアンスとして利用する。受け答えにしても、正しく対応していない答えは笑いを誘う重要な要素であるし、ターンテイキングを故意に無視した発言は、それ自体相手に対するメッセージである。もともと極めて不完全な人工無脳が人間と会話できると主張する根拠も、文法、受け答え、ターンテイキングの外側にある世界に意味があると考えてのことだった。もうひとつ考えなければならないのは、各要素間の相互作用である。文法によって、文字列は記述や疑問などに分類されて意味に変換される。この情報を利用して受け答えは答えを生成する義務が生じたことを知ることができる。ターンテイキングが何か話したいと思えば、文法にそれを要請して「ちょっといいかな」などの文字列を生成する。このように、各要素はお互いに影響を及ぼしあっている。そのうえで同時には一つの内容しか発言できないので、どれかが主導権を握って発話を行なう。どんな条件ならどの要素が主導権を握るのか?ニュアンスの伝達手段としての例外をかなりの寛容さで許容する会話という現象では、この条件は細かく記述できず、また要素間の関係はケースバイケースでいくらでも変化しうるはずである。これらを上手くまとめた会話モデル11やや余談であるが、B.C.1世紀頃の思想家valokiteśvaroは次のように述べている。(意訳)「<私>は身体、感覚、想像、意志、認識の5つからなっており、全ての要素には実は実体がない。実体が無いため消滅も増減もしない。実体が無いため形もなく、感覚もなく、表象も意志も、知識も無い。これらが結合したり離れたりしながら変化しつづけている。結合の仕方も固定的ではない。このように変化しつづける現象を支配できるものはなく、ほかとの関係なく存在するものも無い。」人工無脳に似ている気がしないだろうか?を用意できないだろうか。
|
Fig. 1は人工無脳の全体像である。機能の中心は青い四角で示した4つのモジュールで、それぞれ異なるアルゴリズムによって返答を行なう。各モジュールは入力文字列をそれぞれのアルゴリズムに合った方法で解析し、どの程度質の高い返答が可能かをスコアとして返す。ドラフトブロックでスコアを比較し、最も高い点数をつけたモジュールの返答を採用する。人間の場合でも自分でしゃべった台詞によって改めて何かに気が付いたり、自己突込みをすることがあるので、返答の内容はもう一度人工無脳に食わせ、よっぽど高い点数をつけた場合は続けてその内容も返答に加える。モジュールによっては文字列に形態素解析のような前処理を必要とするものもあるので、予め処理したものを渡す。このシステムは思いついたモジュールを後から建て増しするのに適した構造をしている。特に今回示した部分は基本的に聞き手のアルゴリズムだけなので、話し手のアルゴリズムを今後検討する必要があるだろう。以下にそれぞれのモジュールの詳細を説明する。
相槌モジュールは「そう」とか「なるほど」のように文脈に依存しない適当な相槌を返すので、入力を必要としない。そのためスコアにはランダム値を使用する。スコアが乱数であれば、人工無脳製作者の意図と関係なく返答として採用されることがあるのでよい。
反射とは、主に入力文字列に含まれる感情表現に呼応してこちらも同じ感情表現をする仕掛けである。要するに相手が笑えばこちらも釣られて笑い、相手が悲しめば人工無脳も泣く。スコアの計算には、笑いや泣きの表現に点数をつけた表を利用し、入力文字列中に含まれるこれらの表現を数字に置き換えてその積をスコアにする。積を使うことで簡単な否定表現や二重否定に対応できる。感情表現といっても、喜怒哀楽のような複雑なものではなく、全体としてプラスかマイナスかといった程度である。なお、プラスの反応は人工無脳の行動に対する評価としても利用できるので、他のブロックからもスコアを参照することができるようにする。
ログというのは会話のログを探索して入力文字列とよく似た文字列が合ったらその次の行を返答として利用するアルゴリズムのことである。入力文字列は予め形態素解析されたものを使用する。スコアはログ中の文字列でより一致する部分の多いものほど高い点数とする計算方法を用いる。このモジュールでは、反射モジュールの点数をログに加味することで、ユーザから肯定的な反応のあった文字列を取り出しやすくできる。
このモジュールはあまり前例の無いアルゴリズムである。普通の会話の中で、相手の台詞に意味のわからない部分があった場合を想定している。例えば
A:ヘモグロビンが減ると前身に酸素を運ぶ力が低下するからな B:酸素を運ぶ? A:ああ、それが赤血球の仕事だからな
という会話で、BはAの台詞の中から酸素を運ぶという部分を取り出して、聞きなおしている。このような動作をこれまで登場したような辞書で行なおうとしても、未知の単語全てに対して対応しなければならないので不可能である。さらにこのような聞き返しはどんな単語に対しても起こり得るので、もっと一般的な方法で対応する必要がある。そこで、確認モジュールでは形態素解析を援用して「酸素を運ぶ」を「(名詞)を(動詞)」というような、一種の正規表現として扱うことを考える。すなわち、「(形容詞)な(名詞)」をキーにして、「(形容詞)な(名詞)って何?」といった返答を生成させればよい。