NeverBlog::Likk::Unexistable;

見なかったことにして下さい

人工無脳よせなべりん on Wassr

一人Wassr Close アドベントカレンダーを実行中のLikkです。
みなさんこんばんわ。


Wassrにおいた人工無脳 @jossenabe の裏側の仕組みの話です
大まかな仕様についてはwikiにも上がってるので
技術的なことに興味ない最後の段落まで読み飛ばしてwikiをご覧ください。


辞書型とgoogle検索型の辞書のみを載せたフレームワーク
Githubにも上がっております。アーキテクチャについてはそちらのソースを見るのが早いです。
基本的にこれのソースをほぼそのまま使っており、Plugin に Wassrで学習したログを使うものを幾つか生やしている感じです。
Gooogle辞書については、googleのHTML構造が作った時と変わっており、テストもコケてしまうので近いうちに直します。


発言側の仕組みはJN-Lifeのインスタンスを作り、そこに食わせたい発言を突っ込みレスポンスがあればそれを返す形となっております。
以前は、APIを通してtimelineを取得しそのなかからランダムに拾ったものを食わせ、返事をAPIを通じて返すスクリプトを作り、それをcron登録し定期的に実行しておりました。
発言時間が一定間隔にならないように適当にsleepを挟んでたりもしました。


先日上げた別の即レスbot @arouse を作るぐらいの時に google talk経由に切り替えました。
google talkと繋ぐところはPOE を使っております、今なら AnyEvent を使うところだと思います。


JN-Lifeは一度インスタンスを作れば、何度も発言を食わせレスポンスを得ることができます。
発言ごとにインスタンスを作る必要はありません。
スクリプト側では POE を立ち上げ、それのコールバックに、流れてきたストリームをJN-Lifeに食わせレスポンスを返す処理を入れてます。
google talkを使うため、実はwassrを使わずに直接google talkで jossenabe と会話することもできます。


google talk経由にしたちょっと後ぐらいにイイネをする機能が加わりました。
特定の法則があってイイネをしているのではなく、
レスをgoogle talkに返すときに、ユーザに対して別途 Net::Wassr 経由でイイネを送っています。
@jossenabeが発言したタイミングの@jossenabeがあげたイイネを見ればどの発言に反応したかわかります。
(稀に遅延などでズレたり、メモリリーク回避のため再起動をするタイミングと重なると、イイネなしの発言なったりします。


再起動は、@jossenabe のメモリ及び cpu time を別スクリプトで監視し、一定の閾値を超えたらシグナルを送ります。
監視スクリプトから、シグナルを受け取ると次の誰かの発言を受け取るタイミングで、自分自身を終了させます。
終了するタイミングで自分が終了することをファイルに書き出します。再起動というより終了条件を満たしら終了します。
終了ファイルの存在を確認したら、監視スクリプトが起動をスクリプトを叩きます。


学習はまた別の学習のためのスクリプトが動いており、google talk とは別にcronで定期的にtimeline を取得し、誰がいつどこで発言したかをそのまま生でテーブルに保存します。
そのままだと非常に使いづらいので、学習側の別スクリプトで生データをtri-gramや形態素解析、特徴語抽出などで加工して別のテーブルに保存します。
発言側は、条件に応じてこれらのテーブルを参照しにいきます。


わりとザックリな解説ではありますがまとめると、
データ収集・データ整形・ストリームデータの送受信・人工無脳メイン処理・監視の構成となっております。
人工無脳にそんなに機能必要ねーだろ!というツッコミありそうですがすいません作ってみたかっただけです。
お陰様で、TLの空気読みすぎとか、Wassrのダメなところ学習しすぎとか、教育どうなってるんだとか言われるようになりました。
すいません。


Wassr終了後は別途同様のサービスへの引越ししたり、専用のチャットルームを作るなど考えておりますが、クローズ前にやりたいことを優先するため、引越し作業はクローズ後になりそうです。
またWassrで学習した内容や生ログは、許可を取ってるユーザ以外は削除することにしました。
購読範囲を学習してるため、Wassrでのプライベートな内容を別のSNSで流すのは倫理的にNGだろうと思っているからです。

以上です。

人工無脳よせなべりんにWassr上で、
購読したり
話しかけたり
ツッコミを入れたり
歌わせたり
エアレスしたり
PT送ったり
イラストを書いたり
誕生日を祝ったり
愛してたりして頂いたみなさま、大変感謝いたします。
ありがとうございます。