対話システムを作ろう
2002.9.24 小磯拓也(文章) ナナ(html)

導入

世の中で人工知能と言うと真っ先に思い浮かぶのは、コンピュータと話したりすることだと思います
(人工知能には機械翻訳や将棋プログラムも含むのですけどね)。
もちろん、人間の頭というのは未だに分からないことも多く、とてもじゃありませんがそのような人
工知能を実現するのにはほど遠いと言わざるを得ません。人間のように考え、そして行動するようなシ
ステムができるのはまだまだ先のようです。
けれども、対話させるだけならば、実はそこまで複雑なことをしなくても良かったりします。極端な
話、ゲームに出てくるキャラクターは、対話システムと言えないこともありません。
しかし、ゲームの場合はあらかじめ話の内容が決まっているもの。世間話のように好きなことをしゃ
べったりすることはできませんよね。今回はそのような世間話をできる対話システムについて考えてみ
ましょう。


基本的な考え方


図1 例文集を読みながら、相手と対話をする

海外へ言ったときのことを考えてみましょう。まったく何を言って良いのか分からない場合、おそら
く会話例文集のようなものを持っていくことになるでしょう。それを使えば、相手の国の言葉が分から
なかったとしても会話はできるでしょう(図1)
この考え方を対話システムに応用するとどうなるでしょうか。ユーザの発言を例文集から検索して、
対応した応答を返すと言う形になるわけです。
そんなわけで、システムの仕組みは、簡単に言えば図2のようになります。よーく見てみると検索エン
ジンとあまり変わらないつくりになっているんです。検索文を入力すると、何が文章が返ってくること
を考えれば、全く同じと言ってもいいかも。

図2 対話システムのおおまかな仕組み

まず、システムは「問いかけ」と「応答」の対からなるデータを用意します。例えば「あなたの名前
は何ですか?」と「私の名前はパソコンです」というような文を対にしておくわけです。このようなデ
ータをとにかく大量に作り、データベースにします。会話集の中身を充実させたり、検索エンジンの検
索対象ページを増やすようなイメージでしょうか。
システムの流れは次のようになります。
ユーザが何か文章を入力してきたとします。そうしたらシステムはそのユーザの入力した文章と、似
た意味の文章をデータベースから探します。例えば「あなたの名前は?」というのがユーザの入力であ
れば、データベースから「あなたの名前は?」という文章を探します。
もしもデータが見つかったならば、次にその応答にあたる部分の文章を返します。すなわち「私の名
前はパソコンです」という文を出力すればいいわけです。そうすると、
「あなたの名前は?」
「私の名前はパソコンです」
この通り会話ができるようになるわけです。
この方法の利点は、とにかくたくさんデータを作れば、様々な対話に対応できると言うことです。そ
れこそ100万個とか200万個とか、大量のデータを持ってさえいれば、ユーザの入力とどれかの文章が
似ることになり、返事を行うことができます。
ただ、問題点は、どのように「似た意味を持つ文章」を探すかと言う点で、これは様々な研究が行わ
れています。同じ文章でも場合によって意味が全く異なってしまうというのは、普段良く見かけること
ですし、また、文章一つだけ取り出しても何を意味しているのかさっぱり意味不明なこともあります。
といっても、今回はそれほど難しくするつもりはありませんので、文字列が一致した場合、くらいに
考えておきましょう。これでも、簡単な受け答えならばなんとかなるでしょう。


対話システムを作ろう

実際のシステムを作ることを考えてみると、次のようになります。ソースコードとかは示しません
が、構造は単純なので、プログラミングに慣れている人ならば簡単に作れるのではないかと思います。
まず、データベースを作ります。「問いかけ」と「応答」の対になるデータをたくさん用意してくだ
さい。最初なので20個くらいで良いでしょう。
次にプログラムを考えます。それは図1のような流れになります。つまり、ユーザの入力を監視して、
それを受け取ったらデータベースと比較する。もしもマッチするものが見つかればその応答を返すこと
になります。…と基本的な部分は実はこれだけだったりします。たいていの人工無能もこのようなアル
ゴリズムで動いているはずです。

図3 ユーザが話しかけてシステムが答えるまでの流れ

 返事が見つからない…というのは、データベースの中に適切な答えが見つからなかった場合のことを
さしますが、そう言う時にはどんなときにでも使えるような相槌をうたせるというのも一つのアイディ
アです。
それでは、ちょっと試しに簡単な動作例を示してみましょう。今回は次のようなデータベースを用意
しました。
(1)問いかけ「こんにちわ」/応答「こんにちわ」
(2)問いかけ「あなたの名前は?」/応答「パソコンです」
(3)問いかけ「さようなら」/応答「またね」
ユーザが「あなたの名前は?」と入力した場合を考えます。そうするとシステムはデータベースの中
から、マッチする文章(今回は入力文と同じ文章)を探していきます。すると(2)とマッチしますの
で、その応答にあたる「パソコンです」を返します。次にユーザが「さようなら」と入力した場合を考
えます。そうすると、システムは(3)を選び出して、「またね」と返してくるわけです。

図4 ユーザの入力文と、データベースの文を比較する

実行例を見てみるとこんな感じになります。
「あなたの名前は?」
「パソコンです」
「さようなら」
「またね」
 いちおう、対話になっていることが分かります。
後は、このようなデータベースをひたすら作れば良いわけです。データベースが大規模になるほど、
たくさんマッチするものがでるはずですから、様々な状況に対応することができるようになります。
これからの改良方法のアイディア
とまあ、非常に簡単な対話システムを考えてみたわけですが、これでも簡単な挨拶くらいならこなせ
ます。ただ、これだけでは、もちろん問題が山積みです。これらを改良していくのがまた面白かったり
するわけですが..。
ここでは簡単な改善案として、一番のネックであるデータ集めについてのアイディアを考えてみま
しょう。ちまちまと入力してくのもアリです。最初は多分そういうふうにやらざるをえないでしょう。
それでは、ある程度データがたまった場合にどうするか?どうせなら対話しながらデータを増やしてい
きたいですよね。
そんなわけで、対話をした結果をログとしてとっておいて、それをデータとして追加していくという
解決案がひとつあります。こうすることで、だんだんと話していくうちに語彙が豊富になっていくわけ
です。
みんなでいじれば、知らないうちにシステムが賢くなっているでしょう。


終わりに

と、簡単に説明してきましたが、いかがでしたでしょうか。インターネット上には様々な対話システ
ムが公開されています。それらは独自に拡張を加えたりしています。そういうものを見てみると、面白
いかもしれません。
参考になるかもしれないURLhttp://www-ai.ijs.si/eliza/eliza.html
今回のシステムとは会話の方法が違いますけど、参考と言うことで。
多分世界で初めての対話システムであるELIZAです。これはある精神科医のカウンセリングの手法を
真似したシステムです。よく出来ていて、何人もの人がこれは本物の人間だ!と思ったそうです。ただ
し、世間話をするわけではなく、受け答えも単調なものになってしまいます。
ほかにも、インターネットで「人工無能」と検索するといろいろな情報が得られると思います。