文本相似度计算|学习笔记(二)

简介: 快速学习文本相似度计算

开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践 文本相似度计算】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/1067/detail/15459


文本相似度计算


这就是一个词袋模型,这是一个文档,分完词以后整个文档里面都是词,相当于是一个装在袋子里的词。词袋模型里的每一个词都会给它一个权重值的。这个权重值简单就可以是它的词频。或者一篇文档的话按照词的唯一性,给它排完序后每一个词体的编号。

词向量模型是在向量的一个维度里面,每一个词在向量空间里面都是一个点。有些词和词之间向量空间会比较近,那么可能是同义词,近义词。那么这个计算向量空间的话就比较科学,准确度更高。

image.gif基于知识组织的方法

基于知识组织的方法主要有两种,一种是基于本体的方法。基于本体的方法,进一步可以分为基于距离,就是概念之间的路径长度表示语义距离。基于内容是用概念词共享的信息量化它们之间的语义相似度。如果基于属性的话就是用概念词之间的公共属性数量衡量它们之间的相似度。这个就涉及到本体之间的知识以及计算。本体在十几年前非常火,现在做辅助的作用。因为本体要把一个领域里的概念体系完全建立起来,这个建立的工作量非常的巨大,而且需要专家的参与。也就是说要做一个脊椎动物的本体的话,需要等人来一起构建这个本体。

本体里面的概念体系一定要建立完全如果某一个概念断层的话,那么使用的时候可能会有错误。另外一个知识组织是基于网络知识的方法,这个网络知识不是指一般的搜索引擎,主要是网络上面已经构好的有词条,词之间的关系,这样一个网络知识的资源。主要是一些百科,比如维基百科,这个很著名。由于前面讲的本体的词语数量是有限的,要建立非常多的工作量代价是巨大的。而百科覆盖范围广泛,富含丰富的语义信息,更新速度相对较快。

而百度百科的已经有数千万级别的词条。当然还有其他的一些百科,只要满足有词条之间的层次关系,比如上下类关系。有词条的链接页面,比如这个词的详细解释,都认为是百科。那么网上的百科可以用基于知识组织的方式来判断文本的相似度,做文本相似性的计算。说明一下,本体能够准确地表示概念含义并能反映出概念之间的关系。但是建立本体需要专家参与,耗时费力,所以已有的本体存在更新速度慢、词汇量有限等问题,需要网络知识的补充。

文本相似度计算方法的汇总

image.gif这篇文献里对文本相似度的计算的综述做了研究,有空可以看看全文。那么文本相似度计算全文分为四个方法。基于字符串,基于语料库,基于知识,基于其他方法。那么字符串里有基于字符和词语,然后进一步有比较细的一些计算方法。像编辑距离,汉明距离,LCS,Jaro-Winkler,N-gram,而基于词语有余弦相似度,Dice系数,欧式距离,Jaccard,Overlap Coeffcicient。基于语料库就是词袋方法,神经网络的词向量,搜索引擎上的语料库。基于世界知识就是知识组织的方法,有本体知识,网络知识。然后其他方法里面主要是句法分析和混合方法等等。

最新的学习方法里就是神经网络的学习这里展开的很少。这里只列了神经网络,实际上这里发展很快,可能出现了一系列的方法,这也是目前研究的热点。

介绍几常用几个公式或算法

image.gif第一个叫Jaccard相似度,也叫Jaccard系数。它的计算公式就是A,B两个文档是不是相似,然后它们的交集除以它们的并集。可以简化成这个A和B的交集除以A和B的数量再减去它们的交集。然后它的特点是只考虑单词出现与否,交和并就是单词出现与否。忽略了每个单词的含义,忽略单词的顺序,没有考虑单词出现的次数。所以它是计算文本相似度的话,也只是一个简化的一个方法。

看一下示例,这里有两串文本字符串S1和S2。前面一个是8个词,后面一个是11个词。

那么这两串文本的相似度怎么计算呢?因为它们之间的交集是有两个单词,language和processing。所以整个计算交集2再除以它们每个的数量,然后再减去交集,这个算的是0.11764。这就是这两个文本的Jaccard 相似度。

详细介绍的第二个文本相似度计算的算法是SimHash 算法。这个算法的基本思想是这样子,主要是降维,将高维的特征向量映射成成一个低维的特征向量,然后通过两个向量的Hamming Distance,也有人翻译成海明距离。

来确定文章是否重复或者是高度近似。那么这个是在谷歌里面有大量来解决外语级别的网页的去重问题,就是网页是不是有重复相似。然后算法的步骤也是五个步骤,第一个步骤是分词,得到有效的特征向量,这个词它的特征向量的值一般可以用词频来表示。然后每个特征向量可以设置1~5个级别的一个权重。第二步就是Hash值的计算。通过Hash函数来给各个特征向量转换成Hash值。Hash值是一个可以用二进制01来表示的n-bit签名。第三步就是加权,所有特征向量进行加权,用这样一个公式啊,就是Hash值乘以上面设的权重,五个级别的权重,然后进行加权。第四个步骤就是合并,将上述各个特征向量的加权结果累加,变成只有一个序列串,这个合并的话,因为上面是一个特征词,然后一句话里面有很多特征词,所以这个方法最后要合并。最后是降维,就是合并后的这个累加结果,如果大于0的就是变为1,否则还是0。就可以得到该语句的simhash值,最后可以根据不同语句simhash的海明距离来判断它们的相似度。那么这个大家听起来可能稍微还有点抽象,没什么感性认识,

