Tf-idf
情報検索の分野において、tf–idf (または、 TF*IDF、TFIDF、TF–IDF、Tf–idf)は、term frequency–inverse document frequencyの略であり、コーパスや収集された文書群において、ある単語がいかに重要なのかを反映させることを意図した統計量(数値)である。また、tf-idfは情報検索や、テキストマイニング、ユーザーモデリングにおける重み係数にもよく用いられる。ある単語のtf-idfの値は文書内におけるその単語の出現回数に比例して増加し、また、その単語を含むコーパス内の文書数によってその増加が相殺される。この性質は、一般にいくつかの単語はより出現しやすいという事実をうまく調整することに役立っている。今日、tf-idfはもっとも有名な語の重みづけ(term-weighting)手法である。2015年に行われた研究では、電子図書館におけるテキストベースのレコメンダシステムのうち83%がtf-idfを利用していたことがわかった。
tf-idfの重み付け手法を変形したものは、ユーザーのクエリ(検索ワード)から文書の適合性を得点化し、順位づけする際の中心的なツールとして、よく検索エンジンで用いられている。tf-idfは、自動要約や文書分類といった様々な分野において、ストップワードによるフィルタリングを行うことでうまく動作できる。
最もシンプルな順位付け関数の一つは、クエリに含まれる語ごとのtf-idfの和を計算することで実装される。たくさんのより洗練された順位付け関数はこのシンプルなモデルの変形となっている。
英語文書の集合を扱っていると仮定し、それらを"the brown cow"というクエリにより関連する順に並べたいとする。問題に取り掛かる上で、シンプルな方法は、"the"、"brown"、"cow"の3つの単語のすべてを含まない文書を除くことであるが、これではたくさん文書がまだ残ってしまう。さらにそれらを区別するために、もしかすると各文書で各単語が何度出現しているかを数えるかもしれない。ある文書内にある単語が何回出現したかという数をその単語のterm frequencyと呼ぶ。しかし、文書の長さにばらつきがある場合、調整が必要となることが多い(詳細は定義を参照)。最初の語の重み付け手法はHans Peter Luhn(1957)により、その内容は以下のようにまとめられうる。
"the"という語が非常に普遍であるために、より意味のある単語である"brown"や"cow"に十分な重みを与えず、term frequencyは、"the"という語をより高頻度に含む文書を誤って強調してしまう傾向がある。"the"という語は、普遍的ではない"brown"や"cow"という語とは異なり、文書や単語がクエリに関連している・関連していないと区別するためのキーワードとしてよいものではない。それゆえに、文書集合において非常に出現頻度の高い語の重みを減らし、珍しい語の重みを増加させるため、inverse document frequencyが用いられている。
Karen Spärck Jones(1972) はInverse Document Frequency (idf) と呼ばれる単語の特異性の統計的解釈を考案し、その考えは単語の重み付けの基礎概念となっている。
tf-idfは2つの統計量、term frequency (tf)と、inverse document frequency (idf) の積である。双方の統計量には、厳密な値を決定するために様々な手法が存在している。
式は、文書やWebページにおけるキーワードやフレーズの重要性を定義することを目的とする。
term frequency (tf) は文書dの中での、語tの相対度数である。 \mathrm{tf}(t,d) = \frac{f_{t,d}\sum_{t' \in d}{f_{t',d},
ft,dは文書に含まれるその語の出現頻度(raw count)である。すなわち、語tが文書dに何回出現したかを意味する。単純には、分母には文書dに含まれる単語数を用いる(この場合、同じ単語が複数出現しても区別して数える)。tf(t,d)の定義は他にも様々なものがある。
ブール代数に基づく「頻度」(binary): tがdに存在すれば、 tf(t,d) = 1、 それ以外の場合はtf(t,d) = 0;
出現頻度をそのまま用いる(raw count): tf(t,d) = ft,d;
文書の長さを調整するもの(term frequency, 上式と同じ): tf(t,d) = ft,d ÷ (dに含まれる単語数);
対数スケールの頻度(log normalization): tf(t,d) = log (1 + ft,d);
長い文書に偏ることを防ぐために、拡張された頻度。例えば、ある語の出現回数が、文書内で最も出現頻度が高い語の出現回数で除算されるようにされているものなど。
\mathrm{tf}(t,d) = 0.5 + 0.5 \cdot  \frac{f_{t, d}{\max\{f_{t', d}:t' \in d\} (double normalization 0.5)
inverse document frequency (idf) はその単語がどのくらい情報を提供するのかという指標である。すなわち、ある単語が、すべての文書の中で普遍的なのか珍しいのかということである。idfは、その単語の文書頻度の逆数を対数スケールにしたものである。(文書の総数をその単語を含む文書の数で除算し、その商の対数を取ったものとして得られる。)
\mathrm{idf}(t, D) =  \log \frac{N}
この時、
N: コーパスに含まれる文書の総数 N =
|\{d \in D: t \in d\}|  : 単語 t が出現する文書の数 (すなわち、  \mathrm{tf}(t,d) \neq 0でなくてはならない)。 もしその語がコーパスに存在しない場合、これはゼロ除算を招く。それゆえに、分母を1 + |\{d \in D: t \in d\}|と調整するのが一般的である。
ここで、tf-idfは次のように計算される。
\mathrm{tfidf}(t,d,D) = \mathrm{tf}(t,d) \cdot \mathrm{idf}(t, D)
tf-idfの重みが高くなるのは、(与えられた文書内で)その単語の単語頻度(term frequency, tf)が高く、かつ、文書集合全体においてその単語の文書頻度(document frequency, df)が低い場合である。それゆえに、重みは普遍的な語をフィルタする傾向がある。idfの対数内の分数は常に1以上となるため、idf(とtf-idf)の値は常に0以上になる。単語がより多くの文書に現れる場合、対数の中の分数は1に近づき、それゆえにidfとtf-idfは0に近づく。
idfは1972年のKaren Spärck Jonesの論文によって「単語の特異性」として導入された。idfはヒューリスティクスでうまくいくとされてきたにもかかわらず、その論理的な基礎は少なくとも30年以上悩みの種となっており、多くの研究者が情報理論的な正当化を試み続けている。
Spärck Jonesは自身の説明の中で、ジップの法則を別にして、十分な理論を提供していない。与えられた文書dが語tを含む確率を、相対文書頻度として推定することによって、idfを確率論的基盤に置こうとする試みが行われてきている。
P(t|D) = \frac{N},
idfを次のように定義すると、
\begin{align}
\mathrm{idf} & = -\log P(t|D) \\
& = \log \frac{1}{P(t|D)} \\
& = \log \frac{N}
\end{align}
つまり、逆文書頻度は対数を取った「逆」相対文書頻度となる。
また、この確率論的解釈は自己情報量と同じ形を取る。しかし、そのような情報理論的概念を情報検索の問題に応用すると、必要な確率分布に適切な確率空間を定義する際、文書だけでなく、クエリや単語を考慮する必要があるため、問題が生ずる。
term frequency (tf) とinverse document frequency (idf) の両者は情報理論の観点から定式化されうる。この考えは、なぜそれらの積が文書の結合情報量の観点から意味があるのかを理解するのに役立つ。分布p(d,t)に関する特徴的な仮定を以下の示す。
p(d|t) = \frac{1}
この仮定とその意味は、Aizawaによれば、「ヒューリスティックなtf-idfの使われ方を表している。」という。
特定の語tを含む事象を条件として、コーパスDの文書を「ランダムで選択」する条件付きエントロピーは以下のように示される(全文書は等しい確率で選択されると仮定する)。
H({\cal D}|{\cal T}=t)=-\sum_d p_{d|t}\log p_{d|t}=-\log \frac{1}=\log \frac + \log |D|=-\mathrm{idf}(t)+\log |D|
表記に関して、{\cal D}と{\cal T}は「ランダムな変数」であり、文書や単語がそれぞれ選ばれることに相当する。ここで、相互情報量は以下のように表される。
M({\cal T};{\cal D}) = H({\cal D}) - H({\cal D}|{\cal T}) = \sum_t p_t\cdot(H({\cal D}) - H({\cal D}|W=t))=\sum_t p_t \cdot \mathrm{idf}(t)
最後のステップはp_tを展開することであり、文書の(ランダムな)選択に関して、条件と無関係に単語を選択する確率であるから、
M({\cal T};{\cal D})=\sum_{t,d} p_{t|d}\cdot p_d \cdot \mathrm{idf}(t) =  \sum_{t,d} \mathrm{tf}(t,d)\cdot \frac{1}\cdot \mathrm{idf}(t) = \frac{1} \sum_{t,d} \mathrm{tf}(t,d)\cdot \mathrm{idf}(t).
この式は、すべての有効な単語と文書のtf-idfの和は、文書と単語の同時確率分布の特異性のすべてを考慮した、文書と単語の間の相互情報量に立ち戻ることを表している。それゆえに、それぞれのtf-idfは、ある単語と文書のペアに付け足された、「情報のかけら(bit of information)」を意味している。
2つの文書からのみ構成されるコーパスの単語カウント表(右に示す)を扱うと仮定する。
語"this"のtf-idfは以下のように計算される。
出現頻度をそのままtfとして用いる場合、tfはそれぞれの文書の"this"の頻度と同じになる。標準的な文書長を調整するtfでは、各文書において単語"this"は1度現れるが、文書2はより多くの単語を含むため、相対頻度は小さくなる。
\mathrm{tf}(\mathsf{this}, d_{1}) = \frac{1}{5} = 0.2
\mathrm{tf}(\mathsf{this}, d_{2}) = \frac{1}{7} \approx 0.14
idfはコーパス毎の定数であり、"this"という単語を含む文書の比率から成り立っている。この事例では、2つの文書からなるコーパスを扱い、それらはすべて"this"という語を含んでいる。
\mathrm{idf}(\mathsf{this}, D) =  \log \left (\frac{2}{2}  \right ) = 0
つまり、"this"という語のtf-idfはゼロである。これはこの単語がすべての文書に現れることから、その単語が有益でないでないこと示唆している。
\mathrm{tfidf}(\mathsf{this}, d_{1}, D) = 0.2 \times 0 = 0
\mathrm{tfidf}(\mathsf{this}, d_{2}, D) = 0.14 \times 0 = 0
"example"という語はより興味深く――3度現れるが、文書2にしか現れない。
\mathrm{tf}(\mathsf{example}, d_{1}) = \frac{0}{5} = 0
\mathrm{tf}(\mathsf{example}, d_{2}) = \frac{3}{7} \approx 0.429
\mathrm{idf}(\mathsf{example}, D) =  \log \left (\frac{2}{1}  \right ) = 0.301
最終的には,
\mathrm{tfidf}(\mathsf{example}, d_1, D) = \mathrm{tf}(\mathsf{example}, d_1) \times \mathrm{idf}(\mathsf{example}, D) = 0 \times 0.301 = 0
\mathrm{tfidf}(\mathsf{example}, d_2, D) = \mathrm{tf}(\mathsf{example}, d_2) \times \mathrm{idf}(\mathsf{example}, D) = 0.429 \times 0.301 \approx 0.129
(対数は常用対数を用いている。)
tf-idfの背後にある考えは、単語以外の存在にも応用される。1998年にはidfのコンセプトが引用分析に応用された。筆者は「もし非常に珍しい引用が2つの文書によって共有されたならば、その引用された文書はたくさんの文書によって引用されている文書よりもより高く重み付けされるべきである。」と主張した。加えて、動画や内における物体マッチングを行うための「Visual Word」や全文検索にもtf-idfは応用されている。しかし、tf-idfのコンセプトは、すべての手法において、単純な(idf成分を除いた)tfのみの手法よりも効果的であるという証明はされていない。tf-idfを引用分析に応用する際には、研究者はidf重みをもたない単純な引用回数重みを超える精度向上を確認することができなかった。
多数の単語重み付け手法はtf-idfからの派生である。そのうちの一つはTF-PDF (term frequency * proportional document frequency) である。TF-PDFは2001年にメディアにおける新たなトピックを特定するという文脈で導入された。PDF成分は異なるドメインの中でどのくらいの頻度である単語が出現したかの差を測定する。他の派生にはTF-IDuFがある。TF-IDuFでは、idfは文書コーパスに基づき計算されず、検索または推薦される。例えば、idfはユーザの個人的な文書コレクションに基づいて計算される。その著者らはTF-IDuFはtf-idfと等しく効果的であるが、例えば、ユーザーモデリングシステムにおいて、外部の文書コーパスにアクセスできない時などに、応用可能であると報告している。
Gensimはベクトル空間モデルとtf-idf重み付けを含むPythonのライブラリである。
(Luceneで使われている)
scikit-learnのtf-idf実装。
MATLABツールボックスはテキストマイニング(TM)の様々なタスク向けに利用できる。特に i) 索引作成 ii) 情報検索 iii) 次元削減 iv) クラスタリング v) 分類 タスクである。索引作成の段階はユーザに任せられており、tf-idfを含めたローカル、あるいはグローバルの重み付け手法を適用する必要がある。
term-frequencyの説明