SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
第6章
     ドキュメント
    フィルタリング
                      13th October, 2011
                          @Kshi_Kshi

Study session of reading “Programming Collective Intelligence” earnestly
注意事項
• 本資料はドラフト版です。

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

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

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

 koshikawa2009@gmail.com
    @Kshi_Kshi
    id: Kshi_Kshi
                                               2011 10/13 : 17:00

     Study session of reading “Programming Collective Intelligence” earnestly
自己紹介
-氏名
  こし かわ けん じ
  越川 兼地           (一応 本勉強会の主催者)

-本業
  調布の方で学生をしています. (電○大 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
目次
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
目次 - ざっくり
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章 – 序
• ドキュメントを内容に応じて分類する方法について実
  例を交えて解説~
 – ドキュメントフィルタリングは実用的でとても普及
   e.g. スパムの削除
 – 昨今、Webサイトがインタラクティブに
   =>スパムの被害はメールだけじゃない.
   CMS全般(Wiki, Blog)で対策を講じるべきである.

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

代表的な2つの手法について勉強し、応用していくよう
 な内容になっている。ドキュメントフィルタリングの応用
 先はいっぱいあるらしい。
   Study session of reading “Programming Collective Intelligence” earnestly   6
目次
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
6.1 スパムフィルタリング                                                      1/2
 • 初期のスパムフィルタリング
  – ルールベースだった.
    大文字の過度の使用 OHAYOUGOZAIMASU
典型例 薬に関連する単語       オロナイン。オロナイン。
    けばけばしい色のHTML   ようこそスパムの世界へ
 しかし、
  問題①. スパマーが対策してくる :
    • スパマーがルールを学習=>フィルター回避=> 新ルール適
      用 => スパマー学習 … の永遠ループ「いたちごっこ」
  問題②. 誤検知の問題 :
    • CAPSLOCKの切り方がわからないおじいちゃん. =>孫に
      メールに送る => SPAMと判定されちゃう => おじいちゃん
      の想い届かない => 悲しい (;д;) ヒック
     Study session of reading “Programming Collective Intelligence” earnestly   8
6.1 スパムフィルタリング                                                    2/2
• スパムであるかどうかは、投稿された場所や
  誮に向けて書かれたものかということによっ
  て、異なる.

・どのメールがスパムであるか?
 ・そうでないものはどれなのか?

  を   学習させるような
プログラムについて検討する必要がある~

  Study session of reading “Programming Collective Intelligence” earnestly   9
目次
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
6.2 ドキュメントと単語 1/4
 ・どのメールがスパムであるか?
 ・そうでないものはどれなのか?
  を学習させるれば良い。 (前スライドの話)

Q. じゃあ具体的に何を学習させるの?
     => A. 特徴を考えてみましょう!

 特徴とは、それがアイテム中に存在する(もしく
 は存在しない)とあなたが判定できる何かあれば
 何でも良い。
 – 対象がテキストの場合 :
   e.g. 単語, 単語の組み合わせ, フレーズ

    Study session of reading “Programming Collective Intelligence” earnestly   11
6.2 ドキュメントと単語 2/4
                                                  僕の                           受信箱




特徴例(スパム) : 「無修正」, 「S○X」, 「裏DVD」 …
    Study session of reading “Programming Collective Intelligence” earnestly         12
6.2 ドキュメントと単語 3/4


コードで説明
        内容: getwords(doc)
        - テキスト中の2文字以上の文字を単語
          と見なして単語に分割し、
        - すべての単語が小文字に変換される




  Study session of reading “Programming Collective Intelligence” earnestly   13
6.2 ドキュメントと単語 4/4
結論
「何を特徴として利用するか決めることは非常に重要で難し
  い問題である」

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


大きくフィルタリング精度に関わってくる.

特徴の例
 -ドキュメント丸ごと一つの特徴としてみなす, tf-idf, メールの文
 書の類似度を計算するとか,
 -どこで区切るのか?を決めるのもとても重要な話
  => ”分かち書き”ではない言語(日本語・朝鮮語など)では特に。

        Study session of reading “Programming Collective Intelligence” earnestly   14
目次
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
6.3 分類機のトレーニング 1/2
この章で紹介するアルゴリズムは正当例を読
み取ることで学習する. (教師有り学習)
  ※4章のニューラルネットワークもそうだった


トレーニングさせればさせるほど、分類精度
 がよくなる. ただし、正しい分類に限る。
(間違った分類データを学習に用いると精度は悪くなる.)


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

  Study session of reading “Programming Collective Intelligence” earnestly   16
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
目次
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
6.4 確率を計算する
 (前節までの話)カテゴリに出現する単語毎の出現数を
 得た.
 => 本節, 確率で特徴量を扱うように手直しする.



    コードで説明
         – メソッド: fprob()            分類器クラスへの追加



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

  => 今回求めたもの
 P(単語 | カテゴリ : ある単語が特定のカテゴリに存在する確率
            )
      Study session of reading “Programming Collective Intelligence” earnestly   19
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
6.4.1 確率を始める - 確率を計算する 2/2
Solution
  – 仮確立を決めておくといいかも.
    確率 = (重み*仮確立 + count * fprob) / (count + 重み)


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


         コードで説明
After
 出現頻度が少ない単語が訓練データに含まれて
 いても、改善前より上手く特徴量を定義するこ
 とができるようになった.
      Study session of reading “Programming Collective Intelligence” earnestly   21
目次
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
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
6.5 単純ベイズ分類器 - Wikipedia解説


単純ベイズ分類器 =>
     確率的独立性 + ベイズの定理
                           この2つの考え方を組
                           み合わせたもの



 このやり方は厳密な手法(正確さの観点から)
 ではないが、実装が簡単な割にとても効果的
 な手法と言われている.
   Study session of reading “Programming Collective Intelligence” earnestly   24
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
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
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
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
6.5.1 ドキュメント全体の確率 – 単純ベイズ分類器

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

   ドキュメント| カテゴリー)
  P(
   を求める.



      コードで説明
   Study session of reading “Programming Collective Intelligence” earnestly   29
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
6.5.3 カテゴリの選択 – 単純ベイズ分類器
最終ステップ
 入力された文が、どのカテゴリーに属するのかを実際に決める

単純案           P(カテゴリ|ドキュメント)
 各々のカテゴリーに対して
 を計算し、一番確率の高いカテゴリを選ぶ方法.
 => もっともふさわしいカテゴリーをやりたいのであれば、OKだが.

しかし、
 計算したカテゴリーに属する確率が僅差の場合、無理に一番高い
 確率のカテゴリーを選ぶよりも、決められないという判断をする方
 がベターな場合もある.(spam mail分類はまさにそう。)

なので、
 本書では、badにフィルタされる時に、goodにフィルタされる確率
 *3という閾値を設けて実装した。(間違ってbadにしてしまった方
 がダメージがでかいため) => コードで説明
    Study session of reading “Programming Collective Intelligence” earnestly   31
目次
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
6.6 フィッシャー法 – 概要
• スパムのフィルターで役に立ち、非常に正確な結果
  を生み出す

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

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

   引用   http://nlp.dse.ibaraki.ac.jp/~shinnou/zemi2009/colint/colint-sa-0526.pdf
   Study session of reading “Programming Collective Intelligence” earnestly        33
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
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
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
目次
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
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
目次
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
6.8 Blogフィードをフィルタする
• 実データを用いて、
  今までの内容をやったことをやってみたという
  話。

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




   Study session of reading “Programming Collective Intelligence” earnestly   40
目次
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
6.9 特徴の検出の改良
本書で挙げられていたアイディア
• 大文字トークンと小文字を別々のものとして扱わず、たく
  さんの大文字が出現したら特徴として利用する.
• 個々の単語に加え、単語の集合も利用する.
• メタ情報をもっと補足する. たとえばメールメッセージの送
  り主、どのカテゴリにそのブログエントリは投稿されたの
  か?などの情報を利用.
• URLと数を完全な状態で保存

実際に特徴を定義している関数を改良!
 デモは割愛します. 本書を参照してください.

個人的な意見(ただのつぶやき)
 tf-idfを実装した場合と、どっちが精度がよくなるんや
 ろー?
    Study session of reading “Programming Collective Intelligence” earnestly   42
目次
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
6.10            Akismetを利用する
Akismet(http://akismet.com/)
  WordPressのプラグインとしてコメントがスパムか否かを分
  類する目的で開発されたライブラリ.
  現在APIも公開されているので、どんな文字列でもAkismet
  に送信することでSpamか否かを判定してくれている.
  Merit
      - ブログコメントに対しての精度が素晴らしい.
                (大量の正解データを使用しているのがとても大きいとのこと.)
      - 手軽に利用可能. (APIキーは必要)
      - どんな文字列でも可能. 日本語もサポートされている.
  Demerit
      - 分類時のパラメータ調整無理.
      - 回答の根拠となるアルゴリズムは見れない.
          デモは割愛します. 本書を参照してください.
       Study session of reading “Programming Collective Intelligence” earnestly   44
目次
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
6.11           その他の手法
他のドキュメント分類に有力な分類器:
 -NN (Neural Network)
 -SVM(support vector machine)

ベイジアン分類器がよくドキュメント分類に用いられる理由:
 他の手法に比べて、計算量が少ない. NNを使うよりも、非
 常に高速にフィルタの更新処理を済ませることができるの
 が大きな理由となっている.

しかし、
NNとSVMの方が精度は遥かに優れている。
  NNでは、単純ベイズ分類器では捉えることのできない相
  互依存関係を捉えることが可能。
 (詳しくは本書もしくはGoogle先生に聞いてください)


      Study session of reading “Programming Collective Intelligence” earnestly   46
目次
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
6.12           エクササイズ
7問あります。解いてみましょう。

 1.   仮の確率を変更する.
 2.   確率 P(document)を計算する.
 3.   POP3によるメールのフィルタ
 4.   任意のフレーズ長
 5.   IPアドレスの保持
 6.   その他の特徴
 7.   ニューラルネットワークによる分類器


      Study session of reading “Programming Collective Intelligence” earnestly   48
個人的に演習時間にやりたいこと
                                                  僕の                           受信箱




せっかくのスパムデータがたくさんあるので、受信ボックスのメールに
 対してフィルタリングやってみたい。
    Study session of reading “Programming Collective Intelligence” earnestly         49
ご清聴ありがとうございました

 8章を担当してくれる方
   を募集してます。


 Study session of reading “Programming Collective Intelligence” earnestly
後半部分は割愛してしまい
  すみませんでした。




Study session of reading “Programming Collective Intelligence” earnestly

Más contenido relacionado

Destacado

Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
Yuji Nojima
 
-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう
nico0927
 
ウェブデザインの本質と、構成要素
ウェブデザインの本質と、構成要素ウェブデザインの本質と、構成要素
ウェブデザインの本質と、構成要素
vanillate cocoa
 

Destacado (20)

シロクマ本に学ぶエクスペリエンスのための手技法 by 篠原 稔和 - presentation from IA CAMP 2015
シロクマ本に学ぶエクスペリエンスのための手技法 by 篠原 稔和 - presentation from IA CAMP 2015シロクマ本に学ぶエクスペリエンスのための手技法 by 篠原 稔和 - presentation from IA CAMP 2015
シロクマ本に学ぶエクスペリエンスのための手技法 by 篠原 稔和 - presentation from IA CAMP 2015
 
Webアクセシビリティの標準規格「JIS X 8341-3:2010」準拠のための試験方法(最新版)
Webアクセシビリティの標準規格「JIS X 8341-3:2010」準拠のための試験方法(最新版)Webアクセシビリティの標準規格「JIS X 8341-3:2010」準拠のための試験方法(最新版)
Webアクセシビリティの標準規格「JIS X 8341-3:2010」準拠のための試験方法(最新版)
 
Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪Chromeでjavascriptデバッグ!まず半歩♪
Chromeでjavascriptデバッグ!まず半歩♪
 
Photoshopで効率よくデザインしよう!
Photoshopで効率よくデザインしよう!Photoshopで効率よくデザインしよう!
Photoshopで効率よくデザインしよう!
 
-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう-入門- enchant.js でゲームを作ろう
-入門- enchant.js でゲームを作ろう
 
.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説.htaccessによるリダイレクト徹底解説
.htaccessによるリダイレクト徹底解説
 
悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)
悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)
悩まないコーディングをしよう! OOCSS,SMACSSを用いた、読みやすくてメンテナブルなCSS設計(Sass対応)
 
