动手实践用LDA模型计算两篇英文文档相似度

知道原理的同学这部分可以略过直接看实践部分

什么是TD-IDF?

构造文档模型

我们这里使用空间向量模型来数据化文档内容:向量空间模型中将文档表达为一个矢量。

用特征向量(T1,W1;T2,W2;T3, W3;…;Tn,Wn)表示文档。

Ti是词条项,Wi是Ti在文档中的重要程度, 即将文档看作是由一组相互独立的词条组构成,把T1,T2 …,Tn看成一个n 维坐标系中的坐标轴,对于每一词条,根据其重要程度赋以一定的权值Wi,作为对应坐标轴的坐标值。

权重Wi用词频表示,词频分为绝对词频相对词频

绝对词频,即用词在文本中出现的频率表示文本。

相对词频,即为归一化的词频,目前使用 最为频繁的是TF*IDF(Term Frequency * Inverse Document Frequency)TF乘IDF

将文档量化了之后我们很容易看出D1与Q更相似~因为D1与Q的夹角小,我们可以用余弦cos表示

分析一下这个例子:

有三个文档D1,D2,Q

这三个文档一共出现了三个词条,我们分别用T1,T2,T3表示

在文档D1中词条T1的权重为2,T2权重为3,T3权重为5

在文档D2中词条T1权重为0,T2权重为7,T3权重为1

在文档Q中词条T1权重为0,T2权重为0,T3权重为2

  D1 D2 Q
T1 2 3 0
T2 3 7 0
T3 3 1 2

接下来我们看tf*idf的公式:

tf:tf(d,t) 表示词条t 在文档d 中的出现次数

idf:idf(t)=log N/df(t)

  • df(t) 表示词条t 在文本集合中出现过的文本数目(词条t在哪些文档出现过) Inverse Document Frequency

  • N 表示文本总数

对于词条t和某一文本d来说,词条在该文本d的权重计算公式:

特征向量(T1,W1;T2,W2;T3, W3;…;Tn,Wn)就可以求出了!

是不是很简单呢~

进一步思考:

如果说一个词条t几乎在每一个文档中都出现过那么:

idf(t)=log N/df(t)

趋近于0,此时w(t)也趋近于0,从而使得该词条在文本中的权重很小,所以词 条对文本的区分度很低。

停用词:在英文中如a,of,is,in.....这样的词称为停用词,它们都区分文档的效果几乎没有,但是又几乎在每个文档中都出现,此时idf的好处就出来了

我们通常根据w(d,t)值的大小,选择 指定数目的词条作为文本的特征项,生 成文本的特征向量(去掉停用词)

这种算法一方面突 出了文档中用户需要的词,另一方面, 又消除了在文本中出现频率较高但与文本语义无关的词条的影响

文本间相似性 :

基于向量空间模型的常用方法,刚才我们提到过可以用余弦值来计算,下面我讲一下具体步骤

内积不会求得自行百度。。。。

为了提高计算效率:可以先算x^‘=x/|x|,y^‘=y/|y|;大量计算两两文档间相似度时,为降低计算量,先对文档进行向量进行单位化。

ok~tf*idf就先到这里

总结:

我们可以通过计算tf*idf的值来作为特征向量的权重,把权重为0的词去掉

然后通过计算特征向量之间的余弦值来判断相似性。

什么是LDA?

原文地址:https://www.cnblogs.com/ldphoebe/p/5616770.html

时间: 2024-08-16 11:20:22

动手实践用LDA模型计算两篇英文文档相似度的相关文章

一篇英文文档中找出频数最多的10个单词

"""一篇英文文档中找出频数最多的10个单词collections: Counter 提供计数器工具以支持方便和快速的计数 most_common(n) 返回n个最常见元素及其计数的列表,从最常见到最少. 如果省略nNone,则 most_common()返回计数器中的所有元素."""import refrom collections import Counter# print(dir(Counter))with open('english.tx

使用余弦定理计算两篇文章的相似性

