【受講メモ】Natural Language Processing with Classification and Vector Spaces Week2

前回に引き続き、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 も行う。(分母と分子に定数を足す)