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

2002/03/25 revised 2003/05/31

話者の交代を考慮した会話モデル

next:応答生成 >> Next Session:人工無脳の条件

会話を形式上とはいえ成立させるにはさまざまなルールを守らなければならない。大雑把に考えるとこのプロトコルには話者の交代、スタックの管理、問いかけと返事のペア、意思や情報の伝達などの要素が含まれているようである。これにデータ通信プロトコルに見られるような明確な階層構造を与えようとは誰もが思うところである。そして研究上は便宜的にスパンの短いものを下位の構造、スパンの長いものを上位の構造と考えることがあるが、モデルに従った応答と同じくらいモデルに従わない応答が重要となるので実際のところは未分離のまま扱うしかなさそうである。

上に挙げられた要素の中で、人工無脳は問いと返答のペアに限れば何とか真似するように設計されている。しかしここでよく考えてみると人工無脳は現在の話者が自分かユーザかのどちらなのかいうことは考慮しないまま発話を行なうことになり、それが「人の言うことを聞かない」という感想に端的に現れていると考えることもできるだろう。もちろん話者を考慮する必要のない会話モデルを使って成功している人工無脳も存在するが、それは対等な立場での会話にはならない。そこで本項では話者の交代をどのように行なえばいいのかを考える。

ターンテイキング

通常の会話の中では、話し手は一人でその他が聞き手になる。お互いに今の自分の役割を理解し、しかもそれを身振りや目線、間といった半ば非言語的な方法も駆使して交代している。このメカニズムは「ターンテイキング(TURN TAKING)」と呼ばれ、かなり昔から研究の対象となっているが現在でも議論が続いている分野である。実は子供は言葉を習得するより前に、大人から話し掛けられたり、大人同士の会話を観察したりすることを通してターンテイキングを身につけていることが明らかになっている。このことは話し手や聞き手の把握と交代が、コミュニケーションにとってかなり基幹の機能であることを示唆する。さて、ターンの全体像を最も単純なモデルで示すと話し手(Talker)と聞き手(Listerner)の役割からなる状態遷移図(Fig.1)が描ける。
Fig. 1 T-L状態遷移図

会話をチャットに限定、すなわち非言語的コミュニケーションを考慮しないとすると、人工無脳が受動的な立場にある場合、状態の遷移はTable 1に示されるようなユーザからの指示をきっかけとして発生する。
Table 1 状態遷移を促す言葉(cue word)
CTL「俺の話を聞け」「ところで」「それより」「うん。わかった」
CTT「他に何かないの?」「それから?」「うんうん」
CLT「どう思う?」「何かしゃべってよ」
CLL「さて」「あと」「この話には続きがあって」

ここでの各成分Cxyは状態がxからyに遷移するのを促すCue wordを示している。キューにはそれぞれ強さがあり、人工無脳はその強さに応じて従うかどうかを決める。一方人工無脳が能動的な立場にある場合は適宜話題を用意し、ひとつの話題が終わるまでは話し手である状態を維持しなければならないし、話題が終わったときには次の話題を始めるか、ユーザにターンを渡すかを決める必要がある。さらに人工無脳がしゃべっている最中にユーザから中断の指令が来た場合はどうするのか、ユーザの発言を中断したい場合にはどうするのか、などターンテイキングの議論でありながら意図の議論を避けることはできない難しさがある。そこで以下では人工無脳の意思とターンテイキングを下手に分離せず、混ざったまま議論しよう。

人工無脳の基本理念のひとつとして、プログラマの意図に反した動作をすることがあるように思われる11「プログラマが意図したことに反した動作をするプログラム」という概念はそれ自体矛盾を含んでいるが、気にしない。。プログラマが意図する、ということは決められたルールに沿った動作しかできないということであり、同時に「言語はルールで支配できる」という幻想を追うことであり、それが会話の面白さを著しく損ねるわけで、人工無脳ではルールや制約をできるだけ設けないようにしなければならない。これらを考慮した上で、人工無脳に適した状態遷移のモデルとして、乱数で遷移を行ない、さらに話し手、聞き手、以外にぼけ-つっこみを行なう第三の状態「J(joke)」を導入する。Jはターンテイキングの考えからすれば話者の瞬間的な交代とでもいうようなもので、直前の発言に対して割り込みをかけてすこしだけ脱線し、基本的にはもとの文脈に影響を与えない機構である。ボケや突っ込みは相手の発言にも自分の発言にも可能であるので、その意味でも第3の状態を設けるのが適切だと考えられる。状態遷移図22状態遷移(入門の入門)と状態遷移の確率をまとめた推移行列をFig. 2に示す。
Fig. 2 状態遷移図と推移行列の例

