技術メモ(仮)

IT系の話や研究,他のことなど話して行けたらいいな~って感じです.ただいまJavaを学習中

tf-idf法

前回JavaMeCabを動かせるようにした.
それを用いてTFを算出しようかな考えた.
しかし,そもそもTFってなに?から始まると思う.
主にtf-idf法で用いられる.特徴語を算出する方法.
今回はこのtf値とidf値.すなわちtf-idf法について説明したいと思う.

tf-idf法

tfidf=tf・idf
これで算出できる.
tf値とidf値を掛けるだけ.なんて簡単なんでしょう!!

でも普通の人はtfもidfもわからないと思う.なので分けて説明する.

tf

TF値は言葉通り単語の出現頻度のことである.
以下にTerm Frequencyを求める数式を示す.

 \begin{eqnarray} 
                       tf_{i,j} &=& \frac{n_{i,j}}{\sum_k n_{k,j}}
      \end{eqnarray}
この時のni,jはある単語iの文書jにおける出現回数.分母は文書に出現する単語の総数を示している.
ようは単語の頻度/文章で出現する総単語数
これだけ書かれていてもわけわからないと思う.


例えば以下のような文章があったとする.

りんごが美味しくてたまらない,りんご好き

形態素に分けると全部で8つにこの文章は分けられる.

りんご  名詞,一般,*,*,*,*,りんご,リンゴ,リンゴ
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
美味しく        形容詞,自立,*,*,形容詞・イ段,連用テ接続,美味しい,オイシク,オイシク
て      助詞,接続助詞,*,*,*,*,て,テ,テ
たまらない      形容詞,自立,*,*,形容詞・アウオ段,基本形,たまらない,タマラナイ,タマラナイ
,      記号,読点,*,*,*,*,.,,,,
りんご  名詞,一般,*,*,*,*,りんご,リンゴ,リンゴ
好き    名詞,接尾,形容動詞語幹,*,*,*,好き,スキ,スキ

このTF値は以下の様になる.
りんごは8つの形態素中に2回出現しているので2/8=0.25となる.

りんご:0.25
が:0.125
美味しく:0.125
て:0.125
たまらない:0.125
好き:0.125

今回は全形態素で計算を行ったが普通は名詞だけ用いることがほとんどである.

idf

document frequency(文書頻度)をinverse(逆数)にしたもの.
式にすると以下のようになる.
 \begin{eqnarray}
idf_{i} &=& \log \frac{|D|}{df_{i}}
\end{eqnarray}
Dは総文書数,そしてdfiは単語iが出現する文書の数.
これもこれだけ見ると意味不明な人がいるかもしれない.
idfはようはフィルタリングである.

例えばある文書A,B,Cが存在したとする.
Aには[サッカー:3,選手:2]という単語,Bには[サッカー:5,試合:3],Cは[サッカー:4,スポーツ:2]という単語が出現したとしよう(ある単語:出現回数という見方)
Aはサッカーと言う単語が沢山出現しているのでこれが特徴語に感じる.
しかしBにもCも沢山出現しているためそんなにレアじゃないよね?なら重みを低しようみたいな感じに計算される.
実際に各々サッカーに対するtf-idf値は以下のようになる.

[A]サッカー:tf*idf=3/5*log3/3=0
[B]サッカー:tf*idf=5/8*log3/3=0
[C]サッカー:tf*idf=4/6*log3/3=0

単語:サッカーが出現する文書数は3,そして総文書数も3である.
なのでいくらtfが高かろうと全部の文書に出てきたら全然特徴語じゃない!!なのでサッカーは上記のように0になる.

まとめ

今回はtf-idf法の算出の仕方.
そしてtfとは?idfとはについて説明した.
おかしなところがあればコメントいただけるとありがたいです.

以上

余談

最近,tf-idf法を用いてtwitterデータの分析を行いました.
興味のある方は御覧ください.fuji-151a.hatenablog.com