物欲購入目録日誌 写真館
スポンサーサイト
--.--.-- (--:--) スポンサー広告
Twitterでつぶやく
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
twitter bot(@tachi_pic_bot)のナイーブベイズのモデルをSVM用のモデル変換作業など
2010.11.15 (01:06) 余談trackback(0)comment(0)
Twitterでつぶやく
peroperp.jpg


最近ちょっと作業していたのが、twitter bot(@tachi_pic_bot)で文書分類にナイーブベイズ分類器を使っているのですが、それをサポートベクターマシン(SVM)に置き換えようという実験。誰得企画なのですが、とりあえずご報告。

・SVMを用いた文書分類を行うためには具体的には以下のような手順でやります。

(1) クローラーでwebサイトをクロールして正解データとします。

(2) クロールしたデータを形態素解析などの処理を行う。ここまで出来ればナイーブベイズ(ruby gemのclassifier)の入力データとしては問題なし。

(1),(2) ができたら次にSVM用の入力データに変換します

(3) SVMのライラりはTinySVMを利用します。

学習用データの入力フォーマットは

Example (SVM)
+1 201:1.2 3148:1.8 3983:1 4882:1
-1 874:0.3 3652:1.1 3963:1 6179:1
+1 1168:1.2 3318:1.2 3938:1.8 4481:1
+1 350:1 3082:1.5 3965:1 6122:0.2
-1 99:1 3057:1 3957:1 5838:0.3


のような形式です。
1カラム目は正(負)事例の+1(-1)のフラグ。
その後は素性番号とその重みに対応します。というわけで、このフォーマットに合うようにナイーブベイズのモデルをガシガシ変更します。

(4) ちょっとした工夫として変換の際には低頻度語彙の削除、スコアリングをにはtf-idfの値を入れます。

(5) ここで重要なのが各訓練データの素性idと重みのペアですが、素性idの値で昇順にソートされているように出力しておいたほうがよいです。

SVMのライブラリは大抵このような入力フォーマットを取りますが、一部のライブラリ(LIBSVM)では素性idでソートされていることを暗に要求するからという、結構重箱の裾を見ないとわからないとんでもない仕様で利用者としてはたまにビックリしてしまいます。TinySVMは並んでいなくても大丈夫のよう?ですが、せっかくなでソートしておきます。

(6) あとは、テストデータが入ってきたときにうまく素性idとtf-idfが計算できるようにうまくやれば完成です!!

(7) データが準備できたので推定してみます。


Accuracy: 96.10829% (568/591)


それなりに良い感じです。とりあえず計算速度が速いのでいろいろとパラメータや学習データを変更したりして実験してみるのも大変興味深い事柄かと思いますよ。

今度は実際にbotに埋め込む作業をしてゆきますよ。


そして最後にあずにゃん可愛い!ぺろぺろ。t-all5.gif
prevhome next












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