狠狠撸
Submit Search
集合知プログラミング 第6章 ドキュメントとフィルタリング~draft
?
6 likes
?
4,995 views
Kenji Koshikawa
Follow
It's draft version.
Read less
Read more
1 of 51
Download now
More Related Content
集合知プログラミング 第6章 ドキュメントとフィルタリング~draft
1.
第6章
ドキュメント フィルタリング 13th October, 2011 @Kshi_Kshi Study session of reading “Programming Collective Intelligence” earnestly
2.
注意事項 ? 本資料はドラフト版です。 ? いつの日にか、もう少しグレード(質)の高い資料にして、どこ
かしらにアップロードする予定です。(多分blog) ? 間違っている箇所、多々あるかと思います。 ? 間違いを見つけた方は、お手数ですが、ご連絡いただけると 助かります。 koshikawa2009@gmail.com @Kshi_Kshi id: Kshi_Kshi 2011 10/13 : 17:00 Study session of reading “Programming Collective Intelligence” earnestly
3.
自己紹介 -氏名 こし
かわ けん じ 越川 兼地 (一応 本勉強会の主催者) -本業 調布の方で学生をしています. (電○大 M1) 飛田給スタジアムの近くに住んでいますが、最近は研究室の住民となりつつある. -研究 分野: 自然言語処理, セマンティックWEB, 特徴語抽出, 関連抽出, 行動抽出 対象: Web全般 … Twitter, Wikipedia, レビューサイト(Amazon, カカクコム) -Social Media Twitter: @Kshi_Kshi Hatena: id:Kshi_Kshi -最近 CodeJamJapan2010に参加して予選突破しました. => 決勝撃沈しました. Android 開発 + Scala はじめました. Study session of reading “Programming Collective Intelligence” earnestly 3
4.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly 4
5.
目次 - ざっくり 6.1
スパムフィルタリング 6.2 ドキュメントと単語 概念?実装準備 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 分類器アルゴリズム① 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 分類器アルゴリズム② 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 分類器の実装テクニック 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 応用 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly 5
6.
6章 – 序 ?
ドキュメントを内容に応じて分類する方法について実 例を交えて解説~ – ドキュメントフィルタリングは実用的でとても普及 e.g. スパムの削除 – 昨今、Webサイトがインタラクティブに =>スパムの被害はメールだけじゃない. CMS全般(Wiki, Blog)で対策を講じるべきである. ? だから本章では、 学習アルゴリズム:ドキュメントがあるカテゴリに属するか どうかを認識する: 代表的な2つの手法について勉強し、応用していくよう な内容になっている。ドキュメントフィルタリングの応用 先はいっぱいあるらしい。 Study session of reading “Programming Collective Intelligence” earnestly 6
7.
目次 6.1 スパムフィルタリング
次はココの話をするよ~ 6.2 ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
8.
6.1 スパムフィルタリング
1/2 ? 初期のスパムフィルタリング – ルールベースだった. ?大文字の過度の使用 OHAYOUGOZAIMASU 典型例 ?薬に関連する単語 オロナイン。オロナイン。 ?けばけばしい色のHTML ようこそスパムの世界へ しかし、 問題①. スパマーが対策してくる : ? スパマーがルールを学習=>フィルター回避=> 新ルール適 用 => スパマー学習 … の永遠ループ「いたちごっこ」 問題②. 誤検知の問題 : ? CAPSLOCKの切り方がわからないおじいちゃん. =>孫に メールに送る => SPAMと判定されちゃう => おじいちゃん の想い届かない => 悲しい (;д;) ??? Study session of reading “Programming Collective Intelligence” earnestly 8
9.
6.1 スパムフィルタリング
2/2 ? スパムであるかどうかは、投稿された場所や 誮に向けて書かれたものかということによっ て、異なる. ??どのメールがスパムであるか? ?そうでないものはどれなのか? を 学習させるような プログラムについて検討する必要がある~ Study session of reading “Programming Collective Intelligence” earnestly 9
10.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 次はココの話をするよ~ 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
11.
6.2 ドキュメントと単語 1/4
?どのメールがスパムであるか? ?そうでないものはどれなのか? を学習させるれば良い。 (前スライドの話) Q. じゃあ具体的に何を学習させるの? => A. 特徴を考えてみましょう! 特徴とは、それがアイテム中に存在する(もしく は存在しない)とあなたが判定できる何かあれば 何でも良い。 – 対象がテキストの場合 : e.g. 単語, 単語の組み合わせ, フレーズ Study session of reading “Programming Collective Intelligence” earnestly 11
12.
6.2 ドキュメントと単語 2/4
僕の 受信箱 特徴例(スパム) : 「無修正」, 「S○X」, 「裏DVD」 … Study session of reading “Programming Collective Intelligence” earnestly 12
13.
6.2 ドキュメントと単語 3/4 コードで説明
内容: getwords(doc) - テキスト中の2文字以上の文字を単語 と見なして単語に分割し、 - すべての単語が小文字に変換される Study session of reading “Programming Collective Intelligence” earnestly 13
14.
6.2 ドキュメントと単語 4/4 結論 「何を特徴として利用するか決めることは非常に重要で難し
い問題である」 特徴は頻繁に出現する十分にありふれたものでなければならない が、ありふれすぎていてすべてのドキュメントに出現するようなもの であってはならない。 特徴にならない特徴例(ストップワード): a, an ,the ,I ,my ,me 大きくフィルタリング精度に関わってくる. 特徴の例 -ドキュメント丸ごと一つの特徴としてみなす, tf-idf, メールの文 書の類似度を計算するとか, -どこで区切るのか?を決めるのもとても重要な話 => ”分かち書き”ではない言語(日本語?朝鮮語など)では特に。 Study session of reading “Programming Collective Intelligence” earnestly 14
15.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 次はココの話をするよ~ 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
16.
6.3 分類機のトレーニング 1/2 この章で紹介するアルゴリズムは正当例を読 み取ることで学習する.
(教師有り学習) ※4章のニューラルネットワークもそうだった ?トレーニングさせればさせるほど、分類精度 がよくなる. ただし、正しい分類に限る。 (間違った分類データを学習に用いると精度は悪くなる.) 分類器の実装~。クラス classifier Study session of reading “Programming Collective Intelligence” earnestly 16
17.
6.3 分類機のトレーニング 2/2 コードで説明 Classifierクラスを実装~トレーニングしてみる.
プロパティ: fc, cc, getfeatures メソッド: incf(), incc(), fcount(), catcount(), totalcount(), categories(),train(), sampletrain() # サンプル実行用仮データ Study session of reading “Programming Collective Intelligence” earnestly 17
18.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 次はココの話をするよ~ 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
19.
6.4 確率を計算する (前節までの話)カテゴリに出現する単語毎の出現数を
得た. => 本節, 確率で特徴量を扱うように手直しする. コードで説明 – メソッド: fprob() 分類器クラスへの追加 ? 条件付き確率: P( A | B ) : 「Bが起こったという条件のもとでAが起こる確率」 => 今回求めたもの P(単語 | カテゴリ : ある単語が特定のカテゴリに存在する確率 ) Study session of reading “Programming Collective Intelligence” earnestly 19
20.
6.4.1 確率を始める -
確率を計算する 1/2 (前スライドの話) fpobは特徴とカテゴリについて、正確な結 果を返してくれるが、ある欠点があるため、少し改良を加え る. Problem ? トレーニング初期において、稀にしか出現しない単語 (特徴になりにくい)が出現した場合、分類するときにノ イズになってしまう。 e.g. ‘money’の話. サンプルの訓練データにおいて、 badとした文に一回のみ出現. 単語’money’は本来、’bad’であるとも’good’であると も断定できない(特徴になりにくい)単語であるので、 Goodの確率が0であるのは、分類時のノイズに働いてしま う。 Study session of reading “Programming Collective Intelligence” earnestly 20
21.
6.4.1 確率を始める -
確率を計算する 2/2 Solution – 仮確立を決めておくといいかも. 確率 = (重み*仮確立 + count * fprob) / (count + 重み) => メソッド: weightedprob() の追加 => デモ. コードで説明 After 出現頻度が少ない単語が訓練データに含まれて いても、改善前より上手く特徴量を定義するこ とができるようになった. Study session of reading “Programming Collective Intelligence” earnestly 21
22.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 次はココの話をするよ~ 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
23.
6.5 単純ベイズ分類器 -
Wikipedia解説 Wikipedia より引用 単純ベイズ分類器(たんじゅんベイズぶんるいき、英: Naive Bayes classifier)は、強い(単純な)独立性仮定と共にベイ ズの定理を適用することに基づいた単純な確率的分類器で ある。その元となる確率モデルは、より正確に言えば「独立特 徴モデル; independent feature model」と呼ぶべきもので ある。 http://ja.wikipedia.org/wiki/%E5%8D%98%E7%B4%94%E3%83%99%E3%82%A4%E3%82%BA%E5%88%86%E9%A1%9E%E5%99%A8 確率論的独立性 ベイズの定理 P( B | A) ? P( A) 2つの確率変数が独立であるというのは、 P( A | B) ? ある確率変数の値が一定範囲に入る事象」と「別 P( B) の確率変数の値が別の一定範囲に入る事象」が、 考えられるどのような「一定範囲」(「考えられる」 とは通常ボレル集合族を指す)を定めても、事象と この2つの考え方を組 して独立であることを言う。 み合わせたもの http://ja.wikipedia.org/wiki/%E7%A2%BA%E7%8E%87%E8%AB%96%E7%9A%84%E7%8B%AC%E7%AB%8B%E6%80%A7 Study session of reading “Programming Collective Intelligence” earnestly 23
24.
6.5 単純ベイズ分類器 -
Wikipedia解説 単純ベイズ分類器 => 確率的独立性 + ベイズの定理 この2つの考え方を組 み合わせたもの このやり方は厳密な手法(正確さの観点から) ではないが、実装が簡単な割にとても効果的 な手法と言われている. Study session of reading “Programming Collective Intelligence” earnestly 24
25.
6.5 確率論的独立性について 1/4
P(" Casino"| Bad ) ? 0.8 Category: ‘Bad’ P(" Python | Bad ) ? 0.2 " Casino Python Study session of reading “Programming Collective Intelligence” earnestly 25
26.
6.5 確率論的独立性について 2/4
P(" Casino"| Bad ) ? 0.8 Casino 独立性の例 Casinoが含まれる分の中にも、 P(" Python | Bad ) ? 0.2 " Python と同等な確率でPythonが表 れるという考え方 Casinoが含まれている文中に Pythonが出現する確率はBad 文書集合にPythonが出現する 確率と同じとする. 現実だと、そんなわけないじゃん!ってツッコミたいと思うが、 単純ベイズ分類器の単純という名の由来はそういうこと。 Study session of reading “Programming Collective Intelligence” earnestly 26
27.
6.5 確率論的独立性について 3/4
P(" Casino"| Bad ) ? 0.8 Category: ‘Bad’ P(" Python | Bad ) ? 0.2 " Casino 独立性の例 Casinoが含まれる分の中にも、 P(" Python | Bad ) ? 0.2 " Python と同等な確率でPythonが表 れるという考え方 Casinoが含まれて いる文中にpython が出現する確率は 同じ 現実だと、そんなわけないじゃん!ってツッコミたいと思うが、 単純ベイズ分類器の単純という名の由来はそういうこと。 Study session of reading “Programming Collective Intelligence” earnestly 27
28.
6.5 確率論的独立性について 4/4
P(" Casino"| Bad ) ? 0.8 Category: ‘Bad’ P(" Python | Bad ) ? 0.2 " Casino Python Badのカテゴリーの文書集合の中の 文中にpythonとcasino両者が含 まれる文書の確率(独立と仮定) P(" Python"&" Casino"| Bad ) ? P(" Python"| Bad ) ? P(" Casino"| Bad ) ? 0.2 ? 0.8 ? 0.16 Study session of reading “Programming Collective Intelligence” earnestly 28
29.
6.5.1 ドキュメント全体の確率 –
単純ベイズ分類器 単純ベイズ分類器を使うには、まずはドキュメ ント全体の与えられたカテゴリー別の確率を 求める必要ある。 ドキュメント| カテゴリー) P( を求める. コードで説明 Study session of reading “Programming Collective Intelligence” earnestly 29
30.
6.5.2 ベイズの定理を用いる– 単純ベイズ分類器 ドキュメントを分類するためには、
P(カテゴリ|ドキュメント) が必要。 与えられた特定のドキュメントがある特定のカテ ゴリに属する確率。 Thomas Bayesのベイズの 定理で簡単に求められる. P( B | A) ? P( A) P( A | B) ? P( B) ドキュメント| カテゴリ ? P(カテゴリ P( ) ) P(カテゴリ|ドキュメント) ? ドキュメント) P( これを実装=> コードで説明 Study session of reading “Programming Collective Intelligence” earnestly 30
31.
6.5.3 カテゴリの選択 –
単純ベイズ分類器 最終ステップ 入力された文が、どのカテゴリーに属するのかを実際に決める 単純案 P(カテゴリ|ドキュメント) 各々のカテゴリーに対して を計算し、一番確率の高いカテゴリを選ぶ方法. => もっともふさわしいカテゴリーをやりたいのであれば、OKだが. しかし、 計算したカテゴリーに属する確率が僅差の場合、無理に一番高い 確率のカテゴリーを選ぶよりも、決められないという判断をする方 がベターな場合もある.(spam mail分類はまさにそう。) なので、 本書では、badにフィルタされる時に、goodにフィルタされる確率 *3という閾値を設けて実装した。(間違ってbadにしてしまった方 がダメージがでかいため) => コードで説明 Study session of reading “Programming Collective Intelligence” earnestly 31
32.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 次はココの話をするよ~ 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
33.
6.6 フィッシャー法 –
概要 ? スパムのフィルターで役に立ち、非常に正確な結果 を生み出す ? 単純ベイズフィルタ: ドキュメントの確率を算出する ために特徴の確率たちを利用 ? フィッシャー法: ドキュメント中のそれぞれの特徴の あるカテゴリでの確率たちを算出し、それらをまと めた確率の集合がランダムな集合と比較して高い か低いかをテストする 引用 http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf Study session of reading “Programming Collective Intelligence” earnestly 33
34.
6.6.1 特徴たちのカテゴリの確率 -
フィッシャー法 ? 単純ベイズフィルタ:ドキュメント全体の確率 を得るために全ての Pr( 特徴 | カテゴリ) をつなぎ合わせ、最後にそれを反転 ? フィッシャー法:特定の特徴を含むドキュメント が、与えられたカテゴリに属する確率を計算 その特徴を持つドキュメントがこのカテゴリに存在する数 P(カテゴリ| 特徴) ? その特徴を持つドキュメント数 これを実装=> コードで説明 引用 http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf Study session of reading “Programming Collective Intelligence” earnestly 34
35.
6.6.2 確率を統合する- フィッシャー法 ?
全体の確率を見つけ出すため、それぞれの特 徴たちの確率をまとめあげる必要がある ? 単純にすべてを掛け合わせることでカテゴリ 同士で比較する際に使えるような確率を算 出 これを実装=> コードで説明 引用 http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf Study session of reading “Programming Collective Intelligence” earnestly 35
36.
6.6.3 アイテムを分類する- フィッシャー法 ?
スパムフィルタでは、それぞれのカテゴリへの下限値を 決定する。 ? bad カテゴリへの下限値はかなり高めに設 – 0.6 ぐらい ? Good カテゴリへの下限値 – 0.2 ぐらい => good なメールが誤って bad に分類される危険減らす 多少のスパムが受信箱に振り分けられ これを実装=> コードで説明 引用 http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf Study session of reading “Programming Collective Intelligence” earnestly 36
37.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 次はココの話をするよ~ 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
38.
6.7
トレーニング済みの分類器を保存する 1/n ? 分類器が Web ベースのアプリケーションの一 部として利用される場合 – ユーザがアプリケーションを利用している間のト レーニングデータは保存されるべき – 次回ユーザがログインした時にはそれを復元 ?SQLite を利用する これを実装=> コードで説明 引用 http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf Study session of reading “Programming Collective Intelligence” earnestly 38
39.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 次はココの話をするよ~ 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
40.
6.8 Blogフィードをフィルタする ? 実データを用いて、
今までの内容をやったことをやってみたという 話。 デモは割愛します. 本書を参照してください. Study session of reading “Programming Collective Intelligence” earnestly 40
41.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 次はココの話をするよ~ 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
42.
6.9 特徴の検出の改良 本書で挙げられていたアイディア ? 大文字トークンと小文字を別々のものとして扱わず、たく
さんの大文字が出現したら特徴として利用する. ? 個々の単語に加え、単語の集合も利用する. ? メタ情報をもっと補足する. たとえばメールメッセージの送 り主、どのカテゴリにそのブログエントリは投稿されたの か?などの情報を利用. ? URLと数を完全な状態で保存 ?実際に特徴を定義している関数を改良! デモは割愛します. 本書を参照してください. 個人的な意見(ただのつぶやき) tf-idfを実装した場合と、どっちが精度がよくなるんや ろー? Study session of reading “Programming Collective Intelligence” earnestly 42
43.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 次はココの話をするよ~ 6.11 その他の手法 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
44.
6.10
Akismetを利用する Akismet(http://akismet.com/) WordPressのプラグインとしてコメントがスパムか否かを分 類する目的で開発されたライブラリ. 現在APIも公開されているので、どんな文字列でもAkismet に送信することでSpamか否かを判定してくれている. Merit - ブログコメントに対しての精度が素晴らしい. (大量の正解データを使用しているのがとても大きいとのこと.) - 手軽に利用可能. (APIキーは必要) - どんな文字列でも可能. 日本語もサポートされている. Demerit - 分類時のパラメータ調整無理. - 回答の根拠となるアルゴリズムは見れない. デモは割愛します. 本書を参照してください. Study session of reading “Programming Collective Intelligence” earnestly 44
45.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 次はココの話をするよ~ 6.12 エクササイズ Study session of reading “Programming Collective Intelligence” earnestly
46.
6.11
その他の手法 他のドキュメント分類に有力な分類器: -NN (Neural Network) -SVM(support vector machine) ベイジアン分類器がよくドキュメント分類に用いられる理由: 他の手法に比べて、計算量が少ない. NNを使うよりも、非 常に高速にフィルタの更新処理を済ませることができるの が大きな理由となっている. しかし、 NNとSVMの方が精度は遥かに優れている。 NNでは、単純ベイズ分類器では捉えることのできない相 互依存関係を捉えることが可能。 (詳しくは本書もしくはGoogle先生に聞いてください) Study session of reading “Programming Collective Intelligence” earnestly 46
47.
目次 6.1 スパムフィルタリング 6.2
ドキュメントと単語 6.3 分類器のトレーニング 6.4 確率を計算する 6.4.1 推測を始める 6.5 単純ベイズ分類器 6.5.1 ドキュメント全体の確率 6.5.2 ベイズの定理の簡単な紹介 6.5.3 カテゴリの選択 6.6 フィッシャー法 6.6.1 特徴たちのカテゴリの確率 6.6.2 確率を統合する 6.6.3 アイテムを分類する 6.7 トレーニング済みの分類器を保存する 6.7.1 SQLiteを利用する 6.8 Blogフィードをフィルタする 6.9 特徴の検出の改良 6.10 Akismetを利用する 6.11 その他の手法 6.12 エクササイズ 次はココの話をするよ~ Study session of reading “Programming Collective Intelligence” earnestly
48.
6.12
エクササイズ 7問あります。解いてみましょう。 1. 仮の確率を変更する. 2. 確率 P(document)を計算する. 3. POP3によるメールのフィルタ 4. 任意のフレーズ長 5. IPアドレスの保持 6. その他の特徴 7. ニューラルネットワークによる分類器 Study session of reading “Programming Collective Intelligence” earnestly 48
49.
个人的に演习时间にやりたいこと
僕の 受信箱 せっかくのスパムデータがたくさんあるので、受信ボックスのメールに 対してフィルタリングやってみたい。 Study session of reading “Programming Collective Intelligence” earnestly 49
50.
ご清聴ありがとうございました 8章を担当してくれる方
を募集してます。 Study session of reading “Programming Collective Intelligence” earnestly
51.
後半部分は割愛してしまい すみませんでした。 Study
session of reading “Programming Collective Intelligence” earnestly
Download