LoginSignup
7
4

More than 5 years have passed since last update.

Webテキスト解析のRubyのGem作った (tf-idfとは?編)

Last updated at Posted at 2016-05-04

開発合宿で作ってみて楽しかったので記事化
社会人はアウトプットが大事ってどっかの偉い人が言ってたし。。。
Gemの使い方は長くなるので別記事へ
GEMのGithubレポジトリ

tf-idfとは??

もうすでに有名かと思われるが一応説明。
知ってる人は飛ばしてください!!

TF

Term Frequencyの頭文字をとったもの

計算式

tf = 単語の頻度 / 文章中の単語数

説明

"たくさん出てくる言葉ほど重要"を数値化するもの

例えば
りんごおいしい。りんご好き。りんご神。

と言う言葉があった場合、6つの単語から成り立つ文書の出てくる単語の回数はそれぞれ
りんご:3, 好き:1, おいしい:1, 神: 1
となる。

よってこのりんごという単語のtfは
3("りんご"が文章中に出てくる回数) / 6(文章中の単語数)
となり、tfは0.5となる。

また同様に神という単語のtfは
1 / 6 なので 0.166… である。

IDF

Inverse Document Frequencyの頭文字をとったもの

計算式

  • idf = log(文章数 / その単語が出てくる文章数)

説明

よく使われる単語は重要ではないと判断するためのもの。
"こと"とか"もの"って重要な単語じゃないからそれを重要語から除くためにある

例えば

【文章1】りんごおいしい。りんご好き。マジりんご大好き。
【文章2】みかんも好き。おいしいよね。
【文章3】なしは普通。おいしいけどね。

という3つの文章があった場合、りんごという言葉の出てくる文章は1つしかない。一方好きという単語の出てくる回数は3である。

つまりりんごという単語の出てくる文章は1、おいしいという単語の出てくる文書は3であるので
りんごという単語のidfは
log(3 / 1) = 0.477
であり、"おいしい"のidfは
log(3 / 3) = 0

となる。

tf-idf

tfとidfが計算できたのであとはこれをかけるだけ。
【文章1】りんごおいしい。りんご好き。マジりんご大好き。
【文章2】みかんも好き。おいしいよね。
【文章3】なしは普通。おいしいけどね。

こういう文章が出てきた際に重要語を抽出しようとすると
りんごという単語は
tf-idf(0.2385) = tf(0.5) * idf(0.477)
となる。

他の単語も調べてみたい人はGem使ってね(゚∀゚)

まとめ

用語

tf = Term Frequency
idf = Inverse Document Frequency

計算式

  • tf-idf = tf * idf
  • tf = 単語の頻度 / 文章中の単語数
  • idf = log(文章数 / その単語が出てくる文章数)

雑感

tfとかidfは分子や分母に文章数の単語数を取るので、同じ程度の分量の文章じゃないと比較できない? のかと思った
例えば

りんごおいしい。という文章と
りんごおいしい。りんご好き。マジりんご神という文章ではtf等しいけど下の文章の方が長い文章で何度もりんごが出てきているのだからより重要なのでは。。。

標準化する仕組みが必要なんじゃないかな
詳しい人コメントください。。。

7
4
2

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
4