TF-IDF

TF-IDF(英语:term frequency–inverse document frequency)是一种用于信息检索与文本挖掘的常用加权技术.TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,互联网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜索结果中出现的顺序。1

原理

在一份给定的文件里,词频(term frequency,tf)指的是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数,而不管该词语重要与否。)对于在某一特定文件里的词语\(t_i\)来说,它的重要性可表示为:

\[tf_{i,j}=\frac{n_{i,j}}{\sum_{k}n_{k,j}}\]

以上式子中\(n_{i,j}\)是该词在文件\(d_j\)中的出现次数,而分母则是在文件\(d_j\)中所有字词的出现次数之和。

逆向文件频率(inverse document frequency,idf)是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到:

\[idf_{i} =\lg {\frac {|D|}{|\{j:t_{i}\in d_{j}\}|}}\]

其中:

  • \(|D|\):语料库中的文件总数
  • \(|\{j:t_{i}\in d_{j}\}|\):包含词语\(t_i\)的文件数目(即\(n_{i,j}\neq 0\)的文件数目)如果词语不在数据中,就导致分母为零,因此一般情况下使用 \(1+|\{j:t_{i}\in d_{j}\}|\)

然后

\[tf{}idf_{i,j}=tf_{i,j}\times idf_{i}\]

某一特定文件内的高词语频率,以及该词语在整个文件集合中的低文件频率,可以产生出高权重的tf-idf.因此,tf-idf倾向于过滤掉常见的词语,保留重要的词语.2

举例

在某个一共有一千词的网页中“原子能”、“的”和“应用”分别出现了 2 次、35 次 和 5 次,那么它们的词频就分别是 0.002、0.035 和 0.005. 我们将这三个数相加,其和 0.042 就是相应网页和查询“原子能的应用” 相关性的一个简单的度量.概括地讲,如果一个查询包含关键词 \(w_1,w_2,\dots,w_N\), 它们在一篇特定网页中的词频分别是: \(TF_1, TF_2,\dots, TF_N\).(TF: term frequency). 那么,这个查询和该网页的相关性就是:\(TF_1, TF_2,\dots, TF_N\).3

1
2
tf = 2/1000+35/1000+5/1000
tf

我们很容易发现,如果一个关键词只在很少的网页中出现,我们通过它就容易锁定搜索目标,它的权重也就应该大.反之如果一个词在大量网页中出现,我们看到它仍然不是很清楚要找什么内容,因此它应该小.概括地讲,假定一个关键词 \(w\)\(D_w\) 个网页中出现过,那么 \(D_w\) 越大,\(w\) 的权重越小,反之亦然.在信息检索中,使用最多的权重是“逆文本频率指数” (Inverse document frequency 缩写为IDF).利用 IDF,上述相关性计算的公式就由词频的简单求和变成了加权求和,即:

\[TF_1\times IDF_1 + TF_2\times IDF_2 +... + TF_N\times IDF_N\]

1
2
3
import math
tf_idf = 2/1000*math.log2(1e9/2e6) + 35/1000*math.log2(1e9/1e9) + 5/1000*math.log2(1e9/5e8)
tf_idf

  1. https://zh.wikipedia.org/w/index.php?title=Tf-idf&oldid=48518036↩︎

  2. https://zh.wikipedia.org/w/index.php?title=Tf-idf&oldid=48518036↩︎

  3. https://baike.baidu.com/item/tf-idf/8816134?fr=aladdin↩︎