![]()
人工無脳は考える |
掲示板 |
資料 |
アーカイブ
2006/02/07; last update 2006/03/05 辞書型試作人工無脳 AEM-060D |
■概要 > ■辞書の鍛え方 > ■まきなとおはなし >> 戻る
![]() |
まきなには、発話の方法ごとに関数が用意されており、発話待ちセリフの発話(Queue)、挨拶(Access)、質問(Query)、学習(Learn)、返答(Answer)、相槌(Prompt)、返答不能(Notfount)という優先順位がある。優先順位の高い関数がまず返答を試み、返答をしなかった場合に次の優先順位の関数が呼ばれるという、カスケード状の構造をしている。Fig. 1に、これらの関数が時間ごとにどの程度利用されたかを示す。グラフの横軸は発話の回数、縦軸は関数ごとの呼ばれた確率で、たとえばPromptが50%であれば、ある期間の間にはユーザへの返答の50%がPromptによって生成されたことを表す。 詳細はこちら (2006/03/11)
本スクリプトを動かすにはJcode.pmが必要です。下記アーカイブの内容を一つのディレクトリに収めてパーミッションを設定します。実行環境にはflock()があることを前提にしています。ない場合はmakina_m.txtのなかで$LOCK_RETRY$ をゼロに設定してください。
| アーカイブ | 変更点 |
| AEM-060D-060529.tar.gz | ユーザ入力の()をエスケープし忘れてました |
| AEM-060D-060225.tar.gz | ユーザに「なにそれ」と聞かれたら答える |
| AEM-060D-060220.tar.gz | クッキー関連修整。少し長い発話ができるように辞書を追加 |
| AEM-060D-060213.tar.gz | 伝聞の後展開、挨拶時にたまに$BACKGROUND$のデモ |
| AEM-060D-060212.tar.gz | ログがダブルスペースになっていたのを修整、時刻にあわせた挨拶 |
| ファイル名 | 属性 | 内容 |
| AEM-060D.cgi | 755 | 人工無脳本体 |
| Animus.pm | 644 | 暫定的な意識モジュール |
| Jtool.pm | 644 | 日本語処理関数 |
| Lock.pm | 644 | ファイルロックとアンロック |
| Main.pm | 644 | 辞書モジュール |
| Tabletalk.pm | 644 | チャットインタフェース |
| makina_m.txt | 644 | 主辞書ファイル |
| makina_p.txt | 666 | ユーザから学習した結果や一時変数が格納される |
| ttlog.txt | 666 | チャットのログ |
まきなとしゃべってみる
苦情、バグレポート、コメントはこちら
人工無脳の開発は、日常の会話の中にパターンを見出すことから始まる。そのなかで、「分からないことを質問し、答えをもらって記憶する」というパターンは一番理解しやすくシンプルである。このような辞書型人工無脳は他の型の人工無脳とくらべて、あらかじめデータを与えておくことでキャラクタ性を出すことができ、設計者にとって自由度の高い文生成ができる点が特徴である。さらに構造が単純なため今までにたくさん実装された例があるが、キャラクタ性と文生成の柔軟さについてきちんと考察されたものは少ない。システムとしてこれらの特徴を備えた人工無脳であっても辞書の作りこみでは現場の辞書製作者の経験と勘や場当たり的な処理によって工夫されていることが多かった。そこで、人工無脳独特の機構を理解してもらうとともに辞書の作りこみに必要な考察のベースを提供するために、フラット構造・柔軟運用を意識した辞書型人工無脳を作る。
また、この人工無脳は会話を行なうのに挨拶、学習、質問、返答、相槌などのいくつかのモードを用いる。全く教育されていない初期状態では返答できないため質問と相槌が多く、教育がある程度進むと逆に相槌が少なく返答が多くなるといった、経時的な挙動の変化が現れると考えられる。そこで、人工無脳がそれらの統計情報を集めるようにした。統計上表はmakina_p.txtに、$STAT_????$という名前で格納されている。
人工無脳で再現したい会話の例を示す。例1は定型的な挨拶に対応する例、例2はユーザの言葉の中に人工無脳が特定の部分を見つけ、それについて質問を返している。例3は例2で学習した内容を会話に反映したものである。例4はユーザの発言に特に対応してはいないが、なんとなくあたっていそうなことを適当にしゃべった例である。
ユーザ:しまりす 人工無脳:まな 例1 挨拶と共感 しまりす > こんにちはー。 まな > よう。元気だった? しまりす > 絶好調だよ!ははは! まな > あははは! 例2 問い合わせ しまりす > そろそろ出かける時間だなー まな > 出かけるってなに? しまりす > ちょっと映画を見に。 まな > そう。 例3 思い出し
まな > 今日は何してた? しまりす > 友達のとこに出かける用事があったよ まな > ちょっと映画を見に? しまりす > そうそう。映画面白かったよ。 例4 相槌とツッコミ しまりす > なんか結構ひまそうな友達っているよね。 まな > 働かざるもの世にはばかるって感じ?
会話の例を生かすようにアルゴリズム化すると以下のようになる。実装の詳細はソースを参照していただきたい。
フラット構造とは、人工無脳が環境変数やチャットシステムの変数を読めるようにすることである。できるだけ多くの内部データを人工無脳に対して解放することにより、データの一元管理が可能になり、人工無脳製作者は一つの辞書ファイルを見るだけで全ての状況を把握することができる。また動作に必要な変数が全て%Plus辞書(ここではmakina_p.txt)に格納されているため、デバッグが比較的容易になる。
柔軟運用とは、人工無脳が自由度の高い文生成ができる環境を作ることと、環境変数やチャットの変数を変更できるようにすることである。これによってユーザをいきなり強制ログアウトさせたり、人工無脳の都合で壁紙、辞書ファイル、表示色などを変えることができる。
これらの値は人工無脳から参照することができ、%$TITLE$=文字列%で自由に変更可能である。
| ファイル名 | 内容 |
| $MAIN_DIC_PATH$ | 主辞書のパス |
| $PLUS_DIC_PATH$ | プラス辞書のパス |
| $BACKGROUND$ | 背景画像のURL |
| $BGCOLOR$ | 背景色 |
| $MUNO_COLOR$ | 人工無脳発言の表示色 |
| $USER_COLOR$ | ユーザ発言の表示色 |
| $TITLE$ | チャットのタイトル |
| $I$ | 人工無脳の一人称(わたし) |
| $YOU$ | 人工無脳の二人称(あなた) |
| $MARKED$ | 最近注目した単語の中からランダムに一つを選ぶ |
| $MARKED[0]$ | 最近注目した単語の中で、最も新しいもの |
| $Visitor$ | 訪問者の中でランダムに一つの名前を選ぶ |
| $NOT_FOUND$ | 人工無脳が上手く答えられなかったユーザの入力 |
| $INQ$ | これに単語を代入すると、人工無脳がそれについて質問をする |
| $REINFORCE$ | これに文字列を代入すると、最後に行なわれたユーザと人工無脳のやり取りが辞書に記憶される |
主に人工知能や人工無脳と関係のない書籍に多くのヒントがある。d'Ansembourg11トーマ ダンサンブール,高野優(訳)「なんでわかってくれないの!」と思ったときに読む本
は、相手をいらだたせることなくコミュニケーションを取る方法について述べている。その中ではまず現状を観察し、自分の感情を認識した上で欲求が何かを心の中で確かめ、具体的に相手に伝えるべきだと説いている。さらに巻末には「欲求が満たされているときの感情を表す言葉リスト」「欲求不満を表す言葉リスト」「評価を含む言葉リスト」などを具体的に上げている。人工無脳はこれらをユーザから受け取ることによってユーザの状態を推測する材料になる。(この項つづく)
人工無脳のセリフの中で、%cond%は日によって変動する体調を示し、1から5までの整数に置き換わる。同様に%timezone%は時刻によって一日を7つに分けた名前(MDN, DWN, MOR, NON, AFT, DSK, NGT)に置き換わる。すなわち、 $GREETING$ $hail_%timezone%$という記憶があった場合、それは時刻に応じて $hail_MDN$や$hail_DSK$になるので、それによって時刻に応じた返答が可能になる。