大きな画面での利用をおすすめします — アニメーションと操作がより快適になります。
入力

ナイーブベイズ

ナイーブベイズはクラスの事前確率に各特徴のクラス条件付き確率を掛け、スコアを比較します。テキストの多項モデルは各 token の出現回数を使います。「ナイーブ」はクラスを与えた後の語の出現を独立とする仮定で、実際の言語では通常成り立ちません。

各語を独立した発言者と考えられます。学習で支持方向と強さを決め、同じ語が繰り返されると同じ証拠をまた加えます。二特徴が同じ内容を表しているかは自ら点検しません。

仕組み

ベイズ則は P(c|d)∝P(c)P(d|c)。全文章の確率を直接推定するのは困難なので、token に分けます。

P(c|d) ∝ P(c) · P(w₁|c) · … · P(wₙ|c)

多項モデルで省いた文書の組合せ係数はクラス間で同じなので比較に影響しません。P(c) は文書数の比率、P(w|c) はそのクラス内の token 計数で、分母が異なります。

未観測語の確率ゼロは積全体をゼロにします。加算平滑化は固定語彙の各項へ擬似カウントを加えます。

P(w|c) = (count(w,c)+α)/(total_c+α|V|)

α=1 は Laplace、他の正 α は Lidstone と呼ばれます。分母にも α|V| を加え、クラス内の語確率の和を 1 に保ちます。

長文の小確率の積はアンダーフローし得ます。発生する長さは値と数値精度次第です。そこで対数を足します。

score(c)=log P(c)+Σ log P(w|c)

対数は単調なので順位は同じです。画面の軸は spam 対 ham の対数オッズ。語がオッズへ一定倍率を掛けると、対数軸では一定距離だけ移動します。

ステップごとの例

八メールのうち spam 3、ham 5。語彙は 23、spam の token は 12、ham は 20。問い合わせ free money meeting now、α=1 です。

  1. 事前値。 spam:ham は 3:5=0.60:1 で中心より左です。ham が 99% の訓練集合なら最初から ham に強く偏りますが、まだ当該メールの証拠を読んではいません。
  2. free。 spam 3 回、ham 1 回で、ham の例は free coffee in the kitchen。平滑化後は (3+1)/(12+23)=0.1143 と (1+1)/(20+23)=0.0465。比は 2.46、オッズは 1.47:1 です。絶対的な迷惑語ではなく重みを持つ語です。
  3. money。 spam 1、ham 0。0.0571 対 0.0233 で再び 2.46 倍、3.62:1。ham 未観測でも無限の重みにはなりません。
  4. meeting。 spam 0、ham 2。0.0286 対 0.0698 から 0.41 倍で 1.48:1 に戻ります。左への移動は spam への反証です。
  5. now。 spam 2、ham 0。0.0857 対 0.0233、3.69 倍で最終 5.47:1。
  6. 判定。 score(spam)=−12.02 が score(ham)=−13.72 に勝ち spam。正規化後は P(spam|doc)=0.8454。argmax は大小だけでよく、校正は別の検証です。

反復がオッズを増やす

free money meeting now now now に変えると、追加の now 二つが各 3.69 倍を掛けます。5.47:1→74.28:1、モデルの事後確率は 0.8454→0.9867。約 13.6 倍になるのはオッズで、確率や正解率ではありません。

この意図的な反復実験では新しい事実を加えず、同じ方向の寄与を二度追加します。ラベルは spam のままでも確信は強まります。各 now の対数軸上の歩幅は同じです。

相関語、単語とそれを含む bigram、件名と本文の重複でも似た問題が起こります。相関は独立積に証拠を過大評価させ得ますが、順位が常に正しいとも、どんな反復にも情報がないともいえません。順位と校正をともに保留データで評価します。

計算量

段階費用
N 文書、平均 L 語の学習O(NL)、一回の計数
一文書の予測O(|C|L)、各クラス各語の参照と加算
計数表O(|C||V|)、疎な実装も可能

予測費用は訓練文書数には直接依存せず、長さ、クラス数、参照方法で決まります。低コストなベースラインになりますが、速度と精度は実データで測ります。

境界ケース

  • どちらにもない語。 固定語彙の外なので無視します。urgent invoice attached は全て捨てられ、事前値だけで ham 62.5%。メール内容の証拠は使っていません。
  • α=0。 money が ham をゼロ、meeting が spam をゼロにし、両スコアは −∞。二つの積の和がゼロで事後確率 0 / 0 は定義されないため、本課は同点規則でクラスを選ばず、予測を返しません。有限スコアの厳密な同点だけが規則で処理されます。
  • 大きな α。 α=5 は各クラスに 115 の擬似カウントを加え、実際の 12 と 20 を上回ります。オッズは 5.47:1→1.23:1 へ縮みます。
  • 厳密な同点。 アルファベット順で ham。実装でも順序を明示し、辞書の挿入順へ無意識に任せません。
  • 繰り返す語。 多項 NB は now 三つを三回数えます。Bernoulli NB は有無を使い、通常は未出現特徴の項も含むため、重複は追加寄与を持ちません。単なる重複除去版と完全に同じではありません。

よくある間違い

  • 事後値 0.99 を「同種の百メール中 99 が spam」と読む。未校正の独立仮定の値に、その頻度解釈の保証はありません。
  • 分子だけ平滑化する。分母の α|V| を忘れると和が 1 を超え比較が歪みます。
  • 未知語を即席のゼロ計数特徴にする。α/(total_c+α|V|) はクラス間で分母が違い、無意味な入力が token の少ないクラスへ偏らせます。本課は語彙外を無視し、別モデルなら未知語を扱う学習方針が必要です。
  • 長文で生の確率を掛ける。アンダーフローで全クラスがゼロになり得ます。対数和と安定な正規化を使います。
  • 全頻度を重みと思う。money は全体で一回、free は四回でも比率はともに約 2.46。識別力はクラス間の比です。

モデルの選択と限界

多項 NB は頻度、Bernoulli NB は出現の有無、Gaussian NB は連続特徴のクラスごとの正規密度を使います。いずれも条件付き独立を仮定します。短文か長文かだけで決めず検証します。

確率を意思決定に使うなら保留データで点検し、Platt scaling や等張回帰などで校正できます。意図的に冗長な特徴には、ロジスティック回帰など重みを共同で学習する方法が寄与を調整できますが、正則化と検証は必要で、全相関問題を自動解決しません。

簡略化の範囲

計数、確率、スコアは八メールから計算し、表示値を手で埋めてはいません。しかし八メールは実用フィルターではありません。本文、件名、URL、文字 n-gram、TF-IDF、特徴選択、更新や回避攻撃への対応も決める必要があります。語彙が増えても、ゼロ確率、過平滑化、相関した証拠の重複は残ります。