○File No.7

会話のアルゴリズムI


カード型会話モデル

 われわれの会話は一回の発言と一回の返事で終わらないのが普通で,何回ものやり取りを通して意味を伝達する.いままでに公開されているさまざまな人工無脳は基本的に長いやり取りはしない.それが人間が単調さを感じる大きな原因である.このことがいままでの考察で次第に明らかになってきた.また,多くの人工無脳は人格をうたっているものの設定によっていろいろな人格を表現できるかというと,膨大な知識ファイルを延々と編集したりしない限り難しかった.しかし二人の人が同じ職業についていてほとんど同じ知識を持っていながら全く性格が異なるように,本来知識と人格は独立である.
 そこで文脈の追跡をスタックによって行い,人格の表現をカード方式で実装できないだろうか.

 カードとは,ここではひとつの発言の単位を指す.カードの集合をデッキと呼ぶ.カードとデッキの考え方はトレーディングカードゲーム(Magic: the gatheringなど)で一般的に使われている概念である.まずはカードにどんな種類があるのかを見る.話をわかりやすくするために人工無脳が切り出す話題だけに注目する.

切り出す話題のカードの例

NOP:何もしない

 このカードを引いたとき,人工無脳は文字通り何もしません.標準的なデッキではNOPカードが全体の1/3程度になるようにします.NOPの比率を高くしすぎるとしつこくてやかましくなります.逆に少なくすると無口でつまらなくなります.

QRY:ユーザ情報の問い合わせ

書式:QRY [-unknown|-known]
 人工無脳は対象のユーザのプロパティのうち,
-unknown:まだ知らないプロパティについての問い合わせ
-known:すでに知っているプロパティの確認
をおこないます.

DRE:夢報告

書式:DRE [-f] <テンプレート>
 人工無脳は言葉をランダムに組み合わせて,人工無脳が見た夢の内容を生成します.-fオプションをつけた場合,内容について感想を述べます.テンプレートでは%text%(夢の内容)が展開されます

OPI:提案

SLP:居眠り

書式:SLP [-df]
人工無脳は数ターンの間居眠りします.-dオプションがあった場合は居眠り時に夢が生成され,DREがトリガされます.-fオプションがあった場合は-fオプションつきのDREがトリガされます.

WTH:今日の天気

書式:WTH <URL> <Regexp>
URLで示されるhtmlからRegexpをつかって天気を抽出し,表示します

NWS:今日のニュース

書式:NWS <URL> <Regexp>
今日のニュースをURLからregexpをつかって抽出し,表示します.必ず感想を述べます

RUN:家出

ACC:アクセス統計の報告

PRO:職業的トピックスを話す

書式:PRO [-f]
職業的トピックスファイルからランダムに一行選んで表示します.-fオプションで感想を述べます.

BUS:仕事の調子を聞く

 今日の仕事がはかどっているか,面白いか,いっぱいいっぱいか,などを質問します.ユーザの仕事が何か知っている場合はそれを利用します.

CND:体調を聞く

 ユーザの体調がいいか,悪いかなどを聞きます.ユーザが酒に強いかどうか知っている場合はそれを利用します.

ILL:体調を崩す・病院へ行く

 人工無脳は咳き込んだり,熱を出したりします.このカードが引かれるたびに症状が進み,病気カウンターがひとつ増え,人工無脳の体力を上回った場合病院ゆきになります。病院へ行った場合,次の日まで活動を停止します.

QEL:からむ

ユーザに難癖をつけたり文句を言ったりします.ある程度親密でないと発生しません

MUR:独り言(ぼそ)

SNG:歌う

書式:SNG <歌> 人工無脳が歌を歌います.歌の内容を文字列で渡します.鼻歌も同様



このようにあらかじめ準備されたカードの中から人格の設計者は40枚を選ぶ.もちろん同じカードを何枚選んでも良い.また一枚も入れないカードがあってもよい.人工無脳が話題を切り出すときこの40枚の中から一枚を選ぶことでさまざまな発生頻度を持ったかたよりのある話題提供が可能になる.たとえばILLカードを多く含めば病弱なキャラクタ,質問系カードが多ければ鬱陶しいキャラクタ,SLPばかり入っていればサボりがちなキャラクタ,などである.特に重要なカードにNOPがあって,これは何もしないのであるが,いわゆる土地カードのようにデッキの1/3程度入れておかないと,しゃべってばかりで疲れるキャラクタになってしまう.
 同じように人間に対して返事を行うときも答え専用のカードセットを使って返答用デッキを組むことで,人の言うことにとりあえず反発する素直でないキャラクタや,礼儀正しいキャラクタ,フィーリングでしか考えないキャラクタなどが実現できる.


返答カードの例

NOP:何もしない

全くの無反応です.ユーザを無視する人工無脳以外はデッキには余り入れないほうがいいでしょう.

FEL:感想を述べる

書式:FEL <テンプレート>
直前の発言に対する感想を述べます.感想は文に含まれる単語にスコア付けを行って決めます.テンプレートで展開される文字列は%Text%(本文)です.

AGA:聞きなおす

書式:AGA <テンプレート>
聞きなおします.

QST:質問する

書式:QST <テンプレート>
ユーザの質問に対して質問を返します.知識の辞書をサーチしてわからない単語について質問します.知っている単語について確認を行います

SAY:相槌を打つ

書式:SAY <テンプレート>
肯定的な相槌を打ちます.『同調』が含まれます

DIS:同意しない

書式:DIS <テンプレート>
 ユーザの答えをやんわりと否定します.「あやまる」「笑う」「ごまかす」が含まれます

BOK:ボケる

書式:BOK <テンプレート>
質問の中からひとつ単語を選んでそれなりに似ているものを返します.%source%(元の単語)%word%(ボケた後の単語),%text%(ボケた後の単語の説明)が展開されます.

RPL:返事をする

書式:RPL <知ってるテンプレート> / <知らないテンプレート>
知識の辞書から返事を探して答えます.見つからなかった場合は知らないテンプレートを使います.

INT:話の腰を折る

書式:INT <切り返しの言葉>
 人工無脳はこれまでのスタックを破棄してイニシエイトを開始します.そのとき切り返しの言葉をまず表示します

REV:逆質問

 全く同じ内容の質問をユーザに返します


 前ページで述べたスタックはこのカードの単位で扱うことができる.またユーザからの返事も分類してカードとして扱うことで見通しの良い処理が可能になる.
 そのほかの利点としては,カード単位なので機能を増やしやすいことや機能を増やした場合にも過去のデッキがそのまま使えることなどがあげられるが,これはそのままカードゲームの利点を引き継いでいるといえる.
[PREV] 自然言語へのアプローチ 会話のアルゴリズムII[NEXT]