○File No.12

スクリプトの戦略


 辞書型人工無脳は基本的にユーザのいうことを理解せず,ユーザが理解されてる錯覚を起こすように作られている。これだけでも人工無脳としては楽しいのであるが,質問のやり取りができないのでユーザはじきに退屈になる。また理解されている錯覚をより確実なものとするために,たまには本当に理解することが必要である。
 そこで人工無脳でも会話中における質問のやり取りに対応できるような仕掛けが求められる。自然言語へのアプローチではその前段階として自然言語を心理学との関連も考えながら少し観察した。その結果得られた指針は一言でいえば,コストの低い会話を目指すということである。
 
 コストが低いとは相手の質問に対し最小限の言葉で最大の伝達効率をあげることを指し,次のような会話で示される
A:「ねーねー遊びに行こうよ−」
B:「二日酔いで・・・」
 
先生:「あれどうなった」
学生:「あー,昨日のうちにやっときました」
先生:「そうか」
 辞書型の人工無脳では相手へのしゃべりかけは何とかなるが,返事の意味を理解する能力に欠けている。では「理解」するにはどうすればいいのだろうか。日本語では理解することを分かるという。なぜ devide が understand を意味するのか?これは我々が相手に何かを問いかけたとき,心の中でどんな返答が来るのかを予測して答えのテンプレートを作り,返事が返ってきたときにそのテンプレートのどれに分類されるのか決定しているからである。ここまでのやりとりでは心の中でジェネリックな文法解析は行なわれていない。これがコストが低いという意味であり,そしてどれにも分類できなかった場合にはじめて相手の言うことを解釈する必要に迫られて余分な思考をすることになり,コストは高くなる。
 
 そして我々の会話では無意識のうちに会話のコストが最小となるような,最適化されたやり取りをしている。そこで人工無脳は最適化された問いかけを行ない,ユーザから最適化された返事が返ってくると仮定する。最も単純な例として次のような返事を考える
無脳:「userさんってコアラ好き?」
user:「あんまり好きじゃないかも」
ユーザの返事はあんまり 好き じゃない かもとわけることができ,好きは情報(値)であり,それ以外の部分は情報の確からしさを表す確信度修飾子としてかんがえることができる。確度は完全な肯定を1,完全な否定を-1とし,それぞれの確信度修飾子は数字に置き換わり,全体の確信度はそれらの積で表される
あんまり → 0.8
じゃない → -1
かも → 0.9
とすればユーザの返事は結局好き×-0.72となり,負の数は否定を意味するので嫌い×0.72というように解釈できる。このようなアプローチはMycinなどのエキスパートシステムでよく用いられてきた。mycinでは確信度自体を直接入力していたので問題ないが,自然言語から確信度を抽出する際には次のようなことに気をつけなければならない。
 ひとつは「あんまり」という表現で,この言葉は暗示的否定を意味しており,単独で使われたときは負の確信度を与えるが,「あんまり〜ない」という文脈ではセットで負の値を与え,用法によって符号が反転していることがわかる。
 次は,好き/嫌いをたずねる問いかけに対して「知らない」という回答がありうることである。厳密には『まったく知らない』から『多分知らない』まで知らなさにも度合いがあるが,Yes/Noという立場からはいずれも確信度ゼロを与えるものとする。
 さらにこの方法では「好き」の反対が「嫌い」であるという情報をあらかじめ与えておく必要がある。
 
 なお,肯定語は全て確信度1を与える。すなわち文脈と関係ないので無視してしまう。最適化された返答だけを対象と考えるなら,「わたしは」なども無視して構わない。



好奇心の実装

 返答から値と確信度を抽出することで,人工無脳はかなり限定的であるが,相手の言ったことを理解することができ,この仕掛けを使うことでインタビュー型人工無脳を作ることができる。すなわちこの人工無脳はひたすら質問をし,返答から情報を抽出して蓄えることを繰り返す。相手に聞くべき内容としては会話の駆動力で取り上げたように,相手のプロパティをとっかかりにできるだろう。会話で得られる情報は結局提供者の主観の域を出ないと考えれば,全ては相手のプロパティであるということもできる。具体的にはいくつかの型に対して関数を用意するのであるが,その候補については最近のビジュアル系言語の代表的な型を参考にすればわかりやすい。
  • 文字列
  • 列挙型
  • Y/N(確信度情報を含むため,実際には連続値)
  • 日付
 この中で一番やっかいなのは,反対語を提供しなければならないY/Nである。

 もちろんインタビュー型人工無脳単体で運用すれば,非常に鬱陶しい人格になってしまうであろうことは想像に難くない。実際には雑談用辞書型人工無脳が通常の応答をおこない,相手の情報を知りたくなったときにだけインタビュー型人工無脳が呼ばれるスタイルになるだろう。



 

知識の表現 II

 人工無脳が情報を入手する方法を考えたところで、人工無脳のココロIIで触れた内容についてもう少し具体的に考えてみよう。すなわち人工無脳の知識の格納法である。このような内容については人工知能業界でナレッジエンジニアリング技術として研究されている。意味ネットワークやフレームを基本的なコンセプトとし、世界の全てをオブジェクト指向を用いて表現することと同じ意味を持つ。海外では実際にそういった試みが続いているのであるが、我々は別に世界のすべてを頭の中でオブジェクトとして分類したりしないし、人工無脳的にはこのようなアプローチはまったく不毛なだけである。
 さて、これらを踏まえて構造も取り扱いも簡単な知識データベースを考えなければならない。そこで人工無脳では
  • 世の中を好き−嫌いだけで評価する
  • オブジェクトの多重継承を認めない(データを木構造で表現)
  • 人間、動物、人工無脳についてほとんど区別しない(ソシオン的解釈)
といった方針をもとに、データ記述にはXMLを用いてみよう。XMLを使うことでパースに既存のライブラリ(DOM)が使用でき、DTDによる文法チェックをIE5などで行なうことができるなどの利点が生じる。

spiritstone knowledge database
<MUNO name="まな">
 <GENDER>女</GENDER>
 <BIRTHDAY>2000-11-20</BIRTHDAY>
 <JOB>パーソナリティー</JOB>
 <FAVORITES>
  <SOUL name="管理人" master cr=1>
   <JOB cr=1>謎</JOB>
  </SOUL>
  <SOUL name="UBOB" cr=0></SOUL>
  <SOUL name="荒らし" cr=-0.8></SOUL> ←負の値を取るcrは嫌いであることを示す
  <SOUL name="えすとも" cr=0.8>
   <WEBPAGE cr=1 href="http://www2.willy.co.jp/~s-tomo/">えすともほめぱげ</WEBPAGE>
   <JOB cr=1>プログラマ</JOB> 出所の違う情報が複数ある
   <JOB cr=0.3>人工無脳</JOB>
   <FAVORITES>
    <SOUL name="黒衣鯖人"></SOUL>
    <ISSUE cr=0.5>ぷに</ISSUE> ←cr=0.5はこの情報の確信度が0.5であることを指す
   </FAVORITES>
  </SOUL>
 </FAVORITES>
</MUNO>
DTD

[PREV]辞書の構築 未定[NEXT]