ウェブデザインの本質と、構成要素
ウェブデザインの本質と、構成要素ウェブデザインの本質と、構成要素
ウェブデザインの本質と、構成要素
 
今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャ今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャ
 
コーディングが上達するコツ
コーディングが上達するコツコーディングが上達するコツ
コーディングが上達するコツ
 
Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門Webアプリケーション負荷試験実践入門
Webアプリケーション負荷試験実践入門
 
WordPressプラグイン作成入門
WordPressプラグイン作成入門WordPressプラグイン作成入門
WordPressプラグイン作成入門
 
ノンプログラマーのためのjQuery入門
ノンプログラマーのためのjQuery入門ノンプログラマーのためのjQuery入門
ノンプログラマーのためのjQuery入門
 
Webライティング11のルール
Webライティング11のルールWebライティング11のルール
Webライティング11のルール
 
これくらいはやってほしいWebデザイン
これくらいはやってほしいWebデザインこれくらいはやってほしいWebデザイン
これくらいはやってほしいWebデザイン
 
PHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイントPHP7で変わること ——言語仕様とエンジンの改善ポイント
PHP7で変わること ——言語仕様とエンジンの改善ポイント
 
concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識concrete5デザインカスタマイズに必要なPHPの知識
concrete5デザインカスタマイズに必要なPHPの知識
 
