51
6ドキュメント フィルタリング 13 th October, 2011 @Kshi_Kshi Study session of reading “Programming Collective Intelligence” earnestly

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

Embed Size (px)

DESCRIPTION

It's draft version.

Citation preview

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

第6章

ドキュメント

フィルタリング

13th October, 2011

@Kshi_Kshi

Study session of reading “Programming Collective Intelligence” earnestly

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

• 本資料はドラフト版です。

• いつの日にか、もう少しグレード(質)の高い資料にして、どこかしらにアップロードする予定です。(多分blog)

• 間違っている箇所、多々あるかと思います。

• 間違いを見つけた方は、お手数ですが、ご連絡いただけると助かります。

[email protected] @Kshi_Kshi id: Kshi_Kshi 2011 10/13 : 17:00

Study session of reading “Programming Collective Intelligence” earnestly

注意事項

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

自己紹介 -氏名 こし かわ けん じ

越 川 兼 地 (一応 本勉強会の主催者)

-本業 調布の方で学生をしています. (電○大 M1) 飛田給スタジアムの近くに住んでいますが、最近は研究室の住民となりつつある.

-研究 分野: 自然言語処理, セマンティックWEB, 特徴語抽出, 関連抽出, 行動抽出 対象: Web全般 … Twitter, Wikipedia, レビューサイト(Amazon, カカクコム)

-Social Media Twitter: @Kshi_Kshi Hatena: id:Kshi_Kshi

-最近 CodeJamJapan2010に参加して予選突破しました. => 決勝撃沈しました. Android 開発 + Scala はじめました.

3 Study session of reading “Programming Collective Intelligence” earnestly

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

目次 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 エクササイズ

4 Study session of reading “Programming Collective Intelligence” earnestly

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

目次 - ざっくり 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 エクササイズ

5 Study session of reading “Programming Collective Intelligence” earnestly

分類器アルゴリズム①

分類器アルゴリズム②

応用

分類器の実装テクニック

概念・実装準備

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

6章 – 序 • ドキュメントを内容に応じて分類する方法について実

例を交えて解説~ – ドキュメントフィルタリングは実用的でとても普及

e.g. スパムの削除

– 昨今、Webサイトがインタラクティブに =>スパムの被害はメールだけじゃない. CMS全般(Wiki, Blog)で対策を講じるべきである.

• だから本章では、 学習アルゴリズム:ドキュメントがあるカテゴリに属するか

どうかを認識する: 代表的な2つの手法について勉強し、応用していくよう

な内容になっている。ドキュメントフィルタリングの応用先はいっぱいあるらしい。

6 Study session of reading “Programming Collective Intelligence” earnestly

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.1 スパムフィルタリング 1/2

• 初期のスパムフィルタリング

– ルールベースだった. 大文字の過度の使用 OHAYOUGOZAIMASU

薬に関連する単語 オロナイン。オロナイン。

けばけばしい色のHTML ようこそスパムの世界へ

しかし、

問題①. スパマーが対策してくる : • スパマーがルールを学習=>フィルター回避=> 新ルール適

用 => スパマー学習 … の永遠ループ「いたちごっこ」

問題②. 誤検知の問題 : • CAPSLOCKの切り方がわからないおじいちゃん. =>孫に

メールに送る => SPAMと判定されちゃう => おじいちゃんの想い届かない => 悲しい (;д;) ヒック

8 Study session of reading “Programming Collective Intelligence” earnestly

典型例

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

6.1 スパムフィルタリング 2/2

• スパムであるかどうかは、投稿された場所や誮に向けて書かれたものかということによって、異なる.

・どのメールがスパムであるか?

・そうでないものはどれなのか?

を学習させるような

プログラムについて検討する必要がある~

9 Study session of reading “Programming Collective Intelligence” earnestly

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.2 ドキュメントと単語 1/4 ・どのメールがスパムであるか?

・そうでないものはどれなのか?

を学習させるれば良い。 (前スライドの話)

Q. じゃあ具体的に何を学習させるの?

=> A. 特徴を考えてみましょう!

特徴とは、それがアイテム中に存在する(もしくは存在しない)とあなたが判定できる何かあれば何でも良い。 – 対象がテキストの場合 :

e.g. 単語, 単語の組み合わせ, フレーズ

11 Study session of reading “Programming Collective Intelligence” earnestly

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

6.2 ドキュメントと単語 2/4

特徴例(スパム) : 「無修正」, 「S○X」, 「裏DVD」 …

12 Study session of reading “Programming Collective Intelligence” earnestly

僕の 受信箱

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

6.2 ドキュメントと単語 3/4

