アメリカのMITで開発されたEliza11 J. Weizenbaum, "ELIZA--A Computer Program For the Study of Natural Language Communication Between Man and Machine", Commun. ACM 10[1] 36-45(1966)はセラピストとしてユーザと対談することで知られており,彼らの好きなチューリングテストにかけられてかなりの好成績を残したエポックメイキングなプログラムのひとつである。そして現在ではそのソースはさまざまなプラットホーム用に移植されており、Perl5 用のモジュールChatbot::Elizaとしても意外と簡単に手に入る。そこで今回はElizaのソースを見ながら多くの人を錯覚させた機構の正体を眺めてみる。
Elizaの会話機能の中核部分は分解decompと再構成reasmbである。以下にスクリプトから取り出してきたごく一部を載せる。勘の良い人であれば,この部分を見ただけでもおおむね想像がつくだろう。
key: remember 5
decomp: * i remember *
reasmb: Do you often think of (2) ?
reasmb: Does thinking of (2) bring anything else to mind ?
reasmb: What else do you recollect ?
reasmb: Why do you remember (2) just now ?
reasmb: What in the present situation reminds you of (2) ?
reasmb: What is the connection between me and (2) ?
reasmb: What else does (2) remind you of ?
elizaは人間の入力からrememberという単語を発見した場合,decompの * i remember * というルールが適用できるかどうかマッチングを行ない,*は順番にその後の(1)や(2)に展開される。正規表現の( )に相当すると思えばよい。次にreasmbに並んだ候補を前から順に選択してユーザに返している。重要なポイントは積極的にユーザの発言をとり入れて返事に組み込んでいる点で,それによってユーザはelizaがちゃんとこちらの言うことを聞いているような錯覚を覚える。rememberの最後の5という数字は優先度である。そして
key: name 15
decomp: *
reasmb: I am not interested in names.
reasmb: I've told you before, I don't
care about names -- please continue.
自分があまり望まない方向に進みそうな単語を見つけると,やんわりと方向をねじまげようとする。またやたらと疑問文を返す傾向が見られる,すなわちユーザに考えさせようとする点が特徴的である
key: i 0
decomp: * i @desire *
reasmb: What would it mean to you if you got (3) ?
reasmb: Why do you want (3) ?
reasmb: Suppose you got (3) soon.
reasmb: What if you never got (3) ?
reasmb: What would getting (3) mean to you ?
reasmb: What does wanting (3) have to do with
this discussion ?
decomp: * i am* @sad *
reasmb: I am sorry to hear that you are (3).
reasmb: Do you think coming here will
help you not to be (3) ?
reasmb: I'm sure it's not pleasant to be (3).
reasmb: Can you explain what made you (3) ?
decomp: * i am* @happy *
reasmb: How have I helped you to be (3) ?
reasmb: Has your treatment made you (3) ?
reasmb: What makes you (3) just now ?
reasmb: Can you explain why you are suddenly (3) ?
これらのかたよったキャラクタは、サイコセラピストというelizaの職業的役割から導かれている。Elizaがかなりの質問好きなのは上の例を見ればわかるが、ユーザがそれに答えた場合はどうするのか?
key: because 0
decomp: *
reasmb: Is that the real reason ?
reasmb: Don't any other reasons come to mind ?
reasmb: Does that reason seem to explain anything else ?
reasmb: What other reasons might there be ?
結局答えた内容の評価はせず,さらに質問で返している。このひたすら聞いて,絶対に答えの評価をしないという挙動は心理カウンセラーの基本的なルールである。
Elizaはreasm_for_memoryというキーワードを使ってユーザの返事の一部を記憶する。発言がdecompを満たしたとき,Elizaはreasmした結果をメモリに格納する。そして通常の返事ができなくなった場合に,このようにして蓄えた返事を持ち出してきて話題の転換を図ろうとする。これはなかなか巧妙な仕掛けで,前の会話の内容をきちんと押さえているゼスチャーが可能になる。
key: my 2
decomp: * my *
reasm_for_memory: Let's discuss further why your (2).
reasm_for_memory: Earlier you said your (2).
reasm_for_memory: But your (2).
reasm_for_memory: Does that have anything to do
with the fact that your (2) ?
Elizaの会話には明確な目的がある。それは人間の悩みの聞き手に徹することで、Eliza自身のことをしゃべったり、知っていることを話したり話題を振ったりしないように注意深く設計されている。もっとも人間が務めるカウンセラーは相手の緊張をほぐすために雑談から入ったりする柔軟性を持ってはいるが。そしてスクリプトの構造もそれに合わせて作られた聞き手のスクリプトとなっている。そのため、何の気なしにElizaに接したユーザはそれなりに話し掛けてその応答の自然さに驚くのであるが、Elizaの正体を見極めようとして意地悪く接する人工無脳製作者はどんな会話ができるのかを試してしまい、Elizaからあまり意味のある返事が返ってこないために意外とがっかりするものである。このような行き違いは聞き手に話し手であることを要求したことに起因する。要するに友達のような通常の話し相手がつねに聞き手であるのはおかしいというのがElizaの問題点だといえる。
Elizaが成功した理由を言語の構造から見てみる。まず英語は日本語と違ってはじめからスペースでトークンに分けられている。そして英語では日本語で通常省略してしまう my とか he とかを省略しないので、すなわち文脈に対する依存度が英語は日本語ほど高くないため、スクリプトが作りやすいといえよう。