Python tf-Idfを使ってナイーブベイズ分析をやってみる(1)

 

 

はじめに

みなさんこんにちは、ALEXです。今回は、Pyhon応用編として「文書の特徴」を数値で表現するためによく使われている、文書に含まれる単語の重要度を評価する「tf-idf」という概念について。

tf-idfとは

tf-idfとは、Term Frequency(tf)という概念とInverse Document Frequency(idf)という概念を組み合わせたものです。 普段あまり使われることのないような単語が繰り返し出てくるといった場合、文書を分類する際にその単語の重要度を上げてやるという考え方です。

tf(Term Frequency

「単語の出現頻度」を意味します。「各文書の中でどのくらいの頻度でその単語が出現したか」ということを意味しています。以下の式で表されます。

 
 

idf(Inverse Document Frequency)

「逆文書頻度」と呼ば、単語の出現度が低い場合には高い値を、出現度が高い場合には低い値を値を示すものです。 以下の式で表されます。

 

 

logを使うのは文書数の規模に応じて変動する影響を緩和するためです。 右辺に1を足すこともありますが、idfが0になり発散しないようにするためです。

「tf-idf」はこの2つの概念を組み合わせたものなので、以下の式で表されます。

 

これを上記の説明を使うと、以下の式で表されます。

 

という解釈ができます。したがってある単語がよく出現するほど*その単語がレアなほど大きい値を示します。この計算によって、各文書の各単語ごとの特徴を判別する手法です。

tf-idfをナイーブべイズに応用する

ナイーブベイズでは「各クラスでの各単語の出現確率」を利用しますが、「tf-idf」の計算結果に置換することで、文書内の単語の重要度から文書の特徴の判別が可能になります。また、文書・単語の「tf-idf」の計算結果を​要素として持つ行列として扱うことで、文書間の類似度を計算することができ、文書検索などに使用されています。「文書間の類似度」の計算にはコサイン類似度が一番よくつかわれています。コサイン類似度は以下の式で表されます。文書ごとにベクトル形式でデータの内積を計算し正規化し各文書の類似度を測ります。

 

文書ごとにベクトル形式でデータの内積を計算し正規化し各文書の類似度を測ります。

以上で「tf-idf」の説明を終わります。次はこれを使ってPythonでコードを書いてみます。