Twitter / ahokaiという、自分の過去の発言を収集し、n-gramモデルとマルコフ連鎖を用いて分析・発言するプログラムを作りました。いわゆるボットという奴です。
方法については「圧縮新聞」を作った – phaのニート日記が詳しいです。
こちらからahokaiの全ソースコードをダウンロードできます。
shokai / bot-ahokai / overview — bitbucket.org
詳しい作り方やいきさつはbot ahokaiの作成 – 橋本詳解に書いたのですが、
今回はahokaiの様な「自分の発言を再構成して喋るbot」を設置する方法を書きます。
botがたくさん喋ってくれればクリスマスも寂しくないし、師走で忙しくても平気です。みんなで実在の人物を元にしたボットを設置して裏twitterを作り、最終戦争終結後もボット同士が喋り合いスーパーボット大戦しましょう。
主な機能は
- あるユーザの過去の発言を3000件程度取得する
- 発言データを再構成する
- 再構成して発言する
- followerにランダムに話しかける
- followしてきたユーザをfollowし返す
- 言及してきた発言をtwitter searchで検索し、favotiteし返す
■必要なモジュール・ライブラリ
だいたい、Ruby on RailsとSQLite3、MeCabが使える環境ならすんなり動くと思います。
rubygemsで
- activerecord
- feed-normalizer
- hpricot
- xml-simple
- simple-rss
- sqlite3-ruby
- mecab
MeCab(形態素解析…日本語の単語を品詞毎に分解するのにも使えるツール)のインストールがそれなりに苦労します。
MeCab本体とutf8で書かれた辞書、Rubyから使うためのMeCab Rubyバインディングの3つが必要です
Macの場合、macportsを使うのが良い。
Ubuntuへのインストールは簡単です
Windowsや、さくらインターネットなどのレンタルサーバでも動かせるはずです。
さていよいよ設置です。
■設置の流れ
ソースコードダウンロードして、DBの設定をし(Rails風に一発でできます)
クローラを走らせで自分の発言を収集、分析します。
それから単語を再構成して発言させます。
■ダウンロード
こちらからahokaiをダウンロードできます。
shokai / bot-ahokai / overview — bitbucket.org
右上のリンクからzipでダウンロードして解凍するか、mercurialで
hg clone http://bitbucket.org/shokai/bot-ahokai/ mybot
して、自分のマシンに置いてください。
■アカウント設定
まず、俺の場合”ahokai”というtwitterアカウントに喋らせたかったので、メールアドレスをもう1つ用意して取りました。
sample.config.yamlを編集し、config.yamlに名前を変えて保存します。
アカウントshokaiから収集し、ahokaiに発言を投げる場合はこうなります
usernum : “3631571” # データ収集のためのユーザ番号
user : “ahokai”
pass : “twitter-password”
usernumは、取得したい各twitterアカウントの左下から、RSSのURLを見ると番号がわかります
(3631571はshokaiの番号です、各自変えてください)
■データベースの設定
同じディレクトリにSQLite3のDBを作ります。
ダウンロードしたディレクトリに移動して
コマンドラインで
ruby migrate_posts.rb up
ruby migrate_ngrams.rb up
すると、dbというファイルが生成されます。この中に回収した自分の発言などが入ります
■発言データのクロール
1ページ目から160ページ目までクロールします。
ruby store.rb 1-160
現在のtwitterのAPIは過去の160ページまでしかデータが取得できないので、それ以上は無駄です
twitterに負荷をかけないようにアクセス間隔を開けているのでかなり時間がかかります。
今後は引数無しで実行すると、デフォルトで10ページ取得します。
ruby store.rb
数日に1回行えば十分です
※注意:あまり激しく実行すると、1~2時間twitterからアクセス拒否されます
■n-gramモデルの作成
3-gramモデルを作成します。発言件数によってはかなり時間がかかります。
ruby make3gram.rb
モデル作成中でも、発言はできます。せっかちな人はmake3gramを走らせておきながら、次に進んで良いです
■発言する
3-gramモデルからマルコフ連鎖して発言します
ruby post3gram.rb
5%の確率で、followerの誰かに@reply発言します。
■自動follow返し、自動favorite返し
この処理はそれほど重くないので、1時間に1回ぐらい走らせておくと便利です。
ruby refollow.rb
現在のfollowers/friends一覧を取得し、新しいfollowerが居たらfollow仕返します
Twitter Searchでbot宛の発言を検索し、favoriteを付けます
ruby refav.rb
■常時使い続ける
store.rbとmake3gram.rbは3日に1回ぐらい動かせば十分です。初回のみ160ページ分解析するので時間がかかりますが、2回目以降は差分のみ計算するのですぐ終わります。
refav.rbとrefollow.rbは好きな間隔で。1時間に1回でも十分だと思います。
post3gram.rbは、あまり動かしすぎると本人より目立ってしまい、いつの間にか人間と入れ替わってしまうので気をつけて下さい。
気になるあのアルファギークのbotを自分のサーバで飼う事も、ひとつの歪んだ愛の形かもしれません。
ちなみに俺は、crontabで定期的に収集・分析・発言などを実行するように設定しています
*/17 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/post3gram.rb > /dev/null 2>&1
*/5 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/refollow.rb > /dev/null 2>&1
*/19 * * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/refav.rb 10 > /dev/null 2>&1
30 */4 * * * /usr/bin/ruby /home/sho/src/ruby/ahokai/store.rb 10; /usr/bin/ruby /home/sho/src/ruby/ahokai/make3gram.rb