対話型AIの作り方

はじめに

今回は、一対一で対話を行うAIの作成方法を解説します。
(参考:恋するプログラム―Rubyでつくる人工無脳

概要

まず、対話型AIを大きな枠組みで考えてみます。

プレイヤーは「言葉」を入力すると、
AIが「言葉」を返してくれるのが、対話型AIの仕組みとなります。

  

AIを構成する3つの要素

AIを構成するものは大きく分けると、3つになります。

  • どんな返事をするのか?
  • どんな記憶を持っているのか?
  • どんな感情となっているのか?

 
クラス図にするとこんな感じです。

AIが最上位に位置するクラスとなります。
AIは、
Replay(返事)、Memory(記憶)、Emotion(感情)
を状況に応じて入れ替えることにより、
さまざまな「言葉」を返します。
 

記憶(基本)

まずは、記憶から見ていきます。
 
記憶を作るには、パターンを持った辞書ファイルをあらかじめ作っておきます。
 
これは特定のキーワードに対応する表のようなものです。
 
例えば、kenmoAIクラスは、「モスバーガー」が大好きだとします(´∀`;
 
その場合には、例えばこんな対応表を作っておきます。

パターン 応答
モスバーガー モスバーガー大好き!
スパイシーチリドック あれは死ぬほど辛いよ
ナンタコス ナンカレードックがおいしいよ

 
こうすると、プレイヤーの発言に「モスバーガー」という
キーワードが含まれていた場合に(判定は正規表現などを使う)
モスバーガー大好き!」という言葉を返すようになります(´▽`;

 

記憶(応用)

応用として、以下の方法があります。

  1. パターンに対応する言葉を複数用意しておく(逆もあり)
  2. オウム返し
  3. デフォルト応答

2について補足すると、一致したパターンをそのまま返す方法です。
 
例えば、好きなものリストを作っておき、
そのキーワードに一致した場合は、
そのキーワードに言葉を付加して返します。

	%match%大好き!

(%match%は一致したキーワード)
 
3は、一致するキーワードがなかった場合に、返す応答です。
 
例えば、こんな応答パターンが考えられます。

	%match%って何?
	なにそれ?

感情(基本)

感情には「機嫌」というパラメータを持たせます。

方法としては、

  • 嬉しいことを言われれば、機嫌が良くなる
  • 嫌なことを言われれば、機嫌が悪くなる
  • どちらでもなければ、平静に近づく

となります。
 
ポイントは、最後の「平静に近づく」です。
人はどんなに怒っていても、
時間が立てばおとなしくなりますよね(笑)
 

感情(応用)

応用として、感情のレベルを拡張します。

図では5段階のレベルを持たせています。
 
ここで注目してもらいたいのが、
変化の割合です。
「平静」から「ご機嫌」の状態への変化量は少ないですが、
「ご機嫌」から「平静」の状態への変化量は多くなっています。
 
これは、
「ちょっと機嫌がよくなっても、すぐ平静にもどる」
という人間の心理を利用しています。
 
そしてある線を越えると、「めっちゃご機嫌」になりやすくなります。
こうなったら、ちょっとしたことでも機嫌が悪くなることはありません。
 
 
他の拡張として、パラメータの種類を増やす方法があります。
それについては、http://www5f.biglobe.ne.jp/~kenmo/program/prom/prom.html
書いているの参考にしてみてください。

返事

最後に返事です。
 
実は、
「記憶クラス」は記憶の情報を保持しているだけで、
どんな言葉を返すか、ということまでは関与しません。
また、
「感情クラス」も感情のパラメータを変化させるだけです。
 
つまり、「返事クラス」の仕事は、
「感情」のパラメータを元に「記憶」から言葉を選び出す、
ということとなります。