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

Posted 人机与认知实验室

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自然语言语义相似度计算方法相关的知识,希望对你有一定的参考价值。


计算机对主观题的自动评阅准确与否,主要取决于其对文本相似度的计算是否准确。由于文本相似度计算在文档复制检查、信息检索和机器翻译等领域都有十分广泛的应用,所以,近年来有越来越多的学者致力于文本相似度算法的研究。总体来看,文本相似度的计算方法主要分为两大类:一类是基于统计学的计算方法,此种方法需要大规模的语料库,并且在计算时没有考虑文本的句子结构信息和语义信息,计算的结果有时会与人对自然语言的理解不相符合;另一类是基于语义理解的计算方法,这种方法不需要大规模的语料库,但需要依赖于具有层次结构关系的语义词典,计算结果相对准确,与人对自然语言的理解较为符合。下面介绍几种经典的文本相似度计算方法,并对他们各自的性能进行简要的分析。 

 

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

向量空间模型简称 VSM,是 VectorSpace 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 值的词在文档中一定是重要的, 同时它一定在其它文档中出现很少。因此我们可以通过这种方法来选择把那些词语作为文本向量的特征词。 

特征词选择出来之后,就能确定文本的向量表示了,有了文本向量,我们就可以通过此向量计算文本的相似度了。相似度的计算方法很多,其中包括:

内积法(Inner Product)

余弦法(Cosine)

Dice 系数法(DiceCoefficient)

Jaccard 系数法(Jaccard Coefficient)

 

2、基于汉明距离的计算方法

上述方法是基于向量空间技术的,把文本表示成空间中的向量,通过计算向量之间的夹角来得出文本之间的相似程度。而基于汉明距离的文本相似度计算方法与上述方法不同,不是基于向量空间技术,而是依赖于编码理论中的汉明距离,通过计算两文本之间的汉明距离来计算两文本的相似度。此种方法的优点在于运算过程比较简便。

首先介绍一下什么是编码理论中的汉明距离。汉明距离是描述两个长度为 n 的码字之间的距离,例如计算码字 x=(x1x2…xi…xn)与 y=(y1y2…yi…yn)之间的距离,其计算公式如下:


其中运算符号⊕表示模 2 加运算,xi和 yi的取值为 0 或 1。通过此公式计算得出的数据 D(x,y)表示的是码字 x 与 y 中不同符号的数目,也就反映出了码字 x 与 y 之间的差异,D(x,y)值越大说明两个码字相似程度越低。

利用此方法计算文本之间的相似度时,首先提取出文本的一些相关信息,例如文中的关键字等,然后将其排列成字码形式,文本的信息就通过这些字码表现出来,形成文本与字码的一一对应关系。例如,文本 D 就可以表示成 D=(10100111001101011),其中的 0 和 1 表示的是其所在位置对应的文本信息在文本中的状态,如果 0 表示文本D 在其对应位置上的信息是不存在的,那么 1 就表示文本 D 在其对应位置上的信息是存在的;反过来表示也是可以的。根据上面的阐述我们就可以很容易的将文本表示成码字的形式,想要求出两个文本之间的相似度,就可以依据上面公式的计算结果得出。如果码字的长度为 n,则通过上述公式计算出的两码字之间的距离值会介于0和n之间,当计算结果为n时,说明两文本的所有信息均不相同,反之,当结果为 0时,说明两文本的所有信息都相同。这样的推算方法显然很不直观,而且如果 n 值不同,文本相似度的大小也会很难比较。所以,我们首先要确定整个文本集的码字集,然后将每个文本表示成其对应的码字,对于文本D1=(x1x2…xi…xn)和 D2=(y1y2…yi…yn),定义其相似度计算公式为:


其中,xi和 yi分别为文本 D1和 D2对应的码字中第 i 位的分量,其值 0 或 1,⊕仍然是模 2 加运算,此种运算对计算机来说,十分方便快捷。运用Sim(D1,D2)公式计算出来的文本相似度,其值介于 0 和 1 之间,当结果 0 时,说明两个文本完全不相似,当结果为 1 时,说明两个文本很相似,符合人们正常的认知规律。

基于汉明距离的文本相似度计算方法没有用到基于向量空间技术中使用的大量复杂的运算,只是用到计算机运算起来十分快捷的模 2 加等运算,因而,计算速度比较快。另外,这种方法所用的文本信息不仅仅限于关键字等互相独立的信息,提供了联合的描述文本信息的可能。但是,如何选择和排列文本信息,使其构成与文本一一对应的码字集合,是运用此方法进行文本相似度计算过程中有待于进一步研究的难点问题。

 

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

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

下一篇笔者将为大家介绍基于词典的中文文本语义相似度计算中经常用到的一个词典——知网(HowNet)。

 

注:本文所用图片来源于网络

 


以上是关于自然语言语义相似度计算方法的主要内容,如果未能解决你的问题,请参考以下文章

词义相似度计算

文本相似度计算(一):距离方法

基于Gensim的文本相似度计算

自然语言处理(NLP)基于PaddleNLP的短文本相似度计算

如何计算两个文本内容的相似度?

Java之词义相似度计算(语义识别词语情感趋势词林相似度拼音相似度概念相似度字面相似度)