集合知プログラミング 第6章 ドキュメントとフィルタリング~draft

5,307 views

Published on

It's draft version.

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,307
On SlideShare
0
From Embeds
0
Number of Embeds
2,135
Actions
Shares
0
Downloads
13
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

集合知プログラミング 第6章 ドキュメントとフィルタリング~draft

  1. 1. 第6章 ドキュメント フィルタリング 13th October, 2011 @Kshi_KshiStudy session of reading “Programming Collective Intelligence” earnestly
  2. 2. 注意事項• 本資料はドラフト版です。• いつの日にか、もう少しグレード(質)の高い資料にして、どこ かしらにアップロードする予定です。(多分blog)• 間違っている箇所、多々あるかと思います。• 間違いを見つけた方は、お手数ですが、ご連絡いただけると 助かります。 koshikawa2009@gmail.com @Kshi_Kshi id: Kshi_Kshi 2011 10/13 : 17:00 Study session of reading “Programming Collective Intelligence” earnestly
  3. 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. 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. 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. 6章 – 序• ドキュメントを内容に応じて分類する方法について実 例を交えて解説~ – ドキュメントフィルタリングは実用的でとても普及 e.g. スパムの削除 – 昨今、Webサイトがインタラクティブに =>スパムの被害はメールだけじゃない. CMS全般(Wiki, Blog)で対策を講じるべきである.• だから本章では、学習アルゴリズム:ドキュメントがあるカテゴリに属するか どうかを認識する:代表的な2つの手法について勉強し、応用していくよう な内容になっている。ドキュメントフィルタリングの応用 先はいっぱいあるらしい。 Study session of reading “Programming Collective Intelligence” earnestly 6
  7. 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. 8. 6.1 スパムフィルタリング 1/2 • 初期のスパムフィルタリング – ルールベースだった. 大文字の過度の使用 OHAYOUGOZAIMASU典型例 薬に関連する単語 オロナイン。オロナイン。 けばけばしい色のHTML ようこそスパムの世界へ しかし、 問題①. スパマーが対策してくる : • スパマーがルールを学習=>フィルター回避=> 新ルール適 用 => スパマー学習 … の永遠ループ「いたちごっこ」 問題②. 誤検知の問題 : • CAPSLOCKの切り方がわからないおじいちゃん. =>孫に メールに送る => SPAMと判定されちゃう => おじいちゃん の想い届かない => 悲しい (;д;) ヒック Study session of reading “Programming Collective Intelligence” earnestly 8
  9. 9. 6.1 スパムフィルタリング 2/2• スパムであるかどうかは、投稿された場所や 誮に向けて書かれたものかということによっ て、異なる.・どのメールがスパムであるか? ・そうでないものはどれなのか? を 学習させるようなプログラムについて検討する必要がある~ Study session of reading “Programming Collective Intelligence” earnestly 9
  10. 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. 11. 6.2 ドキュメントと単語 1/4 ・どのメールがスパムであるか? ・そうでないものはどれなのか? を学習させるれば良い。 (前スライドの話)Q. じゃあ具体的に何を学習させるの? => A. 特徴を考えてみましょう! 特徴とは、それがアイテム中に存在する(もしく は存在しない)とあなたが判定できる何かあれば 何でも良い。 – 対象がテキストの場合 : e.g. 単語, 単語の組み合わせ, フレーズ Study session of reading “Programming Collective Intelligence” earnestly 11
  12. 12. 6.2 ドキュメントと単語 2/4 僕の 受信箱特徴例(スパム) : 「無修正」, 「S○X」, 「裏DVD」 … Study session of reading “Programming Collective Intelligence” earnestly 12
  13. 13. 6.2 ドキュメントと単語 3/4コードで説明 内容: getwords(doc) - テキスト中の2文字以上の文字を単語 と見なして単語に分割し、 - すべての単語が小文字に変換される Study session of reading “Programming Collective Intelligence” earnestly 13
  14. 14. 6.2 ドキュメントと単語 4/4結論「何を特徴として利用するか決めることは非常に重要で難し い問題である」 特徴は頻繁に出現する十分にありふれたものでなければならない が、ありふれすぎていてすべてのドキュメントに出現するようなもの であってはならない。 特徴にならない特徴例(ストップワード): a, an ,the ,I ,my ,me大きくフィルタリング精度に関わってくる.特徴の例 -ドキュメント丸ごと一つの特徴としてみなす, tf-idf, メールの文 書の類似度を計算するとか, -どこで区切るのか?を決めるのもとても重要な話 => ”分かち書き”ではない言語(日本語・朝鮮語など)では特に。 Study session of reading “Programming Collective Intelligence” earnestly 14
  15. 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. 16. 6.3 分類機のトレーニング 1/2この章で紹介するアルゴリズムは正当例を読み取ることで学習する. (教師有り学習) ※4章のニューラルネットワークもそうだったトレーニングさせればさせるほど、分類精度 がよくなる. ただし、正しい分類に限る。(間違った分類データを学習に用いると精度は悪くなる.)分類器の実装~。クラス classifier Study session of reading “Programming Collective Intelligence” earnestly 16
  17. 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. 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. 19. 6.4 確率を計算する (前節までの話)カテゴリに出現する単語毎の出現数を 得た. => 本節, 確率で特徴量を扱うように手直しする. コードで説明 – メソッド: fprob() 分類器クラスへの追加• 条件付き確率: P( A | B ) : 「Bが起こったという条件のもとでAが起こる確率」 => 今回求めたもの P(単語 | カテゴリ : ある単語が特定のカテゴリに存在する確率 ) Study session of reading “Programming Collective Intelligence” earnestly 19
  20. 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. 21. 6.4.1 確率を始める - 確率を計算する 2/2Solution – 仮確立を決めておくといいかも. 確率 = (重み*仮確立 + count * fprob) / (count + 重み) => メソッド: weightedprob() の追加 => デモ. コードで説明After 出現頻度が少ない単語が訓練データに含まれて いても、改善前より上手く特徴量を定義するこ とができるようになった. Study session of reading “Programming Collective Intelligence” earnestly 21
  22. 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. 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. 24. 6.5 単純ベイズ分類器 - Wikipedia解説単純ベイズ分類器 => 確率的独立性 + ベイズの定理 この2つの考え方を組 み合わせたもの このやり方は厳密な手法(正確さの観点から) ではないが、実装が簡単な割にとても効果的 な手法と言われている. Study session of reading “Programming Collective Intelligence” earnestly 24
  25. 25. 6.5 確率論的独立性について 1/4 P(" Casino"| Bad )  0.8Category: ‘Bad’ P(" Python | Bad )  0.2 " Casino Python Study session of reading “Programming Collective Intelligence” earnestly 25
  26. 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. 27. 6.5 確率論的独立性について 3/4 P(" Casino"| Bad )  0.8Category: ‘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. 28. 6.5 確率論的独立性について 4/4 P(" Casino"| Bad )  0.8Category: ‘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. 29. 6.5.1 ドキュメント全体の確率 – 単純ベイズ分類器 単純ベイズ分類器を使うには、まずはドキュメ ント全体の与えられたカテゴリー別の確率を 求める必要ある。 ドキュメント| カテゴリー) P( を求める. コードで説明 Study session of reading “Programming Collective Intelligence” earnestly 29
  30. 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. 31. 6.5.3 カテゴリの選択 – 単純ベイズ分類器最終ステップ 入力された文が、どのカテゴリーに属するのかを実際に決める単純案 P(カテゴリ|ドキュメント) 各々のカテゴリーに対して を計算し、一番確率の高いカテゴリを選ぶ方法. => もっともふさわしいカテゴリーをやりたいのであれば、OKだが.しかし、 計算したカテゴリーに属する確率が僅差の場合、無理に一番高い 確率のカテゴリーを選ぶよりも、決められないという判断をする方 がベターな場合もある.(spam mail分類はまさにそう。)なので、 本書では、badにフィルタされる時に、goodにフィルタされる確率 *3という閾値を設けて実装した。(間違ってbadにしてしまった方 がダメージがでかいため) => コードで説明 Study session of reading “Programming Collective Intelligence” earnestly 31
  32. 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. 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. 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. 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. 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. 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. 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. 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. 40. 6.8 Blogフィードをフィルタする• 実データを用いて、 今までの内容をやったことをやってみたという 話。デモは割愛します. 本書を参照してください. Study session of reading “Programming Collective Intelligence” earnestly 40
  41. 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. 42. 6.9 特徴の検出の改良本書で挙げられていたアイディア• 大文字トークンと小文字を別々のものとして扱わず、たく さんの大文字が出現したら特徴として利用する.• 個々の単語に加え、単語の集合も利用する.• メタ情報をもっと補足する. たとえばメールメッセージの送 り主、どのカテゴリにそのブログエントリは投稿されたの か?などの情報を利用.• URLと数を完全な状態で保存実際に特徴を定義している関数を改良! デモは割愛します. 本書を参照してください.個人的な意見(ただのつぶやき) tf-idfを実装した場合と、どっちが精度がよくなるんや ろー? Study session of reading “Programming Collective Intelligence” earnestly 42
  43. 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. 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. 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. 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. 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. 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. 49. 個人的に演習時間にやりたいこと 僕の 受信箱せっかくのスパムデータがたくさんあるので、受信ボックスのメールに 対してフィルタリングやってみたい。 Study session of reading “Programming Collective Intelligence” earnestly 49
  50. 50. ご清聴ありがとうございました 8章を担当してくれる方 を募集してます。 Study session of reading “Programming Collective Intelligence” earnestly
  51. 51. 後半部分は割愛してしまい すみませんでした。Study session of reading “Programming Collective Intelligence” earnestly

×