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

2002/11/03; 2005/02/11 revised

応答生成

next:連続性の維持 II >> Next Session:人工無脳の条件

テスト

タグ展開の可能性

人工無脳は自力で応答文を生成する場合、自らの意志で文を組み立て創出することはない。実際の人工無脳は辞書に書かれた言葉をそのまま吐き出すのであるが、毎回同じせりふをしゃべっていては変化に乏しいため、即興性を高めるため乱数による応答の選択とタグ展開によって変化の幅を広げる工夫をする。ここで注意しなければならないのは、人工無脳の製作者は変化の幅を広げるためのツールとして、if-thenやforといった制御構造を応答生成の構文に安易に導入しがちだという点である。これは人工無脳製作者のプログラマーとしての経験から、できるだけ制約のない言語のほうが拡張性が高くて美しいと考えた結果だと思われるが、制御構造が人工無脳にもたらすのは結局ルールによる応答生成であり、逆に即興性を殺してしまうというジレンマを抱えている。そこで本セクションでは、まずは制御構造を用いないでどこまで即興性を引き出せるかを検討する。

乱数による展開は人工無脳でよく使われている技術である。連想配列にあらかじめ以下の記憶を用意しておき、

$hello$ => こんにちは,こんちは,おはよう,こんばんは

$hello$を展開する場合は値に格納された候補の中からひとつをランダムに選んで返せばよい。ここで$hello$をタグと呼び、文字列の中にタグが含まれるタグは全て再帰的に展開されるものとする。従って以下の記憶が用意されている場合、

$COLOR$ => 赤,茶,黄,白
$ADJ$   => 山のような,小さい,$COLOR$色の,脱走する,風邪を引いた
$TYPE$  => ねずみ,牛,虎,兎
$ANIMAL$=> $ADJ$$TYPE$

"$ANIMAL$"を展開すると"色のねずみ"というような言葉を生成することができる。次に複数ターンにまたがる文章を生成しようとする場合には、穴埋め式の文の生成が便利である。

$story1$ => ある日$person$が山で芝刈りをしてたら大きな$object$が流れてきたのさ
$story2$ => それを持ち帰って真っ二つに切ったところ、中から$person2$が出てきた。
$story3$ => $person$はそれを見なかったことにして山に埋め、

ここで気がつくのは、1.離れた位置の$person$が同じ値を保持していないと脈絡が失われてしまう、2.$person$と$person2$は対になる言葉が入らないと意味がわからない、の2点である。これらを解決するために、「追記型の記憶」と「引数つきのタグ展開」を導入する。

高度なタグ展開

まず追記型記憶であるが、$mem+$のようにタグ名の末尾に'+'のような特定のキャラクタがあるタグが展開されたときに自動的に値が保持されるようにすることで、あまりコストをかけずに表現できる。 next:連続性の維持 II >> Next Session:人工無脳の条件