Sakusaku svm

6,660 views

Published on

Published in: Education

Sakusaku svm

  1. 1. SakuSakuSVMでさくさくツイートマイニング!
  2. 2. 自己紹介● ID:AntiBayesian● あんちべ!とお呼び下さい● 専門:テキストマイニング、自然言語処理● 職業:某ATMが○○な銀行で金融工学研究員とか いう胡散臭い素敵なことしてる● 自然言語処理職大絶賛募集中!!!!● math.empress@gmail.com 2
  3. 3. twitterをマイニングしたい!tweet分析するとこんなことが出来る(かも?)1.自分のtweetがウケルかどうかpostする前に予測2.スパムアカウントを自動で見分けてスパム報告3.デマ情報の抽出4.盗作tweetかどうか判定5.ネカマかどうか判定 3
  4. 4. Postする前に ウケルかどうか 判定してみたよあんちべのすべらない話~俺のツイートがこんなにウケないはずがない~http://www.slideshare.net/AntiBayesian/ss-8487534 4
  5. 5. 分析の流れ1.学習データ(正例、負例)を用意する2.学習データから予測モデルを立てる ➢ 正例・負例の特徴を抽出し、どのような要素を持てば正 負のどちらかに判別出来るかを学習する3.対象のtweetを予測モデルに放り込んで判定 ➢ 正例の特徴を強く持つtweetは正例のクラスへ、負例の 特徴を強く持つtweetは負例のクラスへ、分類器で自動 分類 5
  6. 6. 正例、負例の例● スパムアカウントかどうか見分けたい ➢ 正例:スパムアカウント、負例:非スパムアカウント● デマ情報かどうか判別したい ➢ 正例:デマtweet、負例:正しいtweet● 正例・負例は逆でも良い(正:非スパム、負:スパム 等)。抽出したいものを正例にするケースが多い● 重要なのは、やりたいことに応じてデータを収集 し、クラスを適切に設定すること 6
  7. 7. やりたいことを決めよう!● 自分のtweetがウケルか予測したい!● もう渾身のネタが滑るのは嫌だ!!!● じゃあデータは何が必要???● 正例:☆が沢山ついてるtweet、負例:☆ついてな いtweetにすると良いのでは??? 7
  8. 8. 学習データを集めよう● 正例:favstarから人気tweetを取得● 負例:twitter Streaming APIから適当にサンプリン グ● 正例負例、各々約3万件ずつチョイス● 正例には1、負例には-1クラスタグを付ける※Tweetを取得するツール作ったよ!http://d.hatena.ne.jp/AntiBayesian/20110702 8
  9. 9. さくさくツイートマイニング● こんな感じ→
  10. 10. 学習データ
  11. 11. テストデータ● 実際に分類をしたいデータ ● クラスタグは仮置きする※今回は精度を実感しやすくするため、fav, nonfavが判明しているものをテストデータに用いる。具体的には、favstar, StreamingAPIから取得したデータのうち、6月末までのもの約3万件を学習データに、7月以降のもの約200件をテストデータに用いる。favのtweetがどれ位の精度でfavに分類されるか見る
  12. 12. データ集めたし、準備万端!!!さぁ分析するか! 12
  13. 13. ・・・ 13
  14. 14. どうやって??? 14
  15. 15. 分類器って何???● 正負例から各々の特徴を抽出・学習して、与えた データの正負を自動で判別してくれるもの – 正負のデータ(答え)が予め用意されてる学習を、教師有り学 習と言う● 様々な分類器がある ● ナイーブベイズ ● 決定木 ● パーセプトロン ● SVM(サポートベクターマシーン)● 今回はSVMを使うよ! 15
  16. 16. なぜSVMを使うの???● 現在大変よく使われてる手法● 超パワフル● テキストデータは高次元になりがち。SVMは高次 元の分類に強み● 沢山の種類・工夫が既にあり、探せば良いのが幾 らでも見つかる● “超平面”とか”次元の呪い”とか”カーネルトリック” とか、出てくる単語が格好良くて中二病をくすぐる 16
  17. 17. SVMとは???● データを高次元に写像して分類する手法“サポートベクターマシンは、本来は線形分離不可能な問題には適用できない。 しかし、再生核ヒルベルト空間の理論を取り入れたカーネル関数を用いてパターンを有限もしくは無限次元の特徴空間へ写像し、特徴空間上で線形分離を行う手法が 1992年に Vladimir Vapnik らによって提案された。 これにより、非線形分類問題にも優れた性能を発揮することがわかり、近年特に注目を集めている。なお、カーネル関数を取り入れた一連の手法では、どのような写像が行われるか知らずに計算できることから、カーネルトリック (Kernel Trick)と呼ばれている”by Wikipedia 17
  18. 18. ヽ(・∀・ヽ) ワッケ!!(ノ・∀・)ノ ワッカ!!ヽ(・∀・)ノ ラン!! 18
  19. 19. まず、線形分離とは???● 直線でデータを分類出来る 19
  20. 20. 線形分離不可能とは???● 線形(直線)では分類出来ない 20
  21. 21. 高次元へ写像して分離してみる● 2次元のデータを無理やり3次元に持ってくる● 縦軸×横軸から高さ軸を作って3次元にしてみた これが超平面だ!青丸:第1, 3象限の縦軸×横軸→高さ軸正赤丸:第2,4象限の縦軸×横軸→高さ軸負 21
  22. 22. SVMすごい!!!!● 高次元に写像すれば、線形分離不可能なものも分 類出来る!● かっこいい!● つおい!!!● すごい!!!● 使ってみるしかない!!!!● じゃあ数式見て実装しよう!!! 22
  23. 23. 数式難しすぎて 人間が死ぬ ハードマージンのSVMは簡単だけど、カーネルトリックの世界に踏み込むと結構厳しい 23
  24. 24. SakuSaku-SVM作ったよ!● GUIテキストマイニング用ツール● 前処理とSVMが実行可能● SVMエンジンはliblinear(高速な線形分類器)● 分かち書きはtinySegmenter● WndowsXP、.NET Framework3.0以上で動作● http://www24.atpages.jp/antibayesian/app/の SSSVM.zipをDL 24
  25. 25. SS-SVM前処理で生成されるファイル● テキストの統計処理 ● 2gram:学習データのバイグラム ● WordSet:学習データに含まれる単語 ● WordCount:学習データの単語頻度(昇順● SVM用ファイル ● SVM_train:SVM学習用 ● SVM_test:SVMテスト用 25
  26. 26. SS-SVMの基本的な使い方-前処理1.SS-SVMを起動2.exeと同じフォルダに学 習データ、テストデータ、 ストップワードファイルを 置く3.一括実行ボタンを押下 26
  27. 27. SS-SVMの基本的な使い方-SVM4.クロスバリデーションボタン押 下。CrossValidation.txtからモ デルの説明力を見る(これが 低すぎたら前処理やり直し)5.モデル生成ボタン押下6.分類実行ボタン押 下。Output.txtで分類結 果、Accuracy.txtで分類精度 を確認 27
  28. 28. SVMの結果の見方● Accuracy.txt ● 仮置きのタグとSVM分類で付与したタグのマッチング 率。今回は仮置きタグが正しいとみなせる状況であるた め、精度と考えて差し支えない● Output.txt ● 各行のtweetが正負どちらに判定されたか、タグで表わ される。n行目に1と出力されていた場合、n行目の tweetは1クラス(今回の例ではfav tweet)に分類された という意味 28
  29. 29. やってみた結果● 調整したら86%の精度でfav, nonfav分類出来た● nonfav側に分類されがちな感じ – なぜかを考えてみよう!● favなのにnonfavと分類されたtweetは、他所への リンク物が多い。そりゃ分類難しいわ…● nonfavなのにfavに分類されたtweet、結構面白い – ゴルゴ 「俺の後ろから押すなよ絶対に押すなよ」 – 母『暑くてスルメになりそう』…スルメ?w● 割とイケル気がしてきた 29
  30. 30. 工夫して精度を上げよう!1.やりたいこととデータがマッチしてるか考え直す2.学習データ数を増やす ➢ 2000件→6万件にすると、精度が77→82%に3.出現頻度下限を調整する4.ストップワードファイル(除去単語リスト)を修正する 30
  31. 31. まとめ● tweetからスパム判定とか色んなことが出来る● やりたいことに応じて、何が正負例データに該当す るかよく考えなくてはならない● SVMという高次元・非線形分離にも対応したパワ フルな分類器がある● SS-SVMを使うと、テキストの前処理からSVM実行 までマウスクリックだけで出来る● 簡単にSVM出来るんだから、もうやるっきゃない! 31

×