コードで説明

Study session of reading “Programming Collective Intelligence” earnestly 13

内容: getwords(doc) - テキスト中の2文字以上の文字を単語

と見なして単語に分割し、 - すべての単語が小文字に変換される

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

6.2 ドキュメントと単語 4/4 結論

「何を特徴として利用するか決めることは非常に重要で難しい問題である」

特徴は頻繁に出現する十分にありふれたものでなければならない

が、ありふれすぎていてすべてのドキュメントに出現するようなものであってはならない。 特徴にならない特徴例(ストップワード): a, an ,the ,I ,my ,me

大きくフィルタリング精度に関わってくる. 特徴の例 -ドキュメント丸ごと一つの特徴としてみなす, tf-idf, メールの文

書の類似度を計算するとか, -どこで区切るのか?を決めるのもとても重要な話 => ”分かち書き”ではない言語(日本語・朝鮮語など)では特に。

14 Study session of reading “Programming Collective Intelligence” earnestly

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.3 分類機のトレーニング 1/2

この章で紹介するアルゴリズムは正当例を読み取ることで学習する. (教師有り学習)

※4章のニューラルネットワークもそうだった

トレーニングさせればさせるほど、分類精度がよくなる. ただし、正しい分類に限る。

(間違った分類データを学習に用いると精度は悪くなる.)

分類器の実装~。クラス classifier

16 Study session of reading “Programming Collective Intelligence” earnestly

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

6.3 分類機のトレーニング 2/2

Classifierクラスを実装~トレーニングしてみる. プロパティ: fc, cc, getfeatures メソッド: incf(), incc(), fcount(), catcount(), totalcount(), categories(),train(), sampletrain() # サンプル実行用仮データ

17 Study session of reading “Programming Collective Intelligence” earnestly

コードで説明

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.4 確率を計算する

(前節までの話)カテゴリに出現する単語毎の出現数を得た.

=> 本節, 確率で特徴量を扱うように手直しする.

– メソッド: fprob() 分類器クラスへの追加

• 条件付き確率: : 「Bが起こったという条件のもとでAが起こる確率」

=> 今回求めたもの

: ある単語が特定のカテゴリに存在する確率

19 Study session of reading “Programming Collective Intelligence” earnestly

コードで説明

)|( カテゴリ単語P

)|( BAP

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

6.4.1 確率を始める - 確率を計算する 1/2

(前スライドの話) fpobは特徴とカテゴリについて、正確な結果を返してくれるが、ある欠点があるため、少し改良を加える.

Problem • トレーニング初期において、稀にしか出現しない単語

(特徴になりにくい)が出現した場合、分類するときにノイズになってしまう。 e.g. ‘money’の話. サンプルの訓練データにおいて、

badとした文に一回のみ出現. 単語’money’は本来、’bad’であるとも’good’であると

も断定できない(特徴になりにくい)単語であるので、Goodの確率が0であるのは、分類時のノイズに働いてしまう。

20 Study session of reading “Programming Collective Intelligence” earnestly

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

6.4.1 確率を始める - 確率を計算する 2/2

Solution – 仮確立を決めておくといいかも. 確率 = (重み*仮確立 + count * fprob) / (count + 重み)

=> メソッド: weightedprob() の追加 => デモ.

After

出現頻度が少ない単語が訓練データに含まれていても、改善前より上手く特徴量を定義することができるようになった.

21 Study session of reading “Programming Collective Intelligence” earnestly

コードで説明

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.5 単純ベイズ分類器 - Wikipedia解説

単純ベイズ分類器(たんじゅんベイズぶんるいき、英: Naive Bayes classifier)は、強い(単純な)独立性仮定と共にベイズの定理を適用することに基づいた単純な確率的分類器である。その元となる確率モデルは、より正確に言えば「独立特徴モデル; independent feature model」と呼ぶべきものである。

23 Study session of reading “Programming Collective Intelligence” earnestly

Wikipedia より引用

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

)(

)()|()|(

BP

APABPBAP

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

ベイズの定理

この2つの考え方を組み合わせたもの

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

6.5 単純ベイズ分類器 - Wikipedia解説

24 Study session of reading “Programming Collective Intelligence” earnestly

単純ベイズ分類器 =>

確率的独立性 + ベイズの定理

このやり方は厳密な手法(正確さの観点から)ではないが、実装が簡単な割にとても効果的な手法と言われている.

この2つの考え方を組み合わせたもの

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

25 Study session of reading “Programming Collective Intelligence” earnestly

Python

Casino

Category: ‘Bad’ 2.0)|"Python(" BadP

8.0)|"Casino(" BadP