ウェブデザインに応用する4つの基本原則
ウェブデザインに応用する4つの基本原則ウェブデザインに応用する4つの基本原則
ウェブデザインに応用する4つの基本原則
 
Webデザインのウソ・ホント ~ Web らしくデザインするためのヒント
Webデザインのウソ・ホント ~ Web らしくデザインするためのヒントWebデザインのウソ・ホント ~ Web らしくデザインするためのヒント
Webデザインのウソ・ホント ~ Web らしくデザインするためのヒント
 
Bootstrapを使って効率よくWordPressオリジナルテーマを作る
Bootstrapを使って効率よくWordPressオリジナルテーマを作るBootstrapを使って効率よくWordPressオリジナルテーマを作る
Bootstrapを使って効率よくWordPressオリジナルテーマを作る
 

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

AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料
ぱろすけ
 
静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2
niku9Tenhou
 

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

はじパタLT2
はじパタLT2はじパタLT2
はじパタLT2
 
Generative Deep Learning #01
Generative Deep Learning #01Generative Deep Learning #01
Generative Deep Learning #01
 
CVPR2017 参加報告 速報版 本会議 1日目
CVPR2017 参加報告 速報版 本会議 1日目CVPR2017 参加報告 速報版 本会議 1日目
CVPR2017 参加報告 速報版 本会議 1日目
 
