概述

总文本相似度的计算方法主要分为三大类:一类是基于统计学的计算方法,此种方法在计算时没有考虑文本的句子结构信息和语义信息,计算的结果有时会与人对自然语言的理解不相符合;另一类是基于语义理解的计算方法,这种方法依赖于具有层次结构关系的语义词典,计算结果相对准确,与人对自然语言的理解较为符合;第三种类是基于深度学习的计算方法。

1、基于向量空间模型的计算方法

向量空间模型简称 VSM,是 Vector Space Model 的缩写,是应用较为广泛的一种信息检索模型。在此模型中,文本被看作是由一系列相互独立的词语组成的,若文档 D 中包含词语 t1,t2,…,tN,则文档表示为D(t1,t2,…,tN)。由于文档中各个词语对文档的重要程度不同,并且各个词语的重要程度对文本相似度的计算有很大的影响,因而可对文档中的每个词语赋以一个权值 w,以表示该词的权重,其表示如下:D(t1,w1;t2,w2;…,tN,wN),可简记为 D(w1,w2,…,wN),此时的 wk 即为词语 tk 的权重,1≤k≤N。这样,就把文本表示成了向量的形式,同时两文本的相似度问题也就可以通过两向量之间的夹角大小来计算了,夹角越大,两文本的相似度就越低

基于向量空间模型的计算方法假设文本中的词语是相互独立的,因而可以用向量的形式来表示,这种表示方法简化了文本中词语之间的复杂关系,也使得文本的相似程度变得可以计算了。向量表示方法中词语的权值应该能够显示出该词语对整个文本的重要程度,一般用经过统计得到的词频来表示;向量的所有分量组合在一起,应该能够将此文本与其他文本区分开。

大量统计结果表明,文本中出现次数最多的词语往往是反映句子语法结构的虚词以及文本作者想要阐述某个问题时所用的核心词,如果是围绕同一核心问题的文本,其核心词汇应该是类似的,所以这两类词对文本相似度的计算都是没有用的。因此,最高频词和低频词都不适宜做文本的特征词,只有词频介于最高频和低频之间的这部分词汇才适合做特征词。

在文本中出现频率较高的词语应该具有较高的权值,因此,在计算词语对文本的权重时,应考虑词语在文本中的出现频率,记为 tf。仅考虑这一项是不够的,如果某一词语不仅在一个文本中出现,而是在文本集中的很多个文本中都有出现,例如“的”字在中文文本中的出现频率应该是相当高的,但它对于我们区分各个文本是没有帮助的,也就是说,这样的词语是不具备鉴别能力的。因而,在计算词语权重时还应考虑词语的文档频率(df),即含有该词的文档数量。由于词语的权重与文档频率成反比,又引出与文档频率成反比关系的倒置文档频率(idf),其计算公式为idf=logN/n(其中 N 为文档集中全部文档的数量,n 为包含某词语的文档数)。由此得出特征词 t 在文档 D 中的权重 weight(t,D) = tf(t,D) * idf(t)。用 tf * idf 公式计算特征项的权重,既注重了词语在文本中的重要性,又注重了词的鉴别能力。因此,有较高的 tf*idf 值的词在文档中一定是重要的, 同时它一定在其它文档中出现很少。因此我们可以通过这种方法来选择把那些词语作为文本向量的特征词。
特征词选择出来之后,就能确定文本的向量表示了,有了文本向量,我们就可以通过此向量计算文本的相似度了。

(1)欧几里得距离

欧氏距离是最常用的距离计算公式,衡量的是多维空间中各个点之间的绝对距离,当数据很稠密并且连续时,这是一种很好的计算方式。

因为计算是基于各维度特征的绝对数值,所以欧氏度量需要保证各维度指标在相同的刻度级别,比如对身高(cm)和体重(kg)两个单位不同的指标使用欧式距离可能使结果失效。

(2)余弦相似度(Cosine Similarity)

余弦相似度用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小。相比距离度量,余弦相似度更加注重两个向量在方向上的差异,而非距离或长度上。

(3)曼哈顿距离(Manhattan Distance)

向量各坐标的绝对值做差后求和:d(i,j)=|X1-X2|+|Y1-Y2|。

(4)明可夫斯基距离(Minkowski distance)

明氏距离是欧氏距离的推广,是对多个距离度量公式的概括性的表述:

(5)Jaccard 相似系数(Jaccard Coefficient)

