开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:文本相似度计算 下】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15497
文本相似度计算 下
内容介绍:
一、 Jaccard 相似度计算
二、 SimHash 计算方法
三、余弦相似度计算
四、基于词向量的文本相似度
一、 Jaccard 相似度计算
1.计算公式
假如有A和B两个相似的文档, Jaccard 的计算公式就是它们的交集除以它们的并集,可简化成A和B的交集除以A和B的数量和再减去A和B的交集。
2.特点
只考虑单词出现与否,忽略每个单词的含义,忽略单词顺序,没有考虑单词出现的次数。
3.示例
有两个文本S1和S2:
S1=”Natural language processing is a promising research area”#
S2=”More and more researchers are working on natural language processing nowadays”#
S1有8个词,S2有11个词,它们的交集: language, processing 2个词。
所以相似度即 Jaccard Similarity =2/(8+11-2)=0.11764
二、 SimHash 算法
1.算法思想
SimHash 算法的主要思想是降维,将高维的特征向量映射成一个低维的特征向量,通过两个向量的 Hamming Distance 来确定文章是否重复或者高度近似。 Google 采用这种计算方法来解决万亿级别的网页的去重任务。
2.算法步骤
Simhash 算法分为5个步骤:
分词:得到有效的特征向量,每一个特征向量设置1-5等5个级别的权重
Hash: 计算哥哥特征向量的 hash 值, hash 值为二进制数01组成的 n-bit 签名
加权:给所有特征向量进行加权,即 W=Hash*weight
合并:将上述各个特征向量的加权结果累加,变成只有一个序列串
降维:上述累加结果,如果大于0则置1,否则置0,从而得到该语句的 smihash 值,最后使可以根据不同语句 smihash 的海明距离来判定他们的相似度。
3.示例
比如文本“美国‘51区’雇员称内部有9驾飞碟,曾看见灰色外星人”, simhash 算法第一步就是将该文本进行分词。第二步进行 hash 计算。第三步是进行加权,加权是1-5的等级级别。第四步,进行合并累加。最后进行降维。
三、余弦相似度计算
1.计算公式
余弦等于A乘B的数量再除以A的向量和B向量的积。
2.特点
夹角越小,余弦值就越接近于1,它们的方向更加吻合,则越相似,余弦相似度算法适合于短文本,而不适合于长文本。
3.示例
句子A:这只/皮靴/号码/大了,那只/号码/合适
句子B: 这只/皮靴/号码/不/小,那只/更/合适
共同词:这只,皮靴,号码,大了。那只,合适,不,小,很
权重向量:句子A:(1,2,1,1,1,0,0,0) 句子B:(1,1,1,0,1,1,1,1,1)
带入余弦公式计算即可,最后计算结果是相似度0.81
四、基于词向量的短文本相似度计算
1.算法思想
WMD(Worde Mover Distance, 词移距离)是一种短文本相似度计算标准;可以用于短文本的相似检索, KNN 分类等问题, KNN 分类中也需要算距离,这是算法的一个基础。
2.算法步骤
将 query 中的每个词投射到 Word Embedding 词向量的空间,得到一团短点云Q,
每一个词在向量空间里面很很多点云。将 reference 也同样投射成一团点云C, 计算查询和参考资料之间的距离,如从Q到C的距离,作为WMD值,即两者的语义距离。
3.示例
两个文档 document 1 和 document 2, 之间相似,将1和2放在多维空间里面,里面有很多点云。一个点就代表一个词,词于词之间相似。
4.文献参考
From work embeddings to document distances. (MJ Kusner,2015