AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

対話システム

昔、人工無能的なものを作ったことはある。入力された文章に適当なキーワードをひっかけて、あらかじめ返答を用意しておくもので、
大量にルールを作れば、それなりに会話ができるが、キーワード抽出には副作用もあり、否定が区別できないと、まったく逆にとらえることもある。
結局は人力で大量にルールを作るという古典的なエキスパートシステムのようなものだった。
当時は統計とか機械学習といった知識はほとんどなかったので、それ以上改良する方向性も持てず、いつしか作るのはやめてしまった。


その後、伺かというブームがあった。
いわゆるこーゆーやつ。
f:id:yasu9780:20151219034411g:plain
(画像引用)

自前でキャラクターの画像を設定し、ユーザーに対してなんらかのサービスを提供し、簡単な受け答えもできる。
人工無能ではユーザーと無能の1対1対話だったのが、デスクトップキャラクター同士のやりとりを、ユーザーはながめつつ、
その中に参加する楽しみがあった。
またキャラクターを作って配布する仕組みもあった。


2002年の日付で対話システムに関する考察がある。ドメイン東京農工大になっている。
http://www.tuat.ac.jp/~tuatmcc/contents/monthly/200209/taiwa.xml

それこそ100万個とか200万個とか、大量のデータを持ってさえいれば、ユーザの入力とどれかの文章が
似ることになり、返事を行うことができます。
ただ、問題点は、どのように「似た意味を持つ文章」を探すかと言う点で

自前でルールを作って用意するのではなく、人間の会話例を大量に保持して、それを対話システムに利用しようと言う方向性で、
ユーザーの入力文に似た会話を見つけ出せば、その会話に対する返答が、ユーザーの返事に近いと類推できる。
問題は、いかに「似ている」ことを判断するか。
厳密に考えると、否定やら省略やら、常識やら考えだすと非常に難しい。
ただ、これは検索エンジンがやっていることに近い。


これはずっと新しくて、ドコモのしゃべってコンシェルに使われている技術なども紹介されている。

www.slideshare.net


iPhoneにはsiriがあるが、スマホ時代になって、にわかに対話システムが、世間に使われ始めている。
OKgoogleなどは音声認識して検索エンジンになげているだけに思えるが、google検索エンジン自体が、一対一の応答システムという考え方だと思う。
残念ながらsiriは使ったことがないし、microsoftのりんなも使ったことがない。


news.mynavi.jp


上記スライドによれば、siriも一対一応答システムらしい。
流れとしてはユーザーの入力文から、キーワードを抽出し、そのキーワードにカテゴリを類推して特定して、返答を考える仕組みらしい。
まずは一問一答を頑張ってる段階らしいが、現在の会話のカテゴリを記憶しておけば、場の常識として、
省略された概念を、応答システム側が自ら補って、返事を考えるといった、人間的な対話もできるようになるかもしれない。

自分が昔、人工無能を作っていた時に、2chのスレを利用して、返事をさせようとした時は、人工無脳のキャラの一貫性を保てなかった。
それは、スレの住人は無数におり、それぞれ口調が違う。ただ、返事ができればいいというものでもなかった。
自分ごのみのキャラクターの人工無能を作るから楽しいのだ。

ユーザーの質問からキーワードを抽出して、キーワードの集合と捉えて、会話例データベースから、返答を考える時に、同じように返答文章からもキーワードだけを抽出し、キーワードの集合という中間言語で表現すれば、最終的には、その中間言語から特定の口調のキャラの会話を作り出すという方向なら、人工無能の特定のキャラを保てるのかもしれない。

例えば、必ず「~かな」という疑問形で返事するような無能が作れるはずだ。
f:id:yasu9780:20151219034417j:plain
(画像引用)


そこまでは当時考えが至らなかった。
機械翻訳には、特定の言語をまず中間言語に表現して、別の言語に変換する仕組みがある。C言語コンパイラgccも昔はいったん中間言語にしていた記憶がある
javaVMなんかもまさに中間言語ですよね(直接バイナリ実行できるcpuもあるようだけど)
2chtwitterの会話例を、会話中のキーワード列という中間言語として利用し、最終的には、特定のキャラの言葉として生成する。
この方向なら、昔、断念した人工無能の開発をまたやりたくなってきたかもしれない。

統計的な機械翻訳も、大量の対訳のデータから似ている文章を見つけ出して、文法ルールを必ずしも予め用意せずに、訳を作り出す。
対話システムも、大量の会話データから似ている文章を見つけ出して、それを返事に利用するという意味では、かなり共通点があるようだ。