这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。
有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?
这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以理解,这就是我今天想要介绍的TF-IDF算法。
让我们从一个实例开始讲起。假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的关键词。
一个容易想到的思路,就是找到出现次数最多的词。如果某个词很重要,它应该在这篇文章中多次出现。于是,我们进行"词频"(Term Frequency,缩写为TF)统计。
结果你肯定猜到了,出现次数最多的词是----"的"、"是"、"在"----这一类最常用的词。它们叫做"停用词"(stop words),表示对找到结果毫无帮助、必须过滤掉的词。
假设我们把它们都过滤掉了,只考虑剩下的有实际意义的词。这样又会遇到了另一个问题,我们可能发现"中国"、"蜜蜂"、"养殖"这三个词的出现次数一样多。这是不是意味着,作为关键词,它们的重要性是一样的?
显然不是这样。因为"中国"是很常见的词,相对而言,"蜜蜂"和"养殖"不那么常见。如果这三个词在一篇文章的出现次数一样多,有理由认为,"蜜蜂"和"养殖"的重要程度要大于"中国",也就是说,在关键词排序上面,"蜜蜂"和"养殖"应该排在"中国"的前面。
所以,我们需要一个重要性调整系数,衡量一个词是不是常见词。如果某个词比较少见,但是它在这篇文章中多次出现,那么它很可能就反映了这篇文章的特性,正是我们所需要的关键词。
用统计学语言表达,就是在词频的基础上,要对每个词分配一个"重要性"权重。最常见的词("的"、"是"、"在")给予最小的权重,较常见的词("中国")给予较小的权重,较少见的词("蜜蜂"、"养殖")给予较大的权重。这个权重叫做"逆文档频率"(Inverse Document Frequency,缩写为IDF),它的大小与一个词的常见程度成反比。
知道了"词频"(TF)和"逆文档频率"(IDF)以后,将这两个值相乘,就得到了一个词的TF-IDF值。某个词对文章的重要性越高,它的TF-IDF值就越大。所以,排在最前面的几个词,就是这篇文章的关键词。
下面就是这个算法的细节。
第一步,计算词频。
考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。
或者
第二步,计算逆文档频率。
这时,需要一个语料库(corpus),用来模拟语言的使用环境。
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。
第三步,计算TF-IDF。
可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。
还是以《中国的蜜蜂养殖》为例,假定该文长度为1000个词,"中国"、"蜜蜂"、"养殖"各出现20次,则这三个词的"词频"(TF)都为0.02。然后,搜索Google发现,包含"的"字的网页共有250亿张,假定这就是中文网页总数。包含"中国"的网页共有62.3亿张,包含"蜜蜂"的网页为0.484亿张,包含"养殖"的网页为0.973亿张。则它们的逆文档频率(IDF)和TF-IDF如下:
从上表可见,"蜜蜂"的TF-IDF值最高,"养殖"其次,"中国"最低。(如果还计算"的"字的TF-IDF,那将是一个极其接近0的值。)所以,如果只选择一个词,"蜜蜂"就是这篇文章的关键词。
除了自动提取关键词,TF-IDF算法还可以用于许多别的地方。比如,信息检索时,对于每个文档,都可以分别计算一组搜索词("中国"、"蜜蜂"、"养殖")的TF-IDF,将它们相加,就可以得到整个文档的TF-IDF。这个值最高的文档就是与搜索词最相关的文档。
TF-IDF算法的优点是简单快速,结果比较符合实际情况。缺点是,单纯以"词频"衡量一个词的重要性,不够全面,有时重要的词可能出现次数并不多。而且,这种算法无法体现词的位置信息,出现位置靠前的词与出现位置靠后的词,都被视为重要性相同,这是不正确的。(一种解决方法是,对全文的第一段和每一段的第一句话,给予较大的权重。)
下一次,我将用TF-IDF结合余弦相似性,衡量文档之间的相似程度。
http://www.ruanyifeng.com/blog/2013/03/tf-idf.html
相关推荐
TF-IDF算法的优点是简单快速,结果比较符合实际情况
TF-IDF与余弦相似性的应用(一):自动提取关键词 这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工...
主要为大家详细介绍了TF-IDF与余弦相似性的应用,找出相似文章,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Moviebox:基于内容的机器学习推荐系统利用tf-idf和余弦相似性算法
在文本相似度算法基础上加入语义处理,从已有历史地址库中搜索匹配相似地址。 问题描述 片区划分在物流行业中比较重要,揽收、派送、运输路径规划、配车等核心作业都不同程度依赖片区规划。 传统解决方案一般重度...
余弦相似性获取文章相似度的java实现,tf-idf算法实现
数据集:包含两个实现的数据集-> u.data,u.user(带有EM的GMM的数据集) -> ContentBased.txt(链接到与TF-IDF的余弦相似性的数据集) 演示文稿:包含Midsem和Endsem演示文稿的演示文稿文件。 -> Outliers_
基于统计的文本相似度量方法大多先采用TF-IDF方法将文本表示为词频向量,然后利用余弦计算文本之间的相似度。此类方法由于忽略文本中词项的语义信息,不能很好地反映文本之间的相似度。基于语义的方法虽然能够较好地...
2、主要使用的算法是tf-idftf:term frequency词频idf:inverse document frequency倒文档频率主要思想是:如果某个词或短语在一篇文章中出现的频率高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别...
TF-IDF和余弦相似度是一种非常普遍的技术。 它允许系统快速检索类似于搜索查询的文档。 同样,基于相同的概念,而不是检索类似于查询的文档,它会检查查询与现有数据库文件的相似程度。 脚步: 用户输入查询 查询...
Facebook、Twitter和LinkedIn产生了大量宝贵的社交数据,但是你怎样...•应用诸如TF-IDF、余弦相似性、搭配分析、文档摘要、派系检测之类的先进挖掘技术 •通过基于HTML5和JavaScript工具包的网络技术建立交互式可视化
Facebook、Twitter和LinkedIn产生了大量宝贵的社交数据,但是你... •应用诸如TF-IDF、余弦相似性、搭配分析、文档摘要、派系检测之类的先进挖掘技术, •通过基于HTML5和JavaScript工具包的网络技术建立交互式可视化
相似性匹配系统 这个是一个《电商标题数据相似度匹配系统》,使用方法有:tfidf +词袋模型,余弦相似度,word2vec 1.基本方法 1.1结巴分词 1.2 TF-IDF 1.3余弦相似度 1.4 word2vec 2.项目:《电商标题数据相似度...
为了进一步改进个性化搜索方法,通过对现有个性化搜索方法的研究,提出了一种新的搜索方法...设计了基于余弦相似性计算并综合匹配的标签个数的资源相关性计算方法。通过MovieLens数据集实验,验证了提出方法的有效性。
目的是展示如何通过提取诸如TF.IDF和嵌入之类的特征来准备基于文本的数据集,以建立机器学习模型:除了使用提取的特征来提取文档分类(受监管)和文档聚类(不受监管)之外,执行文本(余弦)相似性分析。...
相似性 该项目使用稀疏矩阵提供了几种KNN(K最近邻)相似性算法的快速Python实现,这在协作过滤推荐系统等中很有用。 该软件包还包括一些归一化功能,这些功能可能在相似度计算之前的预处理阶段有用。 相似之处 ...
在此基础上,利用余弦相似性、Jaccard相似性和改进的余弦相似性公式,计算工人间融合兴趣和能力的综合相似度,依此来选取近邻集并最终生成推荐.利用猪八戒网采集的数据进行实验,结果表明该方法的有效性,并通过对比...