Jaccard 系数主要用于计算符号度量或布尔值度量的个体间的相似度,因为个体的特征属性都是由符号度量或者布尔值标识,因此无法衡量差异具体值的大小,只能获得“是否相同”这个结果,所以 Jaccard 系数只关心个体间共同具有的特征是否一致这个问题。
对于上面两个对象A和B,我们用Jaccard计算它的相似性,公式如下:

首先计算出A和B的交(A ∩ B),以及A和B的并 (A ∪ B):
然后利用公式进行计算:

(6)斯皮尔曼(等级)相关系数(SRC :Spearman Rank Correlation)

(7)BM25算法

BM25算法,通常用来作搜索相关性平分:对Query进行语素解析,生成语素qi;然后,对于每个搜索结果D,计算每个语素qi与D的相关性得分,最后,将qi相对于D的相关性得分进行加权求和,从而得到Query与D的相关性得分。
BM25算法的一般性公式如下:

2、基于语义理解的计算方法

基于语义理解的文本相似度计算方法与基于统计学的计算方法不同,此方法不需要大规模的语料库,也不需要长时间和大量的训练,一般需要一个具有层次结构关系的语义词典,依据概念之间的上下位关系或同义关系进行计算。文本的相似性计算大多是依赖于组成此文本的词语,基于语义理解的相似度计算方法也不例外,一般都是通过计算语义结构树中两词语之间的距离来计算词语的相似度。因此,一般会用到一些具有层次结构关系的语义词典,如WordNet、HowNet、同义词词林等。基于语义词典的文本相似度计算方法很多,有的通过计算词语在 WordNet 中由上下位关系所构成的最短路径来计算词语的相似度;也有的根据两词语在词典中的公共祖先结点所具有的最大信息量来计算词语的相关度;国内也有通过知网或同义词词林来计算词语的语义相似度的方法。

3、基于深度学习的计算方法

(1) 基于 DNN 的模型——DSSM模型

DSSM模型全称是deep struct semantic model,是微软在2013年提出来的深度匹配模型,后续一举成为表示学习的框架鼻祖。同年百度NLP团队也提出了神经网络语义匹配模型simnet,本质上两者在模型框架上是一致的,如图3.3所示,都是典型的双塔模型,通过搜索引擎里query和doc的海量用户曝光点击日志,用DNN把query和doc通过表示层,表示为低维的embedding向量,然后通过匹配层来计算query和doc的embedding向量距离,最终得到匹配分数。
整个DSSM可以分为3层,输入层、表示层和输出层
(1) 输入层

输入层做的事情是把原始的句子(query或者doc)映射到一个向量空间并进入表示层。这里由于中文和英文本身的构造不同,在处理方式上也有所不同。

(2)表示层

在DSSM中表示层采用的是词袋模型(bag of words),也就是说不区分word的输入顺序,整个句子的所有单词都是无序输入的。 在embedding层之后,对每个sentence使用的是MLP网络,经典的隐层参数是300->300>128,也就是说最后,每个句子都将表示成一个128维度的向量。

(3) 匹配层

在原始的DSSM模型使用的是cosine作为两个向量的匹配分数

(2)基于 CNN 的模型

以DSSM为代表的基于DNN的表示学习匹配模型如3.2分析,无论是bow的表示还是DNN全连接网络结构的特点,都无法捕捉到原始词序和上下文的信息。因此,这里可以联想到图像里具有很强的local relation的CNN网络结构,典型代表有ARC-I模型,CNN-DSSM模型,以及CNTK模型。

(3)基于 RNN 的模型

作为空间关系代表的CNN网络结构能够捕捉到query和doc的局部关系,RNN作为时间序列相关的网络结构,则能够捕捉到query和doc中前后词的依赖关系。因此,基于RNN的表示学习框架如图所示,query或者doc用黄色部分表示,通过RNN网络结构作为隐层来建模序列关系,最后一个word作为输出,从而学习得到query和doc的表示。对于RNN结构,可以使用业内经典的LSTM或者GRU网络结构,如图3.14所示。

