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