人工無脳は考える 人工無脳は考える | 掲示板 | 資料 | アーカイブ

2005/04/05

計画ブロック入門編(2)

next:計画ブロック入門編(2) >> Next Session:人工無脳の条件

人工知能の研究者J. Weizenbaumによって1966年に発表されたElizaには今日でも英語版人工無脳の多くに影響を与える、優れたアルゴリズムが用いられている。こうしてみるとマルコフ連鎖によるテキスト生成(1948)といいElizaといい、人工無脳でよく使われる基礎理論は1950年頃からほとんど進歩していないのだろうか?というわけで今回は我々が押さえておくべきもうひとつの返答アルゴリズムとして、ElizaのRogers派会話アルゴリズムを取り上げる。

Rogers派人工無脳アルゴリズム

Elizaを試してみるには、unix系環境(windowsならcygwin環境など)では次のようにすればよい。

$ cpan Chatbot::Eliza
$ perl -e 'use Chatbot::Eliza; $mybot = new Chatbot::Eliza; $mybot->command_interface;'

Eliza:  Please tell me what's been bothering you.
you:    

Elizaは前述のmarkov連鎖とは逆に基本的に過去のログを使用しない。にもかかわらず文脈を追跡できているのはElizaが常に会話の主導権を握っていることと、Table 1に示すようにある程度意味を把握した返答ができるように設計されているからである。
Table 1 elizaの反応
単語またはフレーズ返事の例
sorry, apologize気にしないで
I remember 〜〜についてどう思う?
do you remember 〜忘れてませんよ。
I forget 〜何故思い出せないんでしょうか?
did you forget 〜どうしてそう思います?
if 〜本当に〜なんですか!
I dreamed 〜前にもそんな夢を見ましたか?
dreamどんな夢ですか?
perhapsはっきりしないんですか?
name興味ありません
helloこんにちは
computer何故コンピュータの話をするの?
am I〜そう信じたいのですか?
are you〜私が〜でない方がよかったですか?
your〜私の〜がどうかしましたか?
I desire 〜〜できるとどうなるんですか?
I am sad〜〜とは大変でしたね。
I am happy〜私に何か力になれることはありませんか?
I berief I 〜本当にそう思ってますか?
I don't 〜なぜしないんですか?
I feel〜もっと聞かせてください。
yes続けてください。
no oneそうかもしれません。
noなぜですか

さて日本語版の人工無脳製作者としては、Elizaの良い点を取り入れつつ上手く利用したい。Table 1を見てもわかるようにelizaが反応する文をそのまま日本語に訳したところで、そんな日常会話はほとんど無いだろう。そこで、人工無脳に演じてもらいたい相槌のリストを作り、次にそれを実現するようなスクリプトを考えよう。
Table 2 人工無脳の相槌
相槌をトリガーする条件返事の例
(句A)の(句B)/(句A)と(句B)/(句A)が(句B)/
(句A)に(句B)/(句A)を(句B) など
〜って?
(句A)〜吹いた/これはいい〜ですね
(名詞)忘れてませんよ。
(サ変動詞)〜なんてしたんですか!
若い/若く春秋に富むとはこのことだね
(A)過ぎそうなのか

一つ目の例は、相手の台詞の中で意味のわからない部分をそのまま聞き返す例である。例えば(句A)の(句B)とは「軽便鉄道/の/停車場/の/ちかく/に/、/猫/の/第/六/事務所/が/あり/まし/た/。/」という文の中で軽便鉄道の停車場猫の第六事務所などにあたる。単純に(A)や(B)を一つの形態素にしてしまうと猫の第などとしてしまうので、適切に句を抽出する必要がある。それでは、句の境目とはどこだろうか?

句の抽出

日本語における句の定義を正確にするのは難しい。日本語文法関連の本を見ると、たくさんの研究者がそれぞれ独自に日本語文法を作っているようで句の定義にも色々ある。正確さにこだわってもあまり意味はなく、定義から少し外れた部分こそが面白さと笑いの母体なので、この部分は許容したい。少し話がそれるが、「笑い」について次のような実験がある。目隠しをした被験者の手のひらに、1gのおもりを乗せる。次にそれを2gのおもりに取り替える。順番におもりを重くしていき、突然軽いおもりを載せたときに被験者は笑うそうである。また、最後に載せるおもりが軽いほど大きな笑いになるということである。この例は、人間が予想の範囲外の出来事に対して面白さを感じるということを示している。

句の定義だが、とりあえず「その部分だけを抽出しても意味がわかる」文字列の単位とする。先ほどの例文を詳しく見ると

$ chasen
軽便鉄道の停車場のちかくに、猫の第六事務所がありました。
軽便鉄道        ケイベンテツドウ        軽便鉄道        名詞-一般
の      ノ      の      助詞-連体化
停車場  テイシャジョウ  停車場  名詞-一般
の      ノ      の      助詞-連体化
ちかく  チカク  ちかく  副詞-一般
に      ニ      に      助詞-格助詞-一般
、      、      、      記号-読点
猫      ネコ    猫      名詞-一般
の      ノ      の      助詞-連体化
第      ダイ    第      接頭詞-数接続
六      ロク    六      名詞-数
事務所  ジムショ        事務所  名詞-一般
が      ガ      が      助詞-格助詞-一般
あり    アリ    ある    動詞-自立       五段・ラ行      連用形
まし    マシ    ます    助動詞  特殊・マス      連用形
た      タ      た      助動詞  特殊・タ        基本形
。      。      。      記号-句点
EOS

「第六事務所」は「接頭詞+名詞+名詞」と解釈でき、連続した名詞や形容詞などはひとくくりに扱うべきで、記号や助詞では区切ってよいように見える。そこでチャットのログを観察することで、人工無脳に即した規則が抽出できると考えられる。これは正規表現に書き下すことができるはずで、例えば、

((名詞)|(接頭詞)|(接尾詞)|(副詞))+((助詞)|(格助詞))((名詞)|(接頭詞)|(接尾詞)|(副詞))+

というようになる。すなわち、chasenからの品詞情報を使うことで句を抽出できる。実装の例としては品詞コードを一文字の英数字に置き換えれば

([ABCD]+)([EF])([ABCD]+)

のように扱える。

next:計画ブロック入門編(2) >> Next Session:人工無脳の条件