下面看一个示例。这是simhash算法的示例,比如这个文本是中文,这样一串文本。美国51区固原称内部有9驾飞碟曾看见灰色外星人。那么整个simhash的算法的步骤是这样子。分词然后再做hash值,通过hash函数做hash值,是hash证明组成的串,然后进行加权。那么加权的话,是1~5的这个等级级别。

然后进行一个合并。合并以后变成这样一个值。这个合并的话就是这个合并的这个值相应的这个位置上面进行一些累加。然后合并完了再降维,如果是大于0的位置,那就是1。小于0的位置呢就是0。最后得到后面的simhash值。然后再判断不同的句子的simhash值,看看它们之间是不是相似。因为另外一串的话也是这样一串01,判断它们是不是相似,可以用那个海明距离判断。讲白了,它还是一个基于字符串的方法。在前面的讲到的四个方法里面,还是基于字符串方法的这样一个比较,可以用汉明距离来表示。

image.gif第三个公式和算法,就是经常用的一个余弦相似度的一个计算。那么这个公式是这样子,cosθ余弦相似度,因为是多维的,那每一个维度上面的这两个文本串里面的相应的元素。它分子上面分母上面,然后再做这样的一个计算。那如果用向量表示的就是两个向量的一个关系,那么这个算法的特点是这样的,夹角如果越小的话,余弦值越接近于1,它们的方向更加吻合,则越相似。夹角越小越相似。余弦相似度算法适合于短文本,而不适合于长文本。

看下面这个例子,比如这里有两句话。分词以后这只/皮鞋/号码/大了。那只/号码/合适。另外一个句子,这只/皮鞋/号码/不小,那只/更/合适。它们共同的词,就是把两句话里面共同的词让它排列出来。然后在做权重向量,它在这里也可以用词频表示。比如说句子A的话,那么这只皮鞋出现1,号码出现2次,因为这里有两次号码。也就是词频表示,句子B是一样的。然后带入到什么?带入到上面这个公式来计算一下,这个计算的话是公式上面数字尽管很多,但应该很简单。最后得到一个结果就是它们的相似度0.81,这就是一个余弦相似度的计算,也就是向量的空间相似度的计算。

基于词向量的短文本相似度

image.gif

现在神经网络的方法非常热门,介绍一个基于词向量的一个短文本的相似度计算。它这个就是短文本,就像网上的评论,短文本的相似计算。那么这个计算的话,它的算法思想是用到一个叫wmd,就是一个词移距离。它是一种转文本的一种相似度计算的标准,可以用于短文本的相似检索,它的KNN分类,KNN分类里面也要算距离。所以真的是一个算法的一个基础。

然后这个算法的步骤是这样子,将查询中的每一个词投射到词向量的空间。词向量,比如是100维或者是200维,投到这个空间里面可以得到一团点云。就是每一个词在这个向量空间里面就是这个维度空间里面都是一个点,所以点有很多点就点云。然后让要查的文献同样也投射到空间里,也是成为点云。然后就是计算查询和参考文献之间的距离,然后作为WMD,就是短文本标准的词义距离的值,这个值就是两个词之间的语义距离。

示例是文档1和文档2,它们之间是不是相似,那么刚刚讲的参考它可以是查询要查的那篇文献,也可以查询是一篇文献,参考是一篇文献,然后判断它们的相似度。

把document1和document2放入向量空间里面,很多点就会变成点云。一个点代表一个词,所以词和词之间就有可能是相似或不相似。比如奥巴马和总统就比较相似,这就是基于词向量的短文本相似度计算这样一个简单介绍。

From word embeddings to document distance. MJ Kusner,2015. 感兴趣可以看一下这篇文献。

相关文章
|
2月前
|
算法
文本相似度算法
文本相似度算法
|
4月前
|
搜索推荐 Java 自然语言处理
计算文本相似度的几种方法
计算文本相似度的几种方法
|
6月前
|
算法
R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型
R语言随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型
|
6月前
|
机器学习/深度学习 人工智能 算法
【人工智能】<吴恩达-机器学习>批量梯度下降&矩阵和向量运算概述
【1月更文挑战第26天】【人工智能】<吴恩达-机器学习>批量梯度下降&矩阵和向量运算概述
|
机器学习/深度学习 人工智能 自然语言处理
|
机器学习/深度学习 人工智能 自然语言处理
文本相似度计算|学习笔记
快速学习文本相似度计算
文本相似度计算|学习笔记
|
自然语言处理 算法 开发者
文本相似度计算 下|学习笔记
快速学习文本相似度计算 下
文本相似度计算 下|学习笔记
|
机器学习/深度学习 自然语言处理 搜索推荐
文本相似度计算 中|学习笔记
快速学习文本相似度计算 中
文本相似度计算 中|学习笔记
|
BI 数据库 开发者
高维向量检索的设计与实践|学习笔记
快速学习高维向量检索的设计与实践
124 0
高维向量检索的设计与实践|学习笔记
|
存储 算法 数据挖掘
高维向量检索的设计与实践(三)|学习笔记
快速学习高维向量检索的设计与实践(三)
200 0
高维向量检索的设计与实践(三)|学习笔记