6.5 確率論的独立性について 1/4

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

6.5 確率論的独立性について 2/4

26 Study session of reading “Programming Collective Intelligence” earnestly

Casino

8.0)|"Casino(" BadP

独立性の例 Casinoが含まれる分の中にも、 と同等な確率でPythonが表れるという考え方

2.0)|"Python(" BadP

Python

Casinoが含まれている文中にPythonが出現する確率はBad文書集合にPythonが出現する確率と同じとする.

現実だと、そんなわけないじゃん!ってツッコミたいと思うが、

単純ベイズ分類器の単純という名の由来はそういうこと。

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

27 Study session of reading “Programming Collective Intelligence” earnestly

Python

Casino

Category: ‘Bad’ 2.0)|"Python(" BadP

8.0)|"Casino(" BadP

独立性の例 Casinoが含まれる分の中にも、 と同等な確率でPythonが表れるという考え方

2.0)|"Python(" BadP

Casinoが含まれている文中にpython

が出現する確率は同じ

現実だと、そんなわけないじゃん!ってツッコミたいと思うが、

単純ベイズ分類器の単純という名の由来はそういうこと。

6.5 確率論的独立性について 3/4

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

28 Study session of reading “Programming Collective Intelligence” earnestly

Python

Casino

Category: ‘Bad’ 2.0)|"Python(" BadP

8.0)|"Casino(" BadP

16.0

8.02.0

)|"Casino(")|"Python("

)|"Casino"&"Python("

BadPBadP

BadP

Badのカテゴリーの文書集合の中の文中にpythonとcasino両者が含まれる文書の確率(独立と仮定)

6.5 確率論的独立性について 4/4

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

単純ベイズ分類器を使うには、まずはドキュメント全体の与えられたカテゴリー別の確率を求める必要ある。

を求める.

29 Study session of reading “Programming Collective Intelligence” earnestly