関西Cvprml勉強会2017.9資料
関西Cvprml勉強会2017.9資料関西Cvprml勉強会2017.9資料
関西Cvprml勉強会2017.9資料
 
[DL輪読会]Meta-Learning Probabilistic Inference for Prediction
[DL輪読会]Meta-Learning Probabilistic Inference for Prediction[DL輪読会]Meta-Learning Probabilistic Inference for Prediction
[DL輪読会]Meta-Learning Probabilistic Inference for Prediction
 
第3回集合知プログラミング勉強会 #TokyoCI グループを見つけ出す
第3回集合知プログラミング勉強会 #TokyoCI グループを見つけ出す第3回集合知プログラミング勉強会 #TokyoCI グループを見つけ出す
第3回集合知プログラミング勉強会 #TokyoCI グループを見つけ出す
 
MS COCO Dataset Introduction
MS COCO Dataset IntroductionMS COCO Dataset Introduction
MS COCO Dataset Introduction
 
AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料AV 画像認識とその周辺 - UT Startup Gym 講演資料
AV 画像認識とその周辺 - UT Startup Gym 講演資料
 
Object Detection & Instance Segmentationの論文紹介 | OHS勉強会#3
Object Detection & Instance Segmentationの論文紹介 | OHS勉強会#3Object Detection & Instance Segmentationの論文紹介 | OHS勉強会#3
Object Detection & Instance Segmentationの論文紹介 | OHS勉強会#3
 
静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2静岡Developers勉強会コンピュータビジョンvol2
静岡Developers勉強会コンピュータビジョンvol2
 
20141008物体検出器
20141008物体検出器20141008物体検出器
20141008物体検出器
 
Jubatusでマルウェア分類
Jubatusでマルウェア分類Jubatusでマルウェア分類
Jubatusでマルウェア分類
 

Más de Kenji Koshikawa (8)

20130120
2013012020130120
20130120
 
Jaws2012 koshikawa
Jaws2012 koshikawaJaws2012 koshikawa
Jaws2012 koshikawa
 
[International Asian LOD Challenge Day 2012]LOD generation of Social and Mass...
[International Asian LOD Challenge Day 2012]LOD generation of Social and Mass...[International Asian LOD Challenge Day 2012]LOD generation of Social and Mass...
[International Asian LOD Challenge Day 2012]LOD generation of Social and Mass...
 
[JAWS2012]CRFを用いた メディア情報の抽出とLinked Data化 ~ ソーシャルメディアとマスメディアの比較事例 ~
[JAWS2012]CRFを用いた メディア情報の抽出とLinked Data化 ~ ソーシャルメディアとマスメディアの比較事例 ~[JAWS2012]CRFを用いた メディア情報の抽出とLinked Data化 ~ ソーシャルメディアとマスメディアの比較事例 ~
[JAWS2012]CRFを用いた メディア情報の抽出とLinked Data化 ~ ソーシャルメディアとマスメディアの比較事例 ~
 
Sna book chapter_5
Sna book chapter_5Sna book chapter_5
Sna book chapter_5
 
Code jam japan2011 練習問題A
Code jam japan2011 練習問題ACode jam japan2011 練習問題A
Code jam japan2011 練習問題A
 
Google code jam japan2011 練習問題a
Google code jam japan2011 練習問題aGoogle code jam japan2011 練習問題a
Google code jam japan2011 練習問題a
 
[WWW Conference 2011]Information Credibility on Twitter
[WWW Conference 2011]Information Credibility on Twitter[WWW Conference 2011]Information Credibility on Twitter
[WWW Conference 2011]Information Credibility on Twitter
 

Último

Último (7)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

集合知プログラミング 第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