NLP 语义相似度常用计算方法总结相关推荐

  1. 语义相似度的计算方法

    词语的语义相似度计算主要有两种方法 : 一类是通过语义词典,把有关词语的概念组织在一个树形的结构中来计算: 另一类主要是通过词语上下文的信息,运用统计的方法进行求解.  1. 语义相似度 Dekang ...

  2. java 文本语义相似度计算,NLP 语义相似度计算 整理总结

    更新中 更新时间: 2019-12-03 18:29:52 写在前面: 本人是喜欢这个方向的学生一枚,写文的目的意在记录自己所学,梳理自己的思路,同时share给在这个方向上一起努力的同学.写得不够专 ...

  3. DSSM、CNN-DSSM、LSTM-DSSM等深度学习模型在计算语义相似度上的应用+距离运算

    在NLP领域,语义相似度的计算一直是个难题:搜索场景下query和Doc的语义相似度.feeds场景下Doc和Doc的语义相似度.机器翻译场景下A句子和B句子的语义相似度等等.本文通过介绍DSSM.C ...

  4. 深度学习解决NLP问题:语义相似度计算——DSSM

    tongzhou 转载请注明出处: http://blog.csdn.net/u013074302/article/details/76422551 导语 在NLP领域,语义相似度的计算一直是个难题: ...

  5. 自然语言处理NLP之语义相似度、语言模型、doc2vec

    自然语言处理NLP之语义相似度.语言模型.doc2vec 目录 自然语言处理NLP之语义相似度.语言模型.doc2vec 语义相似度

  6. 深度学习解决NLP问题:语义相似度计算

    深度学习解决NLP问题:语义相似度计算 参考文章: (1)深度学习解决NLP问题:语义相似度计算 (2)https://www.cnblogs.com/qniguoym/p/7772561.html ...

  7. WordNet相关API介绍及语义相似度计算方法

    WordNet Introduction WordNet是由Princeton 大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典.它不是光把单词以字母顺序排列,而且按照单词 ...

  8. 自然语言语义相似度计算方法

    计算机对主观题的自动评阅准确与否,主要取决于其对文本相似度的计算是否准确.由于文本相似度计算在文档复制检查.信息检索和机器翻译等领域都有十分广泛的应用,所以,近年来有越来越多的学者致力于文本相似度算法 ...

  9. 自然语言处理(NLP):19 金融领域NLP竞赛——文本语义相似度

    智能客服的本质,就是充分理解用户的意图,在知识体系中精准地找到与之相匹配的内容,回答用户问题或提供解决方案.问题相似度计算,是贯穿智能客服离线.在线和运营等几乎所有环节最核心的技术,广泛应用于搜索.推 ...

  10. word2vec相似度计算_AAAI-2016 | 使用孪生递归网络的句子语义相似度计算方法

    本文<Siamese Recurrent Architectures for Learning Sentence Similarity>提出了一种使用孪生递归网络来计算句子语义相似度的方法 ...

最新文章

  1. 51js 的json编辑器
  2. android bilibili搜索框,仿bilibili搜索框效果(三句代码实现)
  3. [导入]Ajax初试
  4. IDEA快捷代码添加/补全技巧
  5. java oauth2搭建_Spring Security 实战干货:OAuth2授权请求是如何构建并执行的
  6. PYTHON: PYENV, PYVENV, VIRTUALENV – WHAT’S THE DIFFERENCE?
  7. sublime3环境
  8. 理解Ruby的4种闭包:blocks, Procs, lambdas 和 Methods
  9. lacp静态和动态区别_TTM、静态和动态市盈率的区别,三种市盈率看哪个?
  10. python 获取当前日期和时间_如何在Python中获取当前日期和时间?
  11. WPS制作甘特图实操(带图超详细)
  12. 好用的Redis客户端操作工具
  13. 深度linux使用入门教程,Linux初级使用指南
  14. 安卓玩机搞机之卡刷包 线刷包与刷机中一些故障解决与问题分析
  15. 图标设计的意思是什么?资深UI设计师告诉你图标的含义!
  16. 翻译Introduction+to+3D+Game+Engine+Design+Using+DirectX+9+and+CSharp
  17. 通过计算机英语怎么说,通过英文怎么说
  18. Matlab模糊综合评价做空气质量经典例题
  19. Drupal采集,Drupal文章采集爬虫采集插件(附图文)
  20. 语言 英语名称 中文名称 国家码

热门文章

  1. 天下谁人不识“金” — SONY NW-WM1ZM2 索尼金砖二代测评
  2. 常微分方程简要复习_笔记_第2章:一阶微分方程的初等解法
  3. php alt什么意思,img标签的alt作用是什么
  4. Python 进阶视频课 - 14. FR007 利率掉期定价和曲线拔靴
  5. 面向对象课程 第三次博客总结
  6. python3 模块 public缀_Python publicsuffixlist包_程序模块 - PyPI - Python中文网
  7. 中大计算机研究生华为,考上中山大学很厉害吗?毕业后有机会去华为吗?本文有答案...
  8. 服务器信号满格网速很慢,网速变得很慢(wifi信号满格但网速慢)
  9. ubuntu中文论坛
  10. 文物摄影中白平衡的正确设置(图)