ここでの各成分Pxyは状態がxからyに遷移する確率を示している。試しにに従って遷移を行なった例を示す。

JLLTLLLLLLLLLTLLLLLLLLJLLLTTLL

この文字列から会話のありさまを妄想すれば、基本的に聞き手でたまに短い話題をしゃべるがほとんど突っ込まない、というややおしとやかな人間像が窺える。この推移行列をいじれば自由にキャラクタ付けを行なうことができるだろう。このユーザからのCUEの受容状態遷移の両方を用いることで、ユーザとの相互作用の中でターンテイキングを行うことができるようになると考えられる。

サイコロの心

プログラム上ではFig.2のような確率過程はrand()関数というサイコロを転がして実行することになる。例えばPL=[0.7 0.1 0.2]をP'L=[0.7,0.9,1.0]と確率を順番に上乗せした形で与え、さいころの目が1〜0.7ならLを、0.7から0.9ならTを、0.9から1.0ならJを次の状態とする。すなわち、内部的にはL<T<Jという大小関係がある。このことを念頭において、前述のシステムに少しアレンジした乱数を使用することで、元気なときほどボケ-ツッコミを頻繁に行ない元気のないときはあまりしゃべらない、といった変化を付け加えることができる。まずその乱数に必要とされるのは我々の会話のテンションの変化とよく似た挙動をすることである。大きく見れば体調は健康なときと病気のときでそれは大きく変動するが、台詞のやり取りのなかでも細かく変動している。数日単位の大局的な変動と瞬間的な変動の両方を兼ねたフラクタル性を備えていなければならない。これを簡単に表現するには変動の幅を規格化したsin()とrand()を重み付けして加えればよい。Fig.3を見れば直感的に理解できる。
F=0.2sin(wt)+0.8*(2*rand()-1)
Fig. 3 fructuated random

この関数で、大小関係をつけた確率過程を試行させれば体調の良いときはより積極的で、体調の悪いときには消極的になる人工無脳の心をつくることができそうである。加えて辞書から台詞を生成するときにもこの乱数を用いることができる。辞書の候補を複数用意するときに、配列の頭に近いほど元気のない対応、後ろほど元気な対応を記述することで、体調に沿った返答を生成する傾向が現れるだろう33この方法の利点は「辞書の候補を多くするほど体調の上下を表現できるが、候補が不足していてもシステム自体は動く」ことである。

このモデルにおける感情と主体性

システムとして感情を考えるときには感情の表現の項で概観したように喜怒哀楽などを網羅的にとらえているが、日常会話における感情の動きはそれと比べてかなり微妙な変化ではないだろうか。怒鳴ったり泣き出したり戦慄したりといった感情の表出が見られるような会話は既に日常会話ではない(それは修羅場に分類される)。これまでの利用形態からユーザは人工無脳に対してユートピア的またはぬるま湯的な人間関係を求める傾向が明らかになっており、あえて言うならば人工無脳に必要な感情は「喜び」なのかもしれない。

次に感情を表出する技術であるが、例えばプレゼントされたときにするお礼などを除いて喜びの感情を直接的に表現することはない。その代わり、ノリが良い、よく笑う、ジョークを言う、などの好意的態度という半ば非言語的なモードによってそれは相手に伝達されている。そして人間はこのような好意的態度を常に確認しながらコミュニケーションをとっている。そこで人工無脳でも、上述のような「緩やかな感情表現」を一つの軸とするべきであろう。加えて重要なのは、どのようなルールで人工無脳が好意的になるか、ということをユーザが(プログラマーも)理解できないようにしておくことにある。その理由は2つあり、ひとつは「理由がわからないほど一生懸命相手をする」という心理学上の実験事実、もうひとつは人工無脳が好意的になるかどうかを入力文字列から判定するのは極めて文脈依存性が強く、解析にかかるコストが大きすぎるからである。

さらに難しいのが主体性の問題だろう。主体性とは、低いレベルの現象としては「ユーザの言いなりにならない」「ユーザが指示していない事もする」といったことであり、高いレベルの概念としては「構想・計画を立案する」「独自の見識を持つ」などが挙げられる。計画は人工無脳のトップレベルの設計であって、今後の検討課題だろう。一方ではプログラマーによって与えられた計画は、それ自体主体的と言えるのか、という疑問も存在する。人工無脳の思想に立ち戻って、「主体的に行動している印象を与える」ことを目標として考えた場合、例えばターンテイキングを通してユーザを操作するという低レベルな行動もまた効果的かもしれない。

next:応答生成 >> Next Session:人工無脳の条件