使用余弦定理计算两篇文章的相似性:(方法论,细致易懂版) http://blog.csdn.net/dearwind153/article/details/52316151 python 实现(代码): http://outofmemory.cn/code-snippet/35172/match-text-release (结巴分词下载及安装:http://www.cnblogs.com/kaituorensheng/p/3595879.html) java 实现(代码+方法描述): https

fuzzywuzzy:计算两个字符串之间的相似度

楔子 fuzzywuzzy是用来计算两个字符串之间的相似度的,它是依据Levenshtein Distance算法来进行计算的 Levenshtein Distance 算法,又叫 Edit Distance 算法,是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符.一般来说,编辑距离越小,两个串的相似度越高. fuzz from fuzzywuzzy import fuzz # 调用fuzz.ratio即可计算两

计算两篇文章相似度

[[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1)], [(0, 1), (4, 1), (5, 1), (7, 1), (8, 1), (9, 2), (10, 1)], [(0, 1), (3, 1), (4, 1), (5, 1), (6, 1), (7, 1), (10, 1)]] 例如(9,2)这个元素代表第二篇文档中id为9的单词“silver”出现了2次. 有了这些信息,我们就可以基于这些“训练文档”计算一个TF-IDF

什么是TD-IDF?(计算两篇文章相似度)

什么是TD-IDF? 计算特征向量(或者说计算词条的权重) 构造文档模型 我们这里使用空间向量模型来数据化文档内容:向量空间模型中将文档表达为一个矢量. We use the spatial vector model to digitize the document content: the vector space model represents the document as a vector. 用特征向量(T1,W1:T2,W2:T3, W3:…:Tn,Wn)表示文档. The eige

【R实践】时间序列分析之ARIMA模型预测___R篇

时间序列分析之ARIMA模型预测__R篇 之前一直用SAS做ARIMA模型预测,今天尝试用了一下R,发现灵活度更高,结果输出也更直观.现在记录一下如何用R分析ARIMA模型. 1. 处理数据 1.1. 导入forecast包 forecast包是一个封装的ARIMA统计软件包,在默认情况下,R没有预装forecast包,因此需要先安装该包 > install.packages("forecast') 导入依赖包zoo,再导入forecast包 > library("zoo&

[再寄小读者之数学篇](2014-06-03 计算两个无穷级数)

(from zhangwuji) \bex \sum\limits_{n=0}^{\infty}\dfrac{n^3+2n+1}{(n^4+n^2+1)n!},\quad \sum\limits_{n=0}^{\infty}\dfrac{1}{(n^4+n^2+1)n!}. \eex 解答: (by wangsb) \beex \bea \sum\limits_{n=0}^{\infty}\dfrac{n^3+2n+1}{(n^4+n^2+1)n!} =&\sum\limits_{n=0}^{\

【转】《胡侃学习(理论)计算机》前后篇及两篇补充

今天推荐的是篇老帖,南京大学sir先生的<胡侃>以及后来的两篇补充帖子.算算是十几年前的帖子了,我知道帖子出自南京大学的BBS,百度了一下,却没有翻到原文.不过百度到了一大堆不负责任的转帖,我想我这也不算是抄袭了吧.当年有一位我很尊敬的学长给我推荐的这篇文章,让我受益匪浅(学长当年年轻气盛因为这事还吃过不少亏,他自己一直很内疚). 这几篇帖子适用于学习计算机理论,对于大学本科想要好好学计算机的同学,或者是工作后想要系统的学习计算机及数学理论的同学很有帮助. ==========转载需要分隔线=

王家林的云计算分布式大数据Hadoop企业级开发动手实践

一:课程简介: Hadoop是云计算分布式大数据的事实标准软件框架,Hadoop中的架构实现是整个云计算产业技术的基础,作为与Google三大核心技术DFS.MapReduce.BigTable相对的HDFS.MapReduce.和HBase也是整个Hadoop生态系统的核心的技术,本课程致力于帮您掌握这三大技术的同时掌握云计算的数据仓库挖掘技术Hive,助您在云计算技术时代自由翱翔. 二:课程特色 1,      深入浅出中动手实作: 2,      掌握Hadoop三大核心:HDFS.Map