とりあえず、当面の目標を設定
人工無脳の設計パラメーター
WeizenbaumのELIZA論文を読んでみた感想としては、人工無脳(というか、人間ともっともらしい会話を行うプログラム)の開発には、以下の点をうまく設定することが重要なのだろうと思いました。
- ユーザにとっての会話の目的:
- 相手(プログラム)と何について会話すべきかという点をユーザにどう認識させるか。
- ELIZAの場合は、「スクリーンの向う側にいる心理療法士と会話する」という設定を行った。
- 会話モデル:
- プログラムが行う会話の基本戦略。プログラムが実行可能な応答の自由度とモデルが合っていないと、会話が成立しない。
- ELIZAの場合は、心理療法(ロジャースの来談者中心療法)におけるインタビューをモデルとしている。
- 会話がモデルから逸脱しないようにする仕掛け:
- ユーザが会話目的から想定した会話相手についての認識から逸脱しないよう、会話を流れを維持する工夫。
- ELIZAの場合は、スクリプト記述における工夫や、会話が途切れた際に、メモリに蓄積したキーワードを取り出して新しいトピックを提示するといった工夫を行ったと思われる。
この3つの設計パラメーターは相互に絡み合っていそうですが、中心にはどういう会話モデルを前提とするか、ということがあるように思います。
会話モデルの仮設定
「ダルい時に元気が出る(気分が上向く)会話ができる人工無脳を作る」という自分の目標を考えたときに、”目標へのモチベーション、幸福、希望や目標達成を高め、不安やストレスを軽減すると考えられている”というコーチングの方法論が、会話モデルを考える参考になるのではないかと考えました。しかし、これがなかなか難物です。コーチングの方法論の中核を成すキーワードとして、「傾聴」「質問」「承認」「フィードバック」「リクエスト」があるということはわかりました。しかし、プログラムのモデルにできるような、具体的な会話のパターンがよくわかりません。
でまあ、コーチングの方法論を会話モデルとして利用できないか、という点については考え続けるとして、それは長丁場になりそうだということで、当面の開発(日曜大工)のための仮モデルを決めることにしました。
その仮モデルというのは、「言葉がわからないヤツに言葉を教えるのはおもしろさがあって、気晴らしになる=気分が上向くんじゃない?」というものです。仮モデルですので理屈はなくて、経験からくる直感です。
当面の目標
言葉を教えるという仮モデルを前提とした上で、誰に(何に)会話を教えるのかという会話目的の設定が必要です。この点については、能力が限られるプログラムを会話相手とすることから、プログラムにキャラクター性をもたせ「人工ペットに会話を教える」という状況を設定すれば矛盾はないだろう、というのが現時点のアイデアです。
「会話がモデルから逸脱しないようにする仕掛け」については、キャラクター性に合わせてELIZAなど既存の実装を参考にして思いついたことを試す、くらいのところです。
まとめると、こんな感じでしょうか。
ELIZA | 仮モデル | |
---|---|---|
会話の目的 | 心理療法士との会話 | 人工ペットとの会話 |
会話モデル | 心理療法のインタビュー | 子供(のような存在)に会話を教える |
会話継続の仕掛け | スクリプト、話題(キーワード)の蓄積 | 今後の課題(^^)} |
どう作っていくか
まだまだプログラミング自体を勉強中の段階ということもあり、いわゆるコードの写経を行いながら試作していくということを考えています。
ちょうど、Python初心者に送る「人工知能の作り方」 - すなぶろが、Pythonプログラミングの良いお手本に見えることに加え、ルール型・辞書型・マルコフ連鎖型などの人工無脳の典型的な方式をまとめて扱っていることから、こちらの記事のコードを手本に試作をしていきたいと思います。