上一次,我用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)计算两个向量的余弦相似度,值越大就表示越相似。
"余弦相似度"是一种非常有用的算法,只要是计算两个向量的相似程度,都可以采用它。
下一次,我想谈谈如何在词频统计的基础上,自动生成一篇文章的摘要。
http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html
相关推荐
TF-IDF与余弦相似性的应用 TF-IDF(Term Frequency-Inverse Document Frequency)是一种常用的关键词提取算法,应用于自动关键词提取、信息检索等领域。该算法的优点是简单快速,结果比较符合实际情况。TF-IDF 算法...
TF-IDF(Term Frequency-Inverse Document Frequency)与余弦相似性是文本挖掘和信息检索领域常用的两种技术,常被用于找出文档之间的相似性。TF-IDF是一种衡量词语在文档中重要性的方法,它考虑了词语在文档内的...
例如,通过计算两篇文档的TF-IDF向量的余弦相似度,可以找出文档之间的相似性。 在实际应用中,可能还需要考虑词的长度惩罚,以避免长词由于出现次数多而被误判为重要。例如,可以使用归一化处理,将词频除以该词在...
实验结果分析可能包括查看哪些词的TF-IDF值最高,识别文档的主题,或者比较不同文档之间的相似性。可以使用余弦相似度等方法来评估文档间的相似性。 总结,Python中的TF-IDF矩阵表示涉及到理解TF-IDF算法原理,使用...
总结来说,TF-IDF结合余弦相似度是一种有效的文本相似性计算方法,它可以帮助我们理解并比较不同文本的语义关系。在机器学习和自然语言处理的诸多任务中,如信息检索、文本分类和情感分析,这种方法都扮演着关键角色...
在新闻情感分析中,TF-IDF帮助我们找出那些在特定新闻中频繁出现,但在整个新闻集合中不太常见的词汇,这些词汇往往能反映文章的主题和情感倾向。 接着,余弦距离是衡量两个非零向量之间角度的度量,常用于文本...
TF-IDF与余弦相似性的应用(一):自动提取关键词 这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工...
在IT领域,文本相似度计算是一项重要的任务,用于找出两篇或多篇文章之间的相似性。本文主要探讨了如何利用C#编程语言实现基于TF-IDF的余弦算法来完成这一任务,特别是针对文章内容以及图片的相似度比较。下面将详细...
这个压缩包文件包含了一个使用Python Dash框架开发的图书推荐应用程序,该程序采用了基于内容的过滤方法,特别是TF-IDF(Term Frequency-Inverse Document Frequency)和余弦相似度这两种技术来为用户推荐书籍。...
余弦相似度是通过计算两个非零向量的夹角余弦值来度量它们的相似性。在numpy中,可以使用`cosine_similarity`函数计算余弦相似度。 ```python from sklearn.metrics.pairwise import cosine_similarity # 计算余弦...
每篇文档被看作是词汇表中各个词的权重向量,文档间的相似性可以通过计算它们向量之间的余弦相似度来评估。这种表示方法简化了文本的理解和比较,但同样忽略了词的位置信息和潜在的语义关系。 TF-IDF理论基础是假设...
Moviebox:基于内容的机器学习推荐系统利用tf-idf和余弦相似性算法
总结起来,这个Java实现通过余弦相似性和TF-IDF算法,可以帮助我们有效地评估两篇文章的相似度,尤其在信息检索系统、推荐系统或者文本分类中有着广泛的应用。在处理大量文本数据时,理解并掌握这些方法对于提升系统...
余弦相似度是一种在信息检索和自然语言处理中广泛使用的度量方法,用于评估两个非零向量之间的角度,从而衡量它们之间的相似性。在文本分析中,这种度量常被用来比较两个文档的相似程度。Tf-Idf(Term Frequency-...
在这个项目中,我们使用了 Flask 框架来构建一个电影推荐的应用程序,该程序基于TF-IDF(Term Frequency-Inverse Document Frequency)和余弦相似度算法。 **Flask框架** Flask是一款轻量级的Web服务程序,用于...
在本项目"Content-based-Recommendation-System"中,开发者使用了TF-IDF(词频-逆文档频率)和余弦相似度这两种关键的文本分析方法来实现这一目标。 首先,让我们深入了解TF-IDF。TF-IDF是一种统计方法,常用于信息...
这种方法允许我们通过数学运算(如余弦相似度)来比较不同文档之间的相似性。 **2. 词频(Term Frequency, TF)** 词频是衡量一个词在文档中出现频率的指标。通常,一个词在文档中出现的次数越多,它对于文档主题的...
《基于Java的KMeans算法实现文本聚类及TF-IDF权重计算详解》 在数据挖掘领域,文本聚类是一种常用的技术,它通过无监督学习方法将大量文本数据自动分类为不同的组,使得相同主题的文本聚集在一起。在这个过程中,...