6.5.1 ドキュメント全体の確率 – 単純ベイズ分類器

)|( カテゴリードキュメントP

コードで説明

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

ドキュメントを分類するためには、

が必要。

与えられた特定のドキュメントがある特定のカテゴリに属する確率。 Thomas Bayesのベイズの定理で簡単に求められる.

これを実装=> コードで説明

30 Study session of reading “Programming Collective Intelligence” earnestly

6.5.2 ベイズの定理を用いる– 単純ベイズ分類器

)|( ドキュメントカテゴリP

)(

)()|()|(

BP

APABPBAP

)(

)()|()|(

ドキュメント

カテゴリカテゴリドキュメントドキュメントカテゴリ

P

PPP

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

最終ステップ 入力された文が、どのカテゴリーに属するのかを実際に決める 単純案 各々のカテゴリーに対して を計算し、一番確率の高いカテゴリを選ぶ方法. => もっともふさわしいカテゴリーをやりたいのであれば、OKだが. しかし、 計算したカテゴリーに属する確率が僅差の場合、無理に一番高い

確率のカテゴリーを選ぶよりも、決められないという判断をする方がベターな場合もある.(spam mail分類はまさにそう。)

なので、 本書では、badにフィルタされる時に、goodにフィルタされる確率

*3という閾値を設けて実装した。(間違ってbadにしてしまった方がダメージがでかいため) => コードで説明

31 Study session of reading “Programming Collective Intelligence” earnestly

6.5.3 カテゴリの選択 – 単純ベイズ分類器

)|( ドキュメントカテゴリP

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.6 フィッシャー法 – 概要

• スパムのフィルターで役に立ち、非常に正確な結果を生み出す

• 単純ベイズフィルタ: ドキュメントの確率を算出するために特徴の確率たちを利用

• フィッシャー法: ドキュメント中のそれぞれの特徴のあるカテゴリでの確率たちを算出し、それらをまとめた確率の集合がランダムな集合と比較して高いか低いかをテストする

33 Study session of reading “Programming Collective Intelligence” earnestly

http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf 引用

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

6.6.1 特徴たちのカテゴリの確率 - フィッシャー法

• 単純ベイズフィルタ:ドキュメント全体の確率を得るために全ての Pr( 特徴 | カテゴリ)をつなぎ合わせ、最後にそれを反転

• フィッシャー法:特定の特徴を含むドキュメントが、与えられたカテゴリに属する確率を計算

これを実装=> コードで説明

34 Study session of reading “Programming Collective Intelligence” earnestly

http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf

メント数その特徴を持つドキュ

に存在する数メントがこのカテゴリその特徴を持つドキュ特徴カテゴリ )|(P

引用

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

6.6.2 確率を統合する- フィッシャー法

• 全体の確率を見つけ出すため、それぞれの特徴たちの確率をまとめあげる必要がある

• 単純にすべてを掛け合わせることでカテゴリ同士で比較する際に使えるような確率を算出

これを実装=> コードで説明

35 Study session of reading “Programming Collective Intelligence” earnestly

http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf 引用

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

6.6.3 アイテムを分類する- フィッシャー法

• スパムフィルタでは、それぞれのカテゴリへの下限値を決定する。

• bad カテゴリへの下限値はかなり高めに設 – 0.6 ぐらい

• Good カテゴリへの下限値 – 0.2 ぐらい

=> good なメールが誤って bad に分類される危険減らす 多少のスパムが受信箱に振り分けられ これを実装=> コードで説明

36 Study session of reading “Programming Collective Intelligence” earnestly

http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf 引用

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.7 トレーニング済みの分類器を保存する 1/n

• 分類器が Web ベースのアプリケーションの一部として利用される場合

– ユーザがアプリケーションを利用している間のトレーニングデータは保存されるべき

– 次回ユーザがログインした時にはそれを復元

SQLite を利用する

これを実装=> コードで説明

38 Study session of reading “Programming Collective Intelligence” earnestly

http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf 引用

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.8 Blogフィードをフィルタする

• 実データを用いて、

今までの内容をやったことをやってみたという話。

デモは割愛します. 本書を参照してください.

40 Study session of reading “Programming Collective Intelligence” earnestly

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.9 特徴の検出の改良 本書で挙げられていたアイディア • 大文字トークンと小文字を別々のものとして扱わず、たく

さんの大文字が出現したら特徴として利用する. • 個々の単語に加え、単語の集合も利用する. • メタ情報をもっと補足する. たとえばメールメッセージの送

り主、どのカテゴリにそのブログエントリは投稿されたのか?などの情報を利用.

• URLと数を完全な状態で保存 実際に特徴を定義している関数を改良! デモは割愛します. 本書を参照してください. 個人的な意見(ただのつぶやき) tf-idfを実装した場合と、どっちが精度がよくなるんや

ろー?

42 Study session of reading “Programming Collective Intelligence” earnestly

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.10 Akismetを利用する Akismet(http://akismet.com/)

WordPressのプラグインとしてコメントがスパムか否かを分類する目的で開発されたライブラリ.

現在APIも公開されているので、どんな文字列でもAkismetに送信することでSpamか否かを判定してくれている.

Merit

- ブログコメントに対しての精度が素晴らしい.

(大量の正解データを使用しているのがとても大きいとのこと.)

- 手軽に利用可能. (APIキーは必要)

- どんな文字列でも可能. 日本語もサポートされている.

Demerit

- 分類時のパラメータ調整無理.

- 回答の根拠となるアルゴリズムは見れない.

デモは割愛します. 本書を参照してください. 44 Study session of reading “Programming Collective Intelligence” earnestly

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ

次はココの話をするよ~

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

6.11 その他の手法 他のドキュメント分類に有力な分類器: -NN (Neural Network) -SVM(support vector machine) ベイジアン分類器がよくドキュメント分類に用いられる理由: 他の手法に比べて、計算量が少ない. NNを使うよりも、非

常に高速にフィルタの更新処理を済ませることができるのが大きな理由となっている.

しかし、 NNとSVMの方が精度は遥かに優れている。 NNでは、単純ベイズ分類器では捉えることのできない相

互依存関係を捉えることが可能。 (詳しくは本書もしくはGoogle先生に聞いてください)

46 Study session of reading “Programming Collective Intelligence” earnestly

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

Study session of reading “Programming Collective Intelligence” earnestly

目次 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 エクササイズ 次はココの話をするよ~

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

6.12 エクササイズ

7問あります。解いてみましょう。

1. 仮の確率を変更する.

2. 確率 P(document)を計算する.

3. POP3によるメールのフィルタ

4. 任意のフレーズ長

5. IPアドレスの保持

6. その他の特徴

7. ニューラルネットワークによる分類器

48 Study session of reading “Programming Collective Intelligence” earnestly

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

個人的に演習時間にやりたいこと

せっかくのスパムデータがたくさんあるので、受信ボックスのメールに対してフィルタリングやってみたい。

49 Study session of reading “Programming Collective Intelligence” earnestly

僕の 受信箱

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

Study session of reading “Programming Collective Intelligence” earnestly

ご清聴ありがとうございました

8章を担当してくれる方

を募集してます。

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

Study session of reading “Programming Collective Intelligence” earnestly

後半部分は割愛してしまい

すみませんでした。