スパムメールの判定にナイーブベイズが使われてたって聞いた
でも「単語どうしは独立」って仮定するらしい。「無料」と「今すぐ」なんか一緒に出やすいに決まってるやん
【疑問】単語どうしは独立って、明らかに嘘の仮定やん。なんでナイーブベイズでスパムが当たるん?【AI】
>>1
正確には「スパムかどうかが分かれば、単語どうしは独立」という、クラスのもとでの条件付き独立の仮定
その仮定を置くと、メールの単語の確率が単語ごとのかけ算に分かれる
>>2
数字でやってみて
>>3
スパムが全体の40%とする。「無料」が入る割合はスパムで0.5、ふつうのメールで0.05。「会議」が入る割合はスパムで0.1、ふつうで0.4
「無料」が入っていて「会議」が入っていないメールなら
割合にすると でスパム
>>4
両方入ってたら?
>>5
スパム 、ふつう で、スパムの確率は約0.63
「会議」が入ると、スパムらしさが下がる
>>6
で、仮定が嘘やのに当たるのはなんでなん
>>7
分類で必要なのは「どっちのクラスの確率が大きいか」だけで、確率の値そのものが正確である必要はない
「無料」と「今すぐ」が一緒に出ると、同じ証拠を2回数えて確率は極端になる。でも両方スパム寄りの単語なら、どっちが大きいかの順番は変わりにくい
>>8
それって都合のいい話に聞こえる
>>9
理論的にも調べられてて、0か1かで当たり外れを数える損失のもとでは、独立の仮定が大きく崩れていても最適な分類になる場合が広くある、と示した研究がある(Domingos & Pazzani, 1997)
ただ、確率の値は極端に出やすいから、「スパムの確率0.999」をそのまま信じるのは危ない
>>10
確率の数字は信用できんってことか
>>11
そう。確率をそのまま使うなら、較正をし直すのが筋
順番だけ使う分類と、確率の値まで使う判断とで、求められるものが違う
学習データに一度も出てこなかった単語はどうなるん
>>13
そのままやと確率0になって、かけ算全体が0になる。1語のせいで、他の証拠が全部消える
よく使うのは、数えた回数に1を足してから割る方法(ラプラス・スムージング)。スパム200通で一度も出てない語なら、たとえば
かけ算を何百回もやったら、数が小さくなりすぎん?
>>15
なる。0.01を100回かけると で、計算機の扱える範囲を下回ることがある
だから対数をとって、かけ算を足し算にして比べる。順番は対数をとっても変わらない
今どきは大きい言語モデルで分類すればええやん。ナイーブベイズを勉強する意味ある?
>>17
精度だけなら大きいモデルが勝つ場面は多い
でもナイーブベイズは、学習が単語を数えるだけで一瞬で終わり、データが少なくても動いて、どの単語が効いたかも読める。比べるときの基準のモデルとして今でもよく使われる
管理人のひとこと
- ナイーブベイズは「クラスが分かれば特徴どうしは独立」と仮定し、事前確率×単語ごとの確率のかけ算でクラスを比べる。例では「無料」あり・「会議」なしで約0.91、両方ありで約0.63がスパム。
- 仮定が崩れていても、分類はクラスの大小の順番だけで決まるので当たることが多い。ただし確率の値は極端に出やすく、そのまま使うなら較正が要る。
- 出てこなかった単語はラプラス・スムージング( など)で0を避け、かけ算は対数の足し算で計算する。