やってみよう

左のテキストを書き換えると(1行が1文書)、TF-IDF 行列がすぐに作り直されます。値が大きいセルほど濃く塗られ、各文書でいちばん高い語には枠が付きます。ポイントは 2 つ。TF(その文書での出現割合)が高くても、IDF(レア度)が低ければ重みは伸びません。「です」「は」のように全文書に出る語は \(\text{IDF} = 0\) になり、TF-IDF も 0 になります。文書を足し引きすると IDF が動くことも確かめてみてください。

TF-IDF 行列(文書 × 語彙)

各文書の「らしさ」トップ3

文書数 \(N\)
–
語彙数
–
IDF(レア度・大きい順)
定義式(講義第11回)
\[\text{TF}(t, d) = \frac{\text{文書 } d \text{ に } t \text{ が出た回数}}{\text{文書 } d \text{ の総単語数}}\] \[\text{IDF}(t) = \log \frac{\text{全文書数 } N}{t \text{ を含む文書数 } \text{df}}\] \[\text{TF-IDF}(t, d) = \text{TF}(t, d) \times \text{IDF}(t)\]

log は自然対数です。

「私 vs 動物」の例では \(\text{IDF}(\text{私}) \approx 0.4055\)(3文書中2文書に出現)、\(\text{IDF}(\text{動物}) \approx 1.0986\)(3文書中1文書だけ)となり、レアな「動物」が重く扱われます。なお scikit-learn の TfidfVectorizer は IDF の平滑化と L2 正規化を行うため、ここで示す素朴な定義とは数値が異なります。