tfidfについて

授業でtfidfを勉強してちょっと分かりづらかったのでまとめておく。

tfidfとは?

情報検索で使うアルゴリズムの一つ。
それぞれの単語に重みをつけて、クエリーから文書をベクトル空間で表し
文書とクエリーの類似度でランク付けを行う。
その値が高いほど重要。

tfidf = w = tf・idf

w:重みということ。

tfとは?

Term frequency(単語出現頻度)
同じ文書に何回も現れる単語ほど検索の有力な手がかり。
つまり一つの文書の中に多く書かれてる単語を探すってことか。

f =frequency of term in a document
単語が一つの文書で出現する頻度


つまりブラウザ上で
Ctrl-Fとか使ってある単語を検索したときに、ヒットする数


tf = f/max(f) = 単語の頻度/文章で出現する単語の中で一番多い単語の数
修正(2009 1/6) tf = f/max(f) = 単語の頻度/文章で出現する総単語数
(yukobaさん ありがとうございます!)

idfとは?

Inverse document frequency(逆文書出現頻度)
色々な文書に書かれている単語は検索の有力な手がかりにならない。
つまり差別化できないから、その単語は低めに扱うよってことか。

df = number of documents containing term i
単語iがどれだけの文書で現れるか。

idf = inverse doument frequency of term i
= log_2(N/df)
N:総文書数。

これは検索エンジンに当てはめると
df = 検索したときのヒットページ数
idf = log_2(検索エンジンの総ドキュメント数/df)

結局tf-idfの式は

w = tfidf = tf・log_2(N/df)

ベクトル空間モデルを使ってクエリーと文書の類似度を求める

ベクトル空間はいまだによく分からず・・orz
とりあえず流れだけを書いておく。

文書ベクトルD クエリーベクトルQ

ベクトル D = (w1,w2...wn) =(索引語1の重み(tfidf値),索引語2の重み.....索引語3の重み)
クエリーも同様

類似度はsim(D,Q)と表す。

sim(D,Q) = D・Q(内積。はてなでシグマって出せないのかな・・)

simの値の大きい順に文書を並び替える。

Cosineで表す方法もある。


まとめ

  • tfidfとは
    • 情報検索等に使われるアルゴリズム。
  • tfとは
    • ある単語が一つの文書にどのくらい出現するか。多ければ多いほどよい!という考え方
  • idfとは
    • ある単語がどのくらいの数の文書に出現するか。多いほど重要でない!という考え方
  • tfとidfの内積で各単語の重みを決定。
  • ベクトル空間モデルとは
    • クエリーに対して、単語の重みを用いてベクトルを作成。
    • それぞれの類似度を内積(or コサイン)を用いて計算し、ランク付けする。

と書いてみたはいいもの、実際計算すると間違ってる気がするんだよなー。
どこだろ・・