TF-IDF与余弦相似性的应用:自动提取关键词

摘自: http://www.ruanyifeng.com/blog/2013/03/tf-idf.html

我们用搜索引起进行搜索时,得到的结果通常会根据相关性排序,关性高的结果显示在前面。那么,相关性是如何计算呢?

这里介绍一个简单而又经典的算法:TF-IDF。

举个例子:假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的关键词。

一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行"词频"(Term Frequency,缩写为TF)统计。

结果你肯定猜到了,出现次数最多的词是----"的"、"是"、"在"----这一类最常用的词。它们叫做"停用词"(stop words),表示对找到结果毫无帮助、必须过滤掉的词。

假设我们把它们都过滤掉了,只考虑剩下的有实际意义的词。这样又会遇到了另一个问题,我们可能发现"中国"、"蜜蜂"、"养殖"这三个词的出现次数一样多。这是不是意味着,作为关键词,它们的重要性是一样的?

显然不是这样。因为"中国"是很常见的词,相对而言,"蜜蜂"和"养殖"不那么常见。如果这三个词在一篇文章的出现次数一样多,有理由认为,"蜜蜂"和"养殖"的重要程度要大于"中国",也就是说,在关键词排序上面,"蜜蜂"和"养殖"应该排在"中国"的前面。

所以,我们需要一个重要性调整系数,衡量一个词是不是常见词。**如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。**

用统计学语言表达,就是在词频的基础上,要对每个词分配一个"重要性"权重。最常见的词("的"、"是"、"在")给予最小的权重,较常见的词("中国")给予较小的权重,较少见的词("蜜蜂"、"养殖")给予较大的权重。这个权重叫做"逆文档频率"(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比。

知道了"词频"(TF)和"逆文档频率"(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。

下面就是这个算法的细节。

第一步,计算词频

词频(TF) = 某个词在文章中出现的次数

考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。

词频(TF) = 某个词在文章中出现的次数 / 文章总词数

第二步,计算逆文档频率 这时,需要一个语料库(corpus),用来模拟语言的使用环境。

逆文档词频(IDF) = log(语料库中的文档总数/(包含该词的文档总数+1))

如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。

第三步,计算TF-IDF

TF-IDF = TF * IDF

可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。

还是以《中国的蜜蜂养殖》为例,假定该文长度为1000个词,"中国"、"蜜蜂"、"养殖"各出现20次,则这三个词的"词频"(TF)都为0.02。然后,搜索Google发现,包含"的"字的网页共有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= 0.02 , IDF = log(250/62.3) = 0.603, TF-IDF = 0.02*0.603=0.0121

从上表可见,"蜜蜂"的TF-IDF值最高,"养殖"其次,"中国"最低。(如果还计算"的"字的TF-IDF,那将是一个极其接近0的值。)所以,如果只选择一个词,"蜜蜂"就是这篇文章的关键词。

除了自动提取关键词,TF-IDF算法还可以用于许多别的地方。比如,信息检索时,对于每个文档,都可以分别计算一组搜索词("中国"、"蜜蜂"、"养殖")的TF-IDF,将它们相加,就可以得到整个文档的TF-IDF。这个值最高的文档就是与搜索词最相关的文档。

TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏授客的专栏

Oracle 修改oracle数据库名

2.确保数据库处于mount,非open状态,并且在加载前先以immediate方式关闭。如:

11920
来自专栏村雨

自然语言处理NLP(三)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

6820
来自专栏机器学习理论与数据竞赛实战

TF-IDF与余弦相似度

在将文本分词并向量化后,我们可以得到词汇表中每个词在各个文本中形成的词向量,我们将下面4个短文本做了词频统计:

19720
来自专栏AI科技大本营的专栏

裴健等9名华人当选加拿大皇家学会院士

可能有人会好奇,这里的加拿大皇家学会是一个怎样的组织?被它选中的院士含金量有多高?据维基百科等资料显示,获得 RSC 的认可可以说是个人在艺术、社会科学和科学领...

13820
来自专栏Python数据科学

从概念到应用,终于有人把数据挖掘讲明白了

导读:数据采集和存储技术的迅速发展,加之数据生成与传播的便捷性,致使数据爆炸性增长,最终形成了当前的大数据时代。围绕这些数据集进行可行的深入分析,对几乎所有社会...

12230
来自专栏ellipse数据库技术

数据挖掘

数据挖掘——就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。

8220
来自专栏SAMshare

MLK | 特征工程系统化干货笔记+代码了解一下(中)

如果我们对变量进行处理之后,效果仍不是非常理想,就需要进行特征构建了,也就是衍生新变量。

9720
来自专栏大数据和机器学习

基于k-means++和brich算法的文本聚类

分词和过滤停用词,这里分词有两步,第一步是对停用词进行分词,第二步是切分训练数据。

26310
来自专栏AI研习社

Kaggle Grandmaster 的 NLP 方法

AI 开发者按,相信很多数据科学从业者都会去参加 kaggle 竞赛,提高自己的能力。在 Kaggle Competitions 排行榜中,有一个头衔是众多用户...

10810
来自专栏小黎子数据分析

数据仓库系列之数据质量管理

  数据质量一直是数据仓库领域一个比较令人头疼的问题,因为数据仓库上层对接很多业务系统,业务系统的脏数据,业务系统变更,都会直接影响数据仓库的数据质量。因此数据...

27510

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励