TF-IDF的原理与应用
来自: 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仍然不能解决所有的情况。