目次
プロジェクト名募集中
名前と方針
- すくすく育つようにする。
- プロジェクト名:募集中
- 設計方針:使えるものは使う。
- 公開方針:会話可能になったら公開する。
動機
うずら欲しいいい
でもソースは公開されてないので、いろいろ参考にして作ってみることにする。
知性とは何かという個人的考察を深めるため
現在のTODO
- インターネットのある環境に帰ったら、Net::IRCでボット化する。
- 話題を認識させ、適切な言葉を出力させる。
利用するもの
Perl
アイデア
環境を理解させる
- ニューラルネットワークとか、コホーネン自己組織化マップとか。ありきたりか。
- うーむ。単純にハッシュテーブルにしたほうが効率がいいか。
時系列に関する考察
- 一般に、会話は長くて数分の時間差しか無い。
- 従って、現在の会話情報を、長い時間の経過した会話情報と結びつけてはならない。
会話生成の始点となるキーを、環境情報(少し前の会話情報等)を反映した形で表現する
- 要するに「環境情報から作ったハッシュキー -> マルコフ連鎖 -> マルコフ連鎖 -> マルコフ連鎖 -> ...」みたいな感じ。
- 名詞・分類不能(主に、カタカナ語とか、英語とか?)を元に作る予定>環境情報から作ったハッシュキー
隠れマルコフモデル(HMM)型の辞書を構築する
- せっかくChaSen?を使うので、形態素単位で辞書構築。
- マルコフモデルには、回数指定のある繰り返しを表現できないという問題がある。
- これを回避するため、2度目以降の繰り返しには繰り返し回数を含めることで対応する。
- {"a" => ["a"], "a\t1" => ["a"], "a\t2" => ["a"]}
- これにより、N回の繰り返しを表現できるようになる。
- マルコフモデルを高次に拡張する。({"a" => ["b"], "b" => ["c"]} に、必要に応じて {"a\tb" => ["c"]} を追加)
- 両方を辞書に登録し、高次のマッチから試していく。マッチすれば、そのエントリから連鎖先を選択。
- いきなり高次の学習を始めると使用頻度が低いエントリで辞書が膨張してしまうので、n次の要素が一定種類を超えた際にn+1次の学習を始めるようにする。
- 出現確率を基準とする選択方法を、より単純で効率的な選択方法に変える。
- どうやら、平均以上の出現回数を持つ連鎖先から選択するといいようだ。
- データ構造を正規化、アルゴリズムと分離して、無駄を省く。また、シリアライズに対応させる。
字句解析と同時にリアルタイムで行う推測と、ストレス値
生物は生存のためにリアルタイムで推測活動を行っている。
これを真似ることで、受動的な状態(聞いているとき)の中でも、能動的な(話している時のような)学習が行えるのじゃないだろうか。
- 入力の形態素が判明するたびに、次の形態素を記憶辞書に照らして推測する。(リアルタイムな推測)
- 与えられた入力がノイズであるかどうかは、リアルタイムに推測を行うことで判断できる。
- ノイズとに対しての推測はかなりの確率で失敗する。そうすると、ストレス値が高くなる。
- ストレスをもとに学習する・しないを決めることは、人工知能の内部状態に基づいてルールを生み出すことにほかならない。
- これは人工無能の性格を生むための、ひとつの方法かもしれない。
設計メモ
****<package_name>****
Ghost ----> Storable // 亡霊
Ghost <>---- Core
Shell <>---- Ghost // 実体
Shell::Terminal ----|> Shell // 端末上の実体
Shell::Terminal ----> Term::ReadLine
Shell::IRCBot ----|> Shell // IRC上の実体
Shell::IRCBot ----> Net::IRC
Core //辞書部分
KUnit // 形態素(現在未使用、Morphologyに名称変更予定
KUnitList // これもいらないかも?
KUnitFactory // 作成過程を局所化
OutputListener // 亡霊の声を聞き取るために...
参考リンク
人工無能
勉強用
謝辞
青空文庫よりいくつかの文学作品のアーカイブを。
結城さんのサイトより結城の小箱/box1を。
タグ削除等の処理を行った後、個人利用させていただいています。感謝します。
コメント