TF-IDF

TF-IDFについて

いくつかの文書が与えられたとき、文書中の単語の重みを決める手法の一つ。

TF(Term Frequency, 文書中の単語出現頻度)
  • 「よくでてくる単語はその文書の主題を表しやすい」
  • ある文書dに単語tがでてきた個数をtf(t,d)と定める

tfの定義として、個数nをそのまま用いてしまうと文書サイズが大きいほどnも大きくなってしまうことがある。
なので、文書中のすべての単語数で割って正規化したものをtfとして定義するのがいいかも。
tf(t,d) = \frac{n_{t,d}}{\sum_{k}{n_{k,d}}}

IDF(Inverse Document Frequency, 単語が出現する文書数の逆数)
  • 「どんな文書にもよくでてくる単語は、あんまり重要じゃない」
  • 単語tがでてくる文書数をdf(t)とし、全文書数をNとしたとき、以下の式で決まる

idf(t)=log \frac{N}{df(t)}+1

TF-IDF

上記の2つを組み合わせたもの。
ある文書dに出現する単語tの重みを以下のように定義。
w_{d,t}=tf(t,d) \cdot idf(t)

Okapi BM25

http://en.wikipedia.org/wiki/Okapi_BM25
http://unicorn.ike.tottori-u.ac.jp/2010/s072034/paper/graduation-thesis/node9.html
http://gihyo.jp/dev/serial/01/search-engine/0008

TF-IDFの変形?のものに、Okapi BM25という類似度計算手法がある。
情報検索において、クエリQ(=q_1,...,q_n)といくつかの文書Dが与えられたとき、クエリに対する類似度scoreを以下の式で計算する。
score(D,Q)=\sum_{q \in Q}{IDF(q_i) \cdot \frac{tf(q_i,D) \cdot (k_1+1)}{tf(q_i,D)+k_1 \cdot (1-b+b \cdot \frac{|D|}{avgdl})}}
idf(q_i)=log \frac{N-n(q_i)+0.5}{n(q_i)+0.5}

  • tf(q_i,D) : ある文書Dでのq_iの単語頻度
  • |D| : ある文書Dの単語の総数(文書長)
  • avgdl : 全てのDの文書長の平均
  • k_1, b : パラメータ(wikipediaには、一般にk_1=2.0, b=0.75が用いられると書いてある、要出典)
  • N : 全文書数
  • n(q_i) : 単語q_iを含む文書数


このscoreによるランキングを使って検索エンジンなどの結果を並び替えたりする。
他の代表的な類似度指標として、コサイン類似度など。

(追記9/19)
BM25の導出など
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.156.5282&rep=rep1&type=pdf