物欲購入目録日誌 写真館
スポンサーサイト
--.--.-- (--:--) スポンサー広告
Twitterでつぶやく
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ Ruby ] twitter bot ( @tachi_pic_bot )の改造と宣伝
2011.10.06 (00:17) プログラミングtrackback(0)comment(0)
Twitterでつぶやく
FI2622896_2E.jpg


最近オイラが作っているツイッターボットの機能追加などをいろいろしたので書いてみる。

オイラのツイッターボットは @tachi_pic_bot というもので、オタクな話題をつぶやいたりします。

主な機能は

●RSS情報投稿機能
大量のRSS情報を取得して,その中からオタクっぽい話題を機械学習で推定/分類してオタクっぽい話題に関して呟きます。推定器にはSVMを利用。

●google急上昇ワード投稿機能
googleの急上昇ワードを取得して、上位5位を呟きます。
またその中から気になる語に関してリンク付きでご紹介します。気になるワードの選定方法はgoogleの急上昇ワードのスニペット情報を形態素解析して、モデルデータを用いて推定/分類し一番、分類精度の高い語を1個選びます。分類器にはナイーブベイズ分類器を利用します。

●スクレイピング投稿機能
RSSでは取得できない、もしくはRSS情報を配信していない情報元に対して、特定URLのhtmlをクロール、その後データの抽出(スクレイピング)を実行し、情報を再構成して呟きます。

今はアニメ・ゲーム系のイベントが盛んな以下の2つのページのスケジュール・ページを1ホップクロールして今月、来月のスケジュールまで取得します。

ロフトプラスワン


阿佐ヶ谷ロフト

※この部分が最近、改造・調整した部分になります。これまでスクレイピングの精度が今ひとつ(やっつけ)だったので日時・曜日・URLをもっと綺麗に取得できるようにしたのとRubyのMechanize2.0.1対応を実施しました。

例はこんな感じ

--
[LOFT/PLUS ONE] 2011年10月24(月) 第65回アニメスタイルイベント bit.ly/qkychf bit.ly/oePkDo
--

正直かなり、よくなった感じです。が一点だけ改造の余地があって、アニメ系のイベント情報のみを出力するようになっているのですが、、そのアニメ系かそうでないか?というのを私で用意したキーワードの正規表現マッチングのみでやっているのが、まだ改造の余地があります。

このキーワードマッチでは、こっちが想定していないワードの場合は簡単に取りこぼしてしまうんですな。

一番、怖いのがアニメなどの新番組のタイトル名だけで構成されたイベントなど、、一言”アニメ”とか書いてくれればひっかけられるのですが、、全てのアニメ番組の情報キーワード用意はしていられない。

これを回避するためには、このタイトルに含まれている情報がアニメ系かそうでないかという推定を実施しないといけなくなり、難易度やコーディング量が増えます。

やるとすると以下のような仕様かと思います。

1) スケジュールのデータと用意したキーワードのマッチングを実施する、マッチしたらアニメ系とする。

2) マッチしないデータは、イベントタイトル名でgoogle検索を実施、結果が取得できたら検索結果上位K件のスニペット情報を取得。スニペットを形態素解析を実施し、キーワードベクトルを生成し(3)へ進む。

google検索で1件もヒットしない場合は(2-1)へ進む。
※イベントタイトルは長いものはヒットしないもしくは極端に結果が少ない場合があります。その場合は検索結果の信頼性が低いと判断し、その結果からキーワードベクトルを生成しないほうがよいと思わます。

2-1) イベントタイトルを形態素解析し、固有表現を抽出、抽出された固有表現でgoogle検索を実施し、キーワードベクトルを生成し(3)へ進む。

☆この固有表現抽出というのがかなり難しい!

3) 取得できたキーワードベクトルを用いて分類器で推定する。推定はナイーブベイズのほうがいいね。
ナイーブベイズで分類結果がアニメ系であれば、そのデータを呟く。

といった感じでがんばらんといけない。
難しいのは(2-1)だけなので、ちょっとコードが長くなるけど、改造できななくもいけど、、明らかにオーバースペック!!

●スパムアカウント推定機能

スパムアカウント推定機能はこの中では一番ボリュームのある機能で推定の検証機能などを含めて約3000行のコードになります。基本的には以下のような図でわかるように


twitter_spam.png


twiter botをやっていると不特定多数のスパムっぽいユーザーの人から比較的多くフォローされます。

最初に作ったBotの仕様ではフォローしてくれたユーザーさんには無条件かつ自動でBotのほうもフォローするようにしていたのですが、これが問題でそうするとスパムのアカウントも普通の人のアカウントもフォローしてしまうことになって、Botのタイムラインがすごいひどいことになるので、、Botであろうとスパムじゃない人だけをフォローしたいという趣旨に基づいて、フォローしてくれた人をスパム推定させてもらって、スパム推定判定で比スパムとなったユーザーさんだけを自動的にフォローするようにしました。

結果はこのページを見てもらいたいのですが、このページのアカウントの人だけが比スパムと判定されたアカウントとなっております。

http://twitter.com/#!/tachi_pic_bot/following


結果わかるように、、比スパムと判定するpresicionはかなり高精度で精度は90%以上は達成しているのではないかと思いますが、、逆にrecallのほうはじゃっかん、普通の人もスパム判定でスパムとしてしまっているケースもあるようで、ちょっと取りこぼしがあることはありますが、実用上まったく問題ない程度の判定精度ではないと思います。分類問題としてはタスクの難易度はそんなに高くない?

●ハッシュタグ ランキング機能

最後に、昨日思いついたので即興で作ったハッシュタグランキング機能。
この機能はtwitter APIでも、ストリームデータのAPIを利用して統計値を集計します。

twitterのストリームデータはtwitter全部の流量の約1%に相当?するデータを取得できるAPIでこの1%が全体からの無作為サンプリングの結果だと仮定すると、ストリームデータのハッシュタグの個数の頻度のランキングを生成すると今twitterでつぶやかれているリアルな話題の一部を簡単に提供することができるのではないかと思って付くてみました。

予想としては夜のアニメタイムが始まると番組のハッシュタグがバーストしてくる様子が見れたら面白いと思って夜のアニメタイムの PM 10:00 ~ AM 3:30 まで30分間隔で日本語のツィート文からハッシュタグを抜き出して頻度を数えるようにしました。

本日から集計しております。取得したデータはtweetの他にファイルにダンプしてるので、2次加工して解析も実施出来る予定です。



--
[HashTag Ranking 占有率] 1位 #タイトル 0.54[%] 2位 #学校 0.26[%] 3位 #nicovideo 0.13[%] [集計時間: 2011.10.05 22:30 ~ 2011.10.05 23:00]
--

なんでタイトルとかきているのかちょっと疑問ですが、、とりあえず今試運転中。
prevhome next












トラックバックURL
→http://tachiphoto.blog61.fc2.com/tb.php/1482-2adb61de
home
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。