対話型AIの作り方
はじめに
今回は、一対一で対話を行うAIの作成方法を解説します。
(参考:恋するプログラム―Rubyでつくる人工無脳)
AIを構成する3つの要素
AIを構成するものは大きく分けると、3つになります。
- どんな返事をするのか?
- どんな記憶を持っているのか?
- どんな感情となっているのか?
クラス図にするとこんな感じです。
AIが最上位に位置するクラスとなります。
AIは、
Replay(返事)、Memory(記憶)、Emotion(感情)
を状況に応じて入れ替えることにより、
さまざまな「言葉」を返します。
記憶(基本)
まずは、記憶から見ていきます。
記憶を作るには、パターンを持った辞書ファイルをあらかじめ作っておきます。
これは特定のキーワードに対応する表のようなものです。
例えば、kenmoAIクラスは、「モスバーガー」が大好きだとします(´∀`;
その場合には、例えばこんな対応表を作っておきます。
パターン | 応答 |
---|---|
モスバーガー | モスバーガー大好き! |
スパイシーチリドック | あれは死ぬほど辛いよ |
ナンタコス | ナンカレードックがおいしいよ |
こうすると、プレイヤーの発言に「モスバーガー」という
キーワードが含まれていた場合に(判定は正規表現などを使う)
「モスバーガー大好き!」という言葉を返すようになります(´▽`;
記憶(応用)
応用として、以下の方法があります。
- パターンに対応する言葉を複数用意しておく(逆もあり)
- オウム返し
- デフォルト応答
2について補足すると、一致したパターンをそのまま返す方法です。
例えば、好きなものリストを作っておき、
そのキーワードに一致した場合は、
そのキーワードに言葉を付加して返します。
%match%大好き!
(%match%は一致したキーワード)
3は、一致するキーワードがなかった場合に、返す応答です。
例えば、こんな応答パターンが考えられます。
%match%って何? なにそれ?
感情(基本)
感情には「機嫌」というパラメータを持たせます。
方法としては、
- 嬉しいことを言われれば、機嫌が良くなる
- 嫌なことを言われれば、機嫌が悪くなる
- どちらでもなければ、平静に近づく
となります。
ポイントは、最後の「平静に近づく」です。
人はどんなに怒っていても、
時間が立てばおとなしくなりますよね(笑)
感情(応用)
応用として、感情のレベルを拡張します。
図では5段階のレベルを持たせています。
ここで注目してもらいたいのが、
変化の割合です。
「平静」から「ご機嫌」の状態への変化量は少ないですが、
「ご機嫌」から「平静」の状態への変化量は多くなっています。
これは、
「ちょっと機嫌がよくなっても、すぐ平静にもどる」
という人間の心理を利用しています。
そしてある線を越えると、「めっちゃご機嫌」になりやすくなります。
こうなったら、ちょっとしたことでも機嫌が悪くなることはありません。
他の拡張として、パラメータの種類を増やす方法があります。
それについては、http://www5f.biglobe.ne.jp/~kenmo/program/prom/prom.htmlで
書いているの参考にしてみてください。
返事
最後に返事です。
実は、
「記憶クラス」は記憶の情報を保持しているだけで、
どんな言葉を返すか、ということまでは関与しません。
また、
「感情クラス」も感情のパラメータを変化させるだけです。
つまり、「返事クラス」の仕事は、
「感情」のパラメータを元に「記憶」から言葉を選び出す、
ということとなります。