开发者学堂课程【高校精品课-华东师范大学 - Python 数据科学基础与实践:文本相似度计算 中】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/1067/detail/15496
文本相似度计算 中
内容简介:
一、基于字符串
二、基于语料库
三、基于世界知识
一、基于字符串
我们来看看基于字符串的方法有哪些。
我们前面刚刚讲到,字符串方法里面,按照力度可以分为两种,第一种是基于字符的,一种是基于词语的。那么在字符级别的字符串的比较方法有编辑距离,汉明距离,LCS,N-gram等等。
如果是基于词语的话,计算文本相似度方法有构成响亮的余弦相似度,欧式距离,Jaccard。
这每一个方法它的基本思想 ,这里也都有描述,包括它的特点和不足在以下表格也有统计这一份资料课后可以供同学们去研究,去看一下。
二、基于语料库的方法
基于语料库的方法主要有三种,一个是基于词袋。词袋,比如说我们用向量空间模型(VSM),也可以用隐因与分析(LSA,PLSA),LDA模型(LDA)。他们的基础都是基于语料构成的词袋。第二种方法是基于神经网络。
主要是生成词向量主要类型有word2vec,目前很热门的Glove, Bert。第三种是基于搜索引擎的,主要是搜索引擎有大量的wod内容,可以认为是最大的语料库。搜索引擎本身的算法也在不断进步更新,我们可以通过搜索引擎找到答案。如果可以发展好的话会非常方便用户使用。如果有需要可以去搜索引擎去搜一下。
基于磁带方法有这样一个特点,他不考率文档在文中的顺序,只是一个词袋,在袋子里面装了很多词 ,不考虑词的顺序,所以语义能力要稍弱一点
神经网络是利用神经网络生成词向量,综合利用了上下文的语义关系,生成了低纬的实数向量,所以它的语义能力要强。
搜索引擎的话它主要是基于它庞大的语料库,然后利用一个原理做文本相似度的判断就是说我们搜所一个关键词,两个关键词x,y,搜索引擎返回包括含x,,y的网页数量F(x),F(y)以及共同包含的数量F(x,y)。再通过一些数学方法计算它们的相似性得到基于搜索引擎的文本相似度计算。
这里没有更多细节给大家提供,大家有兴趣的话呢可以找点文献资料。
那么我们把多次讲过的词袋模型给大家看一个示例。它的左边是一个文档,装完词以后,整个袋子里都是词。每个词都会给它一个权重值。这个权重值是他的词频。下面是一个词向量模型。词向量模型是在一个维度里面,每一个词在向量空间里面都是一个点,有些词之间向量位置比较近,那就有可能是同义词或近义词。他要计算向量空间的话,计算的词的相似性的话就比较科学,准确度更高。
三、基于知识组织
基于知识组织的方法主要是两种。
一种是基于本体的方法,它进一步可以分为基于距离,基于内容,基于属性的方法。基于距离就是用概念之间的路径长度表示他的语义距离;基于内容的话用概念共享词的信息来表示他们之间的相似度;如果是基于属性的话就是用概念词之间的公共属性衡量他们之间的相似度。
这里涉及到一些本体的的知识以及本体的计算。在我们这门课里由于课时的原因就不展开了,本体的话曾经在十几年前非常火,现在主要是做一些辅助的作用。因为本体要把一个领域的概念完全建立起来。这个建立量非常巨大,还需要该领域的专家加入。比如建立一个濒危动物的本体,就需要了解相关知识的专家来一起构建。本体里的概念体系一定要建立完整,如果某一个概念中间断层,那使用时就会出现错误。
另一种的话是基于网络知识。这个网络知识不是一般的搜索引擎,而是网络上已经构的由词,词条之间的关系这样一个网络知识的资源。比如说维基百科,这个很著名。由于本体的数量是有限的,如果要构建非常多的话代价会很大。而百科覆盖的范围就比较广泛了。还有里面富含了丰富的语义信息,更新速度也比较快。像百度百科已经有了千万级的词条。当然还有其他的百科,只要满足有词条之间的层次关系,有词条的链接页面都认为是百科。网上大量的百科,让我们可以基于组织的方式来判断文本相似度,来做文本相似度计算
这里再稍微说明一下,本体的话可以准确表示概念之间的含义和概念之间的关系,本体的建立需要专家的简历,耗时费力,而已有的本体往往存在更新速度慢,词汇量有限等问题,所以需要网络知识的一个补充。
下面我们来看一下文本相似度计算的一个汇总示意图。
总共分为四个方法,基于字符串,基于语料库,基于世界知识,其他方法
字符串的话里面有基于字符,基于词语。当然,进一步的话会有比较细一些的具体计算方法。
基于语料库的话有词袋模型,神经网络,搜索引擎
基于世界知识,基于知识组织的方法。有本体知识,网络知识。
其他方法里面主要是句法分析和混合方法等等。
这一张汇总图基本上覆盖了文本相似度计算的方法。当然在最新的方法里面,神经网络这里展开的很少,但是发展很快,是目前研究的热点。