TF-IDF与余弦相似性的应用(二):找出相似文章

标签: IT | 发表时间:2013-03-21 11:55 | 作者:阮一峰
出处:http://www.ruanyifeng.com/blog/

上一次,我用 TF-IDF算法自动提取关键词。

今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供多条相似的新闻。

为了找出相似的文章,需要用到 "余弦相似性"(cosine similiarity)。下面,我举一个例子来说明,什么是"余弦相似性"。

为了简单起见,我们先从句子着手。

  句子A:我喜欢看电视,不喜欢看电影。

  句子B:我不喜欢看电视,也不喜欢看电影。

请问怎样才能计算上面两句话的相似程度?

基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。

第一步,分词。

  句子A:我/喜欢/看/电视,不/喜欢/看/电影。

  句子B:我/不/喜欢/看/电视,也/不/喜欢/看/电影。

第二步,列出所有的词。

  我,喜欢,看,电视,电影,不,也。

第三步,计算词频。

  句子A:我 1,喜欢 2,看 2,电视 1,电影 1,不 1,也 0。

  句子B:我 1,喜欢 2,看 2,电视 1,电影 1,不 2,也 1。

第四步,写出词频向量。

  句子A:[1, 2, 2, 1, 1, 1, 0]

  句子B:[1, 2, 2, 1, 1, 2, 1]

到这里,问题就变成了如何计算这两个向量的相似程度。

我们可以把它们想象成空间中的两条线段,都是从原点([0, 0, ...])出发,指向不同的方向。两条线段之间形成一个夹角,如果夹角为0度,意味着方向相同、线段重合;如果夹角为90度,意味着形成直角,方向完全不相似;如果夹角为180度,意味着方向正好相反。 因此,我们可以通过夹角的大小,来判断向量的相似程度。夹角越小,就代表越相似。

以二维空间为例,上图的a和b是两个向量,我们要计算它们的夹角θ。 余弦定理告诉我们,可以用下面的公式求得:

假定a向量是[x1, y1],b向量是[x2, y2],那么可以将余弦定理改写成下面的形式:

数学家已经证明,余弦的这种计算方法对n维向量也成立。假定A和B是两个n维向量,A是 [A1, A2, ..., An] ,B是 [B1, B2, ..., Bn] ,则A与B的夹角θ的余弦等于:

使用这个公式,我们就可以得到,句子A与句子B的夹角的余弦。

余弦值越接近1,就表明夹角越接近0度,也就是两个向量越相似,这就叫"余弦相似性"。所以,上面的句子A和句子B是很相似的,事实上它们的夹角大约为20.3度。

由此,我们就得到了"找出相似文章"的一种算法:

  (1)使用TF-IDF算法,找出两篇文章的关键词;

  (2)每篇文章各取出若干个关键词(比如20个),合并成一个集合,计算每篇文章对于这个集合中的词的词频(为了避免文章长度的差异,可以使用相对词频);

  (3)生成两篇文章各自的词频向量;

  (4)计算两个向量的余弦相似度,值越大就表示越相似。

"余弦相似度"是一种非常有用的算法,只要是计算两个向量的相似程度,都可以采用它。

下一次,我想谈谈如何在词频统计的基础上,自动生成一篇文章的摘要。

(完)

文档信息

相关 [tf idf 余弦] 推荐:

TF-IDF与余弦相似性的应用(三):自动摘要

- - 阮一峰的网络日志
有时候,很简单的数学方法,就可以完成很复杂的任务. 这个系列的前两部分就是很好的例子. 仅仅依靠统计词频,就能找出 关键词和 相似文章. 虽然它们算不上效果最好的方法,但肯定是最简便易行的方法. 讨论如何通过词频,对文章进行 自动摘要(Automatic summarization). 如果能从3000字的文章,提炼出150字的摘要,就可以为读者节省大量阅读时间.

TF-IDF与余弦相似性的应用(二):找出相似文章

- - 阮一峰的网络日志
上一次,我用 TF-IDF算法自动提取关键词. 今天,我们再来研究另一个相关的问题. 有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章. 比如,"Google新闻"在主新闻下方,还提供多条相似的新闻. 为了找出相似的文章,需要用到 "余弦相似性"(cosine similiarity).

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

- - 阮一峰的网络日志
这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题. 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到. 这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果.

Lucene TF-IDF 相关性算分公式

- - 鲁塔弗的博客
Lucene在进行关键词查询的时候,默认用TF-IDF算法来计算关键词和文档的相关性,用这个数据排序. TF:词频,IDF:逆向文档频率,TF-IDF是一种统计方法,或者被称为 向量空间模型,名字听起来很复杂,但是它其实只包含了两个简单规则. 某个词或短语在一篇文章中出现的次数越多,越相关. 整个文档集合中包含某个词的文档数量越少,这个词越重要.

关键词权重计算算法:TF-IDF

- - 标点符
TF-IDF(Term Frequency–Inverse Document Frequency)是一种用于资讯检索与文本挖掘的常用加权技术. TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度. 字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降.

文档的词频-反向文档频率(TF-IDF)计算

- - CSDN博客推荐文章
TF-IDF反映了在文档集合中一个单词对一个文档的重要性,经常在文本数据挖据与信息. 在一份给定的文件里, 词频(termfrequency-TF)指的是某一. 个给定的词语在该文件中出现的频率. 逆向文件频率(inversedocument frequency,. IDF)是一个词语普遍重要性的度量.

NLP----关键词提取算法(TextRank,TF/IDF)

- - IT瘾-geek
参考书目:python自然语言处理实战——核心技术与算法. 基本思想:TF是计算一个词在一篇文档中出现的频率,IDF是一个词在多少篇文档中出现过,显然TF越高证明这个词在这篇文章中的代表性就越强,而INF越低则证明这个词在具有越强的区分能力. 因此中和这两个数,就能较好地算出文档的关键词. |D_i|是文档中出现词i的文档数量,|D|是文档数.

IDF前瞻:Ivy Bridge的GPU和TDP

- 洞箫 - cnBeta.COM
将于当地时间本周二在旧金山开幕的Intel开发者论坛大会IDF 2011上,定于2012年3月或4月发布的下一代CPU"Ivy Bridge"具体细节将得到揭晓. 在大会开幕前,著名硬件网站Anandtech的站长已经掌握了Ivy Bridge两方面的具体规格:集成的新一代GPU和可变TDP.

行货SanDisk闪迪TF存储卡16GB(Class4),119元包邮

- qlzzy - 什么值得买
SanDisk闪迪TF(microSDHC)存储卡,16GB容量,Class4级别,写入速度超过4MB/S,适合在智能手机中使用. SanDisk的卡性能/寿命/价格比较平衡. 天极商城目前的价格是127元包邮,其他渠道报价普遍在139/149. 不含发票的话可以再减8块,119元包邮,近期较难看到的价格,每人限购一件,需在线支付.

SanDisk 闪迪 TF存储卡16GB(Class4),109元包邮

- Glen - 什么值得买
SanDisk闪迪TF(microSDHC)存储卡,16GB容量,Class4级别,适合手机、mp4及android平板电脑,SanDisk的卡性能/寿命/价格比较平衡. 天极商城特价109元包邮(不带票),价格低于主流B2C商城且使用顺丰发货,送货速度及服务有一定的保障.