1.What is TF-IDF
TF-IDF (Term Frequency-Inverse Document Frequency,词频 - 逆文件频率)
TF-IDF 是一种统计方法,用来评估一个词对一个文件集或一个语料库中的其中一份文件的重要程度。该词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降
上述那段话的总结就是,一个词在一篇文章中出现次数越多,但同时在整个文档中出现的次数越少,就越能代表该文章
举个例子,假定现在有一篇长文《中国的小龙虾养殖》,我们准备用计算机提取它的关键词。一个很容易想到的思路:就是找到出现次数最多的词,如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行 "词频"(Term Frequency,缩写 TF)统计
结果很明显,出现次数最多的词是 ——"的"、"是"—— 这一类最常用的无意义的词。他们叫做 "停用词"(Stop words),对结果毫无帮助、必须过滤的词
假设我们把这类停用词都过滤了,只考虑剩下的有实际意义的词。这样又会遇到另一个问题,我们可能发现 "中国"、"小龙虾"、"养殖" 这三个词的出现次数一样多。是不是意味着,作为关键词,它们的重要性是一样的?
显然不是。因为 "中国" 是很常见的词,相对而言,"小龙虾" 和 "养殖" 不那么常见。如果这三个词在一篇文章的出现次数一样多,有理由认为,"小龙虾" 和 "养殖" 的重要程度要大于 "中国",也就是说,在关键词排序上面,"小龙虾" 和 "养殖" 应该排在 "中国" 的前面
所以,我们需要一个重要性调整系数,衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词
用统计学语言表达,就是在词频的基础上,要对每个词分配一个 "重要性" 权重。最常见的词("的"、"是")给予最小的权重,较常见的词("中国")给予较小的权重,较少见的词("小龙虾")给予较大的权重。这个权重叫做 "逆文档频率"(Inverse Document Frequency,缩写 IDF),它的值的大小与一个词的常见程度成反比
知道了 "词频(TF)" 和 "逆文档频率(IDF)" 以后,将这两个值相乘,就得到了一个词的 TF-IDF 值。某个词对文章的重要性越高,它的 TF-IDF 值就越大
下面是这个算法的细节
词频原本是指一个给定的词语在文本中出现的次数。但由于不同的文章有长短之分,为了便于不同文章的比较,因此对词频进行标准化
$$ \text{TF}_{i,j}=\frac{n_{i,j}}{\sum_k n_{k,j}} $$
其中
- $n_{i,j}$:该词在文档 $d_j$ 中出现的次数
- $\sum_k n_{k,j}$:在文档 $d_j$ 中所有词的出现次数之和
逆文档频率的主要思想是:如果包含某个词 $t$ 的文档越少,IDF 越大,这说明该词具有很好的类别区分能力,某一特定词语的 IDF,可由总文档数除以包含该词的文档数,再将得到的商取对数得到
$$ \text{IDF}_i=\log\frac{|D|}{|\{j:t_i \in d_j\}| + 1} $$
其中
- $|D|$:文档总数
- $|\{j:t_i \in d_j\}|$:包含词语 $t_i$ 的文档数目,之所以加 1,是为了避免分母为 0
某个特定文档内的高词频率,乘以该词在整个文档中的低词频率,得到的就是 TF-IDF 的值 $\text {TF-IDF}_{i,j}=\text {TF}_{i,j}\times \text {IDF}_i$。因此 TF-IDF 倾向于过滤掉常见的词语,保留重要的词语
还是以《中国的小龙虾养殖》为例,假定该文本有 1000 个词,"中国"、"小龙虾"、"养殖" 各出现 20 次,则这三个词的词频(TF)都为 0.02。然后假设现在共有 250 亿份文档,其中包含 "中国" 的文档共有 62.3 亿份,包含 "小龙虾" 的文档共 0.484 亿份,包含 "养殖" 的文档共 0.973 亿份。则它们的逆文档频率(IDF)和 TF-IDF 如下:
包含该词的文档数(亿) | IDF | TF-IDF | |
---|---|---|---|
中国 | 62.3 | 0.603 | 0.0121 |
小龙虾 | 0.484 | 2.713 | 0.0543 |
养殖 | 0.973 | 2.410 | 0.0482 |
由上表可见,"小龙虾" 的 TF-IDF 值最高,"养殖" 其次,"中国" 最低。所以,如果只选择一个词,” 小龙虾 “就是这篇文章的关键词