類似度推定
方法論

TF-IDF Cos類似度推定法

More than 3 years have passed since last update.


TF-IDF Cos類似度推定法

TF-IDF Cos類似度推定法は文書の類似度を計算するのによく使われている方法です。大きく分けて、


  • TF-IDFの計算

  • Cos類似度の計算

の二つのステップに分かれます。


TF-IDFの計算

TF-IDFは名前の通り、TFとIDFの積を表しています。ある単語のTF-IDFがその単語の重要度になります。


TF

TFは対象の文章の中でどれだけその単語が重要かを表す指標です。現れる単語数をN, その単語の出現回数をnとすると

TF = n/N

で表されます。

端的に言うと、繰り返し出現している単語が大事ということです。


IDF

IDFはその単語自体がどれだけ特徴的な言葉かを表す値です。

例えば、「する」や「なる」などは多くの文章に含まれる単語なので重要度は低く、「爆発」や「破壊」などは滅多に使うことのない言葉なので、重要度が高いということです。

全体でD個の文章を持ったデータベースがあるとして、そのうち、対象の単語を含む文章がd個あったとき、IDFは以下の式で表されます。

IDF = -log(d/D)

ここで、d/Dは対象の単語が使われている文章の割合で、0〜1の範囲のものです。全ての文章に含まれている単語(割合=1)のとき、重要度はないので、IDF=0になり、一つも含まれていない単語(割合=0)とときは無限大になります。情報理論の知見がある人には、単語の情報量といったら分かりやすいかもしれません。

降水確率100%で雨が降っても普通のことですが、降水確率0%のときに雨が降ったらすごく驚く、みたいな感じの話です。


Cos類似度の計算

ベクトルv1, v2の内積は

v1・v2= |v1||v2|cosθ

で表されます。

二つのベクトルが同じ方向を向いていたときはcosθ=1, 反対方向を向いていたときはcosθ=-1になるので、これを類似度の指標として使おうという考え方です。

文章の類似度は単語の出現頻度の列で表されます。

例えば、次の二つの文章があるとします。


  • 「リンゴとみかん、みかんとバナナ」という文章A

  • 「リンゴとバナナ、バナナとキウイ」という文章B

これらをそれぞれ文章に表すと

A: (リンゴ, みかん, バナナ, キウイ) = (1, 2, 1, 0)

B: (リンゴ, みかん, バナナ, キウイ) = (1, 0, 2, 1)

というベクトルになります。

この二つのベクトルの類似度を求めると

A・B = 1*1 + 2*0 + 1*2 + 0*1 = 3

|A| = sqrt(1*1 + 2*2 + 1*1 + 0*0) = sqrt(6)
|B| = sqrt(1*1 + 0*0 + 2*2 + 1*1) = sqrt(6)

となり、

cosθ = A・B/|A||B| = 3/sqrt(6)sqrt(6) = 3/6 = 0.5

となるので、類似度は0.5となります。


TF-IDF Cos類似度推定法

TF-IDF Cos類似度推定法ではCos類似度の計算方法に使うベクトルの成分をTF-IDFにしたものです。

例えば、さっきの例では、リンゴ、

TF(A,リンゴ) = 1/4, TF(A,みかん) = 2/4, TF(A,バナナ) = 1/4, TF(A,キウイ) = 0

TF(B,リンゴ) = 1/4, TF(B,みかん) = 0, TF(B,バナナ) = 2/4, TF(B,キウイ) = 1/4

それぞれのIDFを

仮に、IDF(リンゴ) = 10, IDF(みかん) = 5, IDF(バナナ) = 3, IDF(キウイ) = 1とすると、TF-IDFのベクトルは

A: (リンゴ, みかん, バナナ, キウイ)=(1/4*10, 2/4*5, 1/4*3, 0*1) = (2.5, 2.5, 0.75, 0)

B: (リンゴ, みかん, バナナ, キウイ)=(1/4*10, 0*5, 2/4*3, 1/4*1) = (2.5, 0, 1.5, 0.25)

あとはさっきと同じようにcosθを計算するだけです。

A・B = 2.5*2.5 + 2.5*0 + 0.75*1.5 + 0*0.25 = 7.375

|A| = 3.614, |B| = 2.926

cosθ = 0.6974

となって、0.6974という類似度が算出されます。