前回に引き続き、2週目のメモです。
【受講メモ】Natural Language Processing with Classification and Vector Spaces Week1
Week2 : Sentiment Analysis with Naive Bayes
2週目の内容は、1週目でやったのと同じ問題設定(ツイートのポジネが判定)を、ナイーブベイズで取り組みましょうという内容でした。
レクチャービデオの内容は、ほぼナイーブベイズの説明でした。
雑多メモ
・ナイーブベイズはハイパーパラメータを持たず、テキスト分類のベースラインのモデルとして最適
・特徴間が独立であることを仮定している。Aという単語がでるときに、同一文章内でBという単語も出やすい、というようなケースは想定されていない。
・出現頻度を元にしているので、皮肉や婉曲表現には対応できない。「大変かわいらしいお子様ですね(皮肉)」はネガティブな意味合いで使われてても、ナイーブベイズはおそらくポジティブと判定する。
・単語の前処理で取り除く単語が、ポジネガ判定に重要なものである可能性もある( 🙁 など)
・文章における単語の順番も重要な意味をもつが、考慮できていない。
ナイーブベイズの仕組み

- w は word の w
ツイート単位で、単語の出現頻度を元にこの値を計算し、1 より大きければ positive, ちいさければ negative と判断する。
前半は、posツイートとnegツイートの数が不均衡な場合に対応できるようにつけないとだめ。
後者は、尤度の掛け算。positive であればあるほど、無限大に大きくなり、negative であればあるほど、0に近くなる。ニュートラルだと1。
ただし、掛け算を繰り返していくので、このまま計算するとアンダーフロー(値が小さくなりすぎてコンピュータが計算できなくなる)現象が発生しうるので、対数をとって計算する。

対数尤度は positive であればあるほど、∞になり、negative であるほど -∞ になり、ニュートラルだと 0 となる。
なので、この値が 0 より大きいか小さいかで、ポジネがを判別することになる。
プログラミング課題は、ナイーブベイズの実装が主で、前処理から一連の流れをノートブック上で行う。
実装の際には、 p(w | pos) などで、頻度が 0 で計算ができない問題に対応するための、Laplacian Smoothing も行う。(分母と分子に定数を足す)