7
3

More than 5 years have passed since last update.

文書群におけるIDFの算出時には対数の底を1.5前後にするといい感じになった

Last updated at Posted at 2016-07-20

TF-IDF cos類似度を利用したコンテンツベースのレコメンドエンジンを開発しようとしているのですが、素人ゆえになかなか上手く事が運びません。

今日はIDFの算出で四苦八苦しました。ちなみに今回は、 "評価対象の文書群 = IDF算出に用いる文書群" です。IDF算出は基本的に以下と式としています。

# Nは全文書数。nは特定の単語が出現する文書数。
idf = log(N/n) + 1

最初は何も考えずに、対数の底をe(自然対数の底)として計算しました。しかし・・・

底がeだとレアワードの重みづけが不十分

文書群の中でごくごく僅かな数の文書中でしか出現しない単語は、十分大きな重みづけがなされるべきです。ですが、底がe(自然対数の底)だと、他の単語と比較して十分な差が出にくいです。希少な単語を特徴として含む文章をクエリとして、類似度の高い文書を選出させた際に、納得のいく結果が得られませんでした。

底を1.5前後にするといい感じに!

ケースバイケースだとは思いますが、自分が扱っている文書群(約4万)の場合だと、IDF算出時の底を1.5前後にすると、理想に近い結果が得られました。まだまだ試行錯誤が必要ですが・・・

おまけ:Rubyで対数の底を指定する場合

Math.log は第二引数で底を指定することができます。

# nは単語の出現回数
idf = Math.log(n, 1.5)
7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3