TF-IDF的原理与应用

sunzhe336 9年前

来自: http://原网站已经失效/article/tf-idf.html


作者:一个独行的程序员

1.TF-IDF原理

TF-IDF(Term Frequency-Inverse Document Frequency),中文叫做词频-逆文档频率。在文本挖掘(Text Mining)和信息检索(Information Retrieval)领域具有广泛的应用。

其难能可贵之处在于:没有繁复的数学推导式,仅需要中学数学水平,便可以在一节课时间理解其原理并上手使用。

设想现在我们正在阅读新闻,如何最快速的了解新闻主旨?毫无疑问——关键词

TF-IDF就具有这样的能力:提取关键词!

假设一个词在一篇文章中出现的次数越多,那么它就越”紧扣主题”。以本文为例,我们可以统计词频(TF),不难发现TF-IDF,原理,应用是出现频率很高的词,后文称keywords。这符合我们的假设,但是有些词却出现的次数更多,如:,等。这类词语没有明确意义,我们称为停顿词(Stopwords)。

如果单纯按照词频算关键词,你会发现几乎所有的文章都是stopwords的词频最高。换句话说,像这种”万金油”,是没有区分度的词语,不能很好的起到将文章分类的作用。这时就需要祭出逆文档频率(IDF)来解决词语权重的问题。

虽然keywords词频不如stopwords高,但是纵观全网的所有文章中,本文的keywords并不是在每篇文章都出现的,而是在很小一部分文章中出现。所以这些keywords是具有高辨识度的,应该给一个更大的权重;相反那些几乎所有文章中都出现的stopwords,则应该给一个很小的权重。

最终,将TF*IDF得出的分值作为每一个词在本文的重要度,就提取出了文章的关键词。

公式化的说法如下,
对于在某一特定文件里的词语 ti 来说,它的重要性可表示为:

以上式子中ni,j是该词在文件dj中的出现次数,而分母则是在文件dj中所有字词的出现次数之和。

|D|:语料库中的文件总数

|{ j: ti in dj}| :包含词语 ti的文件数目(即 ni,j != 0的文件数目)如果该词语不在语料库中,就会导致分母为零,因此一般情况下使用1 + |{j : ti in dj}|

TF-IDF倾向于过滤掉常见的词语,保留重要的词语。

2.TF-IDF应用

本小节通过Google搜索结果数为例,将含有中文”的”结果数15.8亿作为整个语料库大小,计算上一节中的keyword和stopword的TF-IDF值。为了计算简便,假设全文分词后一共500词,则结果如下:

包含该词的文章(百万) IDF TF TF-IDF
TF-IDF 0.497 3.502 0.018 0.063
原理 24.4 1.811 0.008 0.014
应用 82.8 1.280 0.008 0.010
363 0.638 0.028 0.018
482 0.515 0.026 0.013
1580 0.000 0.080 0.000

TF-IDF的优点是计算简单,利于理解,性价比极高。但是它也有缺陷,首先单纯依据文章中的TF来衡量重要性,忽略了位置信息。如段首,句首一般权重更高;其次,有的文章可能关键词只出现1-2次,但可能通篇都是围绕其进行阐述和解释,所以单纯靠TF仍然不能解决所有的情况。