namazu-ml(avocado)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

tfidf (Re: current problems of Namazu)



 Date: Mon, 26 Jan 1998 02:51:26 JST
 From: Satoru Takabayashi <ccsatoru@xxxxxxxxxxxxxxxxxx>
 Subject: [namazu:00008] Re: current problems of Namazu

 > >・スコアリングを tf・idf 値にできないか?
 > うーん、私自身が正しく tf・idf 法を理解しているかアヤシイので誤解
 > しているかもしれませんが、 

 > tf は単語の出現回数をそのまま使えばいいんですよね。

そうです。
# tf は Term Frequency の略です。

 > で、idf を求めるにはそのキーワードを含むファイルの数を
 > 全文書数で割ってそれの対数をとると。

逆です。idf = log(N/n) で、N は全文書数、n がそのキーワードを含む
ファイル数です。そうすると idf >= 0 になります。
# idf は Inverse Document Frequency の略です。

つまり、文書数Nの文書群において、あるキーワードが多くの文書中に現
れる普遍的なキーワードだった場合には idf は小さくなり、逆に、特定
の文書にしか現れない場合には idf は大きくなります。

ちなみにこの定義だと、全文書に含まれるキーワード(i.e. N = n)の場合
は idf = 0 になるので、tf・idf は 0 になってしまいます。これを避け
るため、idf = 1 + log(N/n) (これなら idf >= 1)と定義する場合もあり
ます。というか、実際にはこちらが一般的でしょう。
# 足し合わせるのが1でなくて0.5などの場合もあり得るでしょうが。


要するに idf は重みづけに当たるわけですが、log() の底を変えれば 
idf の変化の割合も変わってくるので底の値は重要です。で、底としては 
2 を取るのが一般的でしょう。これだと N=1000, n=1 (あるいは N=10^6,
n=10^3 など)の場合、idf はだいたい 11 ですから、まあ無難な値です。

0.1%の文書にしかヒットがないんだったら 11 倍程度の重みを付けてやっ
てもいいとおもいます。


 > そういうことならインデックスはそのままで検索時に計算してあげればい
 > いわけですよね。それならなんとかなりそうです。

N と tf はすぐわかるのですが、n がコストをかけずにすぐにわかるのか
な?とおもったのです。ちょろっと見ただけではアレだったのですが、わ
かるのなら導入しても良いかとおもいます。

といっても、tf・idf を導入して意味があるのは、複数キーワードで検索
する場合に限られることには注意しておく必要があるでしょう。


 > ただその計算に少し時
 > 間がかかってしまうかもしれません。コンパイル時に選べるようにしよう
 > と思います (または namazu.conf などで指定かな)。

はい、それで良いとおもいます。
--
馬場  肇 ( Hajime BABA )            E-mail: baba@xxxxxxxxxxxxxxxxxxxxxx
京都大学理学部宇宙物理学教室 博士課程一回生
--