Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

TF-IDF

TF-IDF

今日も、機械学習やその他色々について得た知識を
復習and記事作成の練習and個人の備忘録としてまとめていきます!

今回は、TF-IDFという自然言語処理の分野でよく使われる手法について説明します!

⚠︎※※注意※※⚠︎

・出来るだけ専門知識のあまりない人に対して、分かりやすく書くことを目標にしています。
 そのため、厳密に言うと間違っている部分があると思いますがご容赦ください。

・また、ネットで調べたレベルの知識がほとんどなので、
 "厳密に言うと"レベルではなく間違っている箇所があるかもしれません。。
 その場合は非常に申し訳ないです。指摘していただけると幸いです!

参考サイト

TF-IDFで文書内の単語の重み付け

前回までの記事

機械学習について
教師あり学習 〜回帰〜
教師あり学習 〜分類〜
Random Forest
階層型クラスタリング
非階層型クラスタリング k-means
主成分分析

TF-IDFとは

TF-IDFとは、Term Frequency(TF)と、Inverse Document Frequency(IDF)のことです。

文書の中から、その文書の特徴語を抽出する時に使う値です。

いくつかの文書があったときに、それらに出てくる単語とその頻度(Frequency)から、
ある文書にとって重要な単語はなんなのかというのを数値化します。

TF

TFは、単語の文書内の出現頻度です。
ある文書中に出現する頻度が多ければ多いほど、その単語は重要である可能性が高い!というわけです。

\textrm{tf}(t,d) = \frac{n_{t,d}}{\sum_{s \in d}n_{s,d}}

$\textrm{tf}(t,d)$ : 文書 $d$ 内のある単語 $t$ のTF値

$n_{t,d}$ : ある単語 $t$ の文書 $d$ 内での出現回数

$\sum_{s \in d}n_{s,d}$ : 文書 $d$ 内のすべての単語の出現回数の和

IDF

IDFは、ある単語が出てくる文書頻度の逆数です。
多くの文書中に登場する単語は、一つの文書の特徴語にはなりにくいというわけです。

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

$\textrm{idf}(t)$ : ある単語 $t$ のIDF値

$N$ : 全文書数

$df(t)$ : ある単語 $t$ が出現する文書の数

対数をとっているのは、文書数の規模が大きくなっても値があまり変化しないようにするためです。
また、1を足しているのは、全文書に登場する単語のTF-IDFが強制的に0になってしまうのを防ぐためです。

これらTFとIDFをかけあわせることによって、ある文書において、

その文書内での出現回数が多い(TFの値が大きい) かつ、
他の文書であまり出てこない(DFの値が小さい=IDFの値が大きい) 

という単語ほど、値が大きくなり、その文書を特徴付ける単語を抽出できるというわけです。

実際に計算してみましょう。

[文書A] スポーツ 野球 野球 バット
[文書B] サッカー サッカー サッカー スポーツ ゴール

という二文書があったとします。
たった二文書ですし簡易にするため、今回IDFは、

$\textrm{idf}(t) = \log{\frac{N}{df(t)}} + 1$ ではなく、 $\textrm{idf}(t) = \frac{N}{df(t)}$として考えます。

$\textrm{tf}(スポーツ,文書A)$ * $\textrm{idf}(スポーツ)$ = 0.25 * 1 = 0.25
$\textrm{tf}(野球,文書A)$ * $\textrm{idf}(野球)$ = 0.5 * 2 = 1.0
$\textrm{tf}(バット,文書A)$ * $\textrm{idf}(バット)$ = 0.25 * 2 = 0.5

$\textrm{tf}(サッカー,文書B)$ * $\textrm{idf}(サッカー)$ = 0.6 * 2 = 1.2
$\textrm{tf}(スポーツ,文書B)$ * $\textrm{idf}(スポーツ)$ = 0.2 * 1 = 0.2
$\textrm{tf}(ゴール,文書B)$ * $\textrm{idf}(ゴール)$ = 0.2 * 2 = 0.4

両方の文書に登場している「スポーツ」という単語のスコアは小さく、
自文書にしか登場しない、かつ出現回数の多い「野球」や「サッカー」といった単語のスコアが高くなっていることがわかります。

まとめ

・TF-IDFは、その文書の特徴語を抽出する時に使う値。

・TFは、Term Frequencyで文書内の出現回数。一つの文書内で出現する回数が多ければ重要である可能性が高い!

・IDFは、Inversed Document Frequencyで単語の出現文書数。多くの文書に出現している単語は重要である可能性が低い!

あとがき

シンプルかつ理にかなっている!僕はTF-IDFはなんだか結構好きです。笑

もちろん、文書の特徴語ってだけでなく、文書をカテゴリに分類した後に、カテゴリの特徴語みたいなのも同じく抽出できます!

ここまで読んでいただき、ありがとうございました!

AwaJ
データサイエンティストを目指すただの人
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away