無脳エンジン構想

sixamoのソースを読んだり*1、ここ数週間のうちにid:akio0911と話したりしたことが
寝る直前の寝に入る瞬間にスパークしました。

忘れないうちにメモる。

まずは自然言語処理だけをやる自然言語処理コア(仮)がある。
そいつだけでもしさものように自己学習*2ができるといいな。
これはsixamoコードを読みながら自分なりにいい感じのものを作る。
ひとまずはここまででもできたらいい。

次に、教師学習コア(仮)というものを考えてみた。
会話するごとにユーザ名を取得してそいつをまずは隣人として認識する。
ある条件*3を満たすと、隣人は友人に昇格する。
さらに、無脳に対して評価コマンド*4を実行したユーザが友人であった場合には、友人は教師に昇格する。
ポジティブ評価を受けた発言は使用優先度を高める。
ネガティブ評価を受けた発言は使用優先度を低める。
教師以外からは評価コマンドを受け付けない。
無脳を教育してくれる教師や、適切な評価はなくても前述の自然言語処理コア(仮)があれば自己学習できるので多い日も安心です。

教師・友人の登録数には制限を設けて、制限数を超えるものは先入れ先出し法でやるといいかな。

自分対相手を軸として、s/自分の名前/相手の名前/というような名前置換フィルタを標準で実装する。
学習の対象外とするワードで構成されたNGワードフィルタを標準で実装する。

ある条件*5を満たすと悪人として登録される。
悪人は友人、教師には昇格しない。
既に教師であった場合は、教師フラグが外れる。
友人の場合は、友人であり悪人でもある状態になる。

悪人の登録数にも制限を設けて、制限数を超えるものは先入れ先出し法でやるといいね。

一定期間、評価がもらえない場合、教師フラグが外れる。
一定期間、会話がない場合、友人から隣人に降格される。
一定期間*6経過すると悪人フラグが外れる。

以下はオプション。

自分を基軸として、s/自分の名前/自分の友人*7/で名前置換するフィルタを実装。
友人を基軸として、s/自分の名前/友人の友人*8/で名前置換するフィルタを実装。
悪人を基軸として、悪人の友人を要注意人物リストとして生成する。

めだかを運用していて気づいた点と、id:akio0911と話していて気づいた点をまとめて上記のような無脳エンジンを構想してみました。

基本的には上記でいう自然言語処理コア(仮)だけあれば動くけど、教師学習コア(仮)と各種フィルタを複合的に使うとよりよいかなと思いました。

無脳を丁寧に教育してくれるけなげな人もいますし、教育者は事欠かないんじゃないかなと思っています。
評価も「ポジティブ評価」「ネガティブ評価」の2種類だけなら誰にでも使えるんじゃないかな。


外部実装にあたる、サイトとのパイプは別のライブラリかモジュールで作ろう。

*1:まだ途中(20%?くらい)だけど

*2:いわゆるログ学習型の無脳さん

*3:会話数または会話量、会話した期間など

*4:直前の発言にたいしてポジティブかネガティブの評価を与えるコマンド

*5:同じ文章をn回以上連続発言する、規定以上の文字数を投げかける、NGワードフィルタに規定以上ひっかかる、など

*6:この場合はかなり長期

*7:友人一覧から生成したリストを元にランダムにひとり抽出

*8:友人の友人一覧から生成したリストを元にランダムにひとり抽出