王寒茹,张仰森
(北京信息科技大学 计算机学院,北京 100192)
文本相似度计算是自然语言处理任务的基石,对后续的文本处理起着非常关键的作用。文本相似度一般指文本在语义上的相似程度,被广泛应用于自然语言处理任务的各个领域。在机器翻译领域,它可以作为翻译精确度的评价准则;在搜索引擎领域,可用于衡量检索文本与被检索文本之间的相似程度;在自动问答领域,可用来评定问题与答案之间的语义匹配度;在抄袭检测领域,通过相似度计算可以检测出两段文本的抄袭程度;在文本聚类方面,相似度阈值可以作为聚类标准;在自动文摘中,相似度可以反映局部信息拟合主题的程度。
根据相似度计算方法的特点,文本相似度可以分为字面匹配相似度、语义相似度和结构相似度。字面相似度一般采用Jaccard距离、最小编辑距离、最长公共子串等基本方法进行文本相似度计算。语义相似度可以从基于统计和基于规则两方面进行考虑;结构相似度计算的关键在于分析文本的句法结构。
基于字面匹配的相似度算法只是单纯从词形上考虑文本的相似度,认为“形似即义似”。车万翔等[1]采用编辑距离计算相似度,用词语代替单个汉字或字符作为基本编辑单元;俞婷婷等[2]根据k(n-gram窗口的大小)个字符在文本中出现的频率及其所占权重,用Jaccard距离计算2个文本间的相似度;李圣文等[3]利用公共字符串的信息熵评价文本相似度。
实际上基于字面匹配的文本相似度计算方法具有很大的局限性,原因包括:
1)语言的多义同义问题。同一个词在不同的语境下,可以表达不同的语义,例如“苹果”既可以表示水果,也可以表示科技公司;同理,相同的语义也可以由不同的词表达,例如“的士”、“计程车”都可以表示出租车。
2)语言的组合结构问题。词是自然语言中的最小语义单位,由词可以组成句子和篇章,不同的词序可以表达不同的语义,如“深度学习”和“学习深度”;更进一步,还存在句法结构问题,例如“从北京到上海高铁”和“从上海到北京高铁”虽然含有的词语完全相同,但其语义完全不同。
文本相似度的计算不能只停留在字面匹配的层面,更需要语义层面的匹配,这涉及到语义的表示和计算的问题。现有的算法分别从统计和规则两方面进行考虑。
基于统计的经验主义思想源于Harris在1954年提出的分布假设(distributional hypothesis)。这个假设认为具有相似上下文的词,应该具有相似的语义。其计算完全依赖于语料库,根据词汇在文本中的共现频率衡量其语义相似度。目前,根据语料将文本表示成计算机可操作的向量形式,是利用统计方法计算文本相似度的主要思路。基于构建向量的方式不同,有向量空间模型(vector space model,VSM)、主题模型以及神经网络模型3种表示方式。
VSM将文档看成相互独立的特征项组(T1,T2,…,Tn),并根据其在文档中的重要程度赋予其一定的特征项权重W;将(T1,T2,…,Tn)看作一个n维坐标系中的坐标轴,(W1,W2,…,Wn)为相应的坐标值。这样由特征项组(T1,T2,…,Tn)构成了一个文档向量空间,采用空间向量间的余弦相似度计算文本相似度。
VSM的缺陷在于:①对于大规模语料,VSM会产生高维稀疏矩阵,导致计算复杂度增加;②VSM假设文本中的各个特征词独立存在,割裂了词与词之间的关系以及段落间的层次关系。因而用向量空间进行文本相似度计算时,通常改进TF-IDF的计算方法以提高精确度。例如,张奇等[4]将文本用3个向量(V1,V2,V3)表示,V1中的每一维代表特征词的TF-IDF值,V2根据一个bi-gram是否出现取值0或1,V3使用tri-gram信息,取值同V2,用回归模型将3对向量相似度综合得到句子的相似度;华秀丽[5]等利用TF-IDF选择特征项,利用知网计算文本的语义相似度。
针对VSM中高维向量空间,一词多义和多词一义的问题,学者们提出了各种主题模型。如潜在语义分析模型和潜在狄利克雷分布模型,在词和文档之间加入主题的概念,对文本隐含主题进行建模。两篇文档是否相关不仅仅取决于字面上的词汇重复,更重要的是挖掘文字背后的语义关联。
Deerwester等[6]于1990年提出潜在语义分析模型 (latent semantic analysis,LSA),该算法的基本思想是对大型语料库中的词语进行统计分析产生词条-文档矩阵,并采用奇异值分解(SVD)技术剔除不重要的奇异值,从而去除文本的“噪音”,将文本从稀疏的高维词汇空间映射到低维的潜在语义空间,在低维语义空间上使用余弦距离计算文本相似度。这样做的优点在于两个相关的文本即使没有相同的词汇也能获得相似的向量表示,更加符合文本本身的关系。由于LSA算法过高的计算成本,LSA并没有得到大规模的应用。
Blei等[7]于2013年提出隐含狄利克雷分布模型(latent dirichlet allocation,LDA)。它是一种对离散数据主题信息进行建模的方法,可以用来识别大规模文档集或语料库中的主题信息。文本的相似度通过计算与之对应的主题概率分布来实现。由于短文本的代表词少,LDA对于短文本的主题挖掘并不一定能达到预期效果,因而更适用于长文本。例如王振振等[8]利用LDA建立文本主题空间,增强文本的向量表示。LDA对文档的主题建模,仅保留本质信息,有助于高效处理大规模文档。
随着深度学习在图像、语音方面取得的进展,学者们又把目光转向了利用深度学习模型进行自然语言处理的工作。如DSSM、ConvNet、Tree-LSTM、Siamese LSTM[9-13]都是在对词语或者句子建模的基础上得到词向量或者句向量,并选择合适的距离公式进行相似度计算。
利用神经网络模型进行文本的相似度计算有2个思路。以句嵌入为例,一是直接将句子表示成句向量,如Ryan Kiros等[14]采用seq2seq框架,借鉴word2vec的skip-gram的方法,通过一句话来预测这句话的上一句和下一句,在模型的encoder层生成句向量,decoder进行上下文的向量预测;二是从词的角度出发,组合句子中的词向量得到句向量,如Arora等[15]对一个句子中所有的词向量进行加权平均得到句向量,并采用SVD或PCA方法进行修正,在句子的相似度计算方面取得的效果比较好;Kusner等[16]最小化2个句子中词向量的全局距离之后,用EMD算法来计算句子的相似度;肖和等[17]利用神经网络模型结合上下文信息,学习单词在语境中的向量表示,在依存句法树中分析句子中各个词语的依存关系,得到整个句子的句义表示。
基于规则的理性主义方法是采用人工构建的、具有规则体系的知识库进行文本相似度计算。根据知识库中定义的规则,将词汇分解成概念,这样词汇间的相似性度量就可以转化为相似性最高的概念间的相似度。
知识库中概念的组织形式,如概念间的上下位关系、同义、反义关系以及树状概念层次体系中的不同要素(节点之间的路径长度、局部网络密度、节点在树形图中的深度、节点包含的信息量等)都可以作为词汇的特征项进行相似度计算。按照知识库的种类划分,常用的语义词典包括《知网》(HowNet)、《同义词词林》、WordNet等,常用的web语料库有维基百科、百度百科等。
《知网》是一个以汉语和英语所表示的概念为描述对象,以揭示概念间的关系、概念所具有的属性间的关系为基本内容的常识知识库。《知网》采用嵌套式结构,把复杂概念层层分解,直到能用一组义原来表述。《知网》本质上是一种概念树结构,这个结构比较符合人的思维方式,近些年来得到学者们的广泛研究和应用。基于《知网》的词语相似度计算思想如下:
1)词语的整体相似度计算。对于2个词语w1、w2,w1对应的m个义项(概念)分别为s11,s12,…,s1 m,w2对应的n个义项(概念)分别为s21,s22,…,s2n,词语之间的相似度可以用词语分解所得概念之间相似度的最大值来表示:
(1)
2)概念相似度计算。在知网中,一个概念可以用4种特征来描述,分别为第一基本义原描述、其他基本义原描述、关系义原描述、关系符号描述。基于“整体相似度等于部分相似度之和”的思想,概念相似度等于各个特征相似度的加权和。由于各个特征对概念的影响程度不同,部分相似性在整体相似性中所占的权重也不一样,概念相似度计算方法为
(2)
式中β为权重。
3)义原相似度计算。对于2个义原的相似度,刘群等[18]提出的义原相似度的计算方法为
(3)
式中,dis(p1,p2)为p1、p2之间的路径长度;α为一个可调节参数,表示相似度为0.5时的路径长度。吴健等[19]提出节点深度对义原的相似度有一定的影响。义原相似度计算方法为
(4)
式中dp1、dp2分别为节点p1、p2的节点深度。
WordNet以同义词集合为基本构建单位,每一个同义词集合代表一个词汇的基本概念,并在概念之间建立了上下位关系、同义关系、反义关系以及整体部分关系。
目前基于WordNet的词汇语义相似度计算方法如表1所示。
《同义词词林》将所有的词组织在1个或几个树状的层次结构中,类似于WordNet的组织形式。由于国外已经有很多专家对WordNet做了详细研究,因而与其结构相似的《同义词词林》未来得到广泛应用的潜力很大。
表1 基于WordNet的词语相似度计算方法
陈宏朝等[32]使用《同义词词林》基于路径与深度的方法进行词语相似度计算,在MC30测试集上得到皮尔森相关系数为0.856。彭琦等[33]基于信息内容的方法,在MC30测试集上得到皮尔森相关系数为0.899。
维基百科是目前最大的百科全书,每个页面都有一个主题,页面之间通过链接相互访问。相对于《知网》、WordNet等知识库,维基百科知识描述全面,覆盖范围广泛,更新速度迅速,因而得到学者们的青睐。
维基百科具有很好的结构化信息,可以将维基百科看作2个巨大的网络:①由页面构成的网络(页面网),每个节点代表一个页面,节点之间的连接线代表页面之间的链接;②由类别组成的网络(类别网),每个节点代表维基百科的一个类别,连接线代表2个节点之间存在子类和父类的关系。
基于维基百科的代表算法有以下3种:
Strube等[34]提出WikiRelate!算法,它将基于WordNet的经典算法重新基于维基百科的类别网实现,用维基百科的文档类型结构、文档内容分别代替WordNet的概念层次结构、词汇定义。Gabrilovich等[35]提出显性语义分析法(explicit semantic analysis,ESA),该方法类似于向量空间模型,首先构建语义解析器,将每个维基百科的概念页面用TF-IDF(或其他特征抽取方法)表示成一个概念向量,每个值表示相对应的词语与这个概念的相关程度,通过比较2个概念向量的相似性判断词汇的语义相似度。相比于WikiRelate!算法,ESA效果更加突出。此外,Milne[36]利用了维基百科页面之间的链接信息,基于向量模型计算语义相关性,效果不如ESA。
百度百科作为最大的中文百科全书,相似度计算方法有以下2种:詹志建等[37]对百度词条的百科名片、词条正文、开放分类和相关词条4 部分分别求相似度,通过部分相似度加权得到整体相似度;尹坤等[38]将百度百科看成一个巨大的有向图,基于图论的思想计算相似度,通过2个词条所在文档之间的链接关系来衡量2个词条的相似度。
句法分析是一种句子结构分析方法,借助句子的依存关系进行句法分析。依存关系主张核心动词(支配成分)为句子的中心成分,支配句子中的其他成分(从属成分),支配成分与从属成分之间形成某种依存关系。依存句法可以通过长距离的搭配信息,反映出句子中各成分间的语义修饰关系,与句子成分的物理位置无关。
穗志方[39]于1998年提出用骨架依存树的方法计算句子相似度,开辟了用骨架依存树进行相似度计算的先河。利用依存结构进行句子间的相似度计算,关键在于如何获得句子各成分间的语义依存信息。实际上这种方法并不需要考虑所有的依存关系,只需要判断对句子结构相似有决定性作用的依存关系即可,利用依存关系计算句子相似度的方法为
(5)
语义角色标注是一种浅层的语义分析技术,把句子中的某些语法成分标注为给定谓语动词的论元(语义角色),如施事、受事、事件、地点等。
田堃等[40]提出语义角色标注的汉语句子相似度算法。该方法以谓语动词为核心,在动词相似的基础上,比较相同标签下的角色相似度。计算方法如下:
1)整体相似度计算。对于包含p个谓词的句子S1和包含q个谓词的句子S2,分别拥有包含p和q个标注句型,S1的标注句型集合为T(S1)={T11,T12,…,T1p},S2的标注句型集合为T(S2)={T21,T22,…,T2q},2个句子间的相似度计算方法为
(6)
式中(T1i,T2j)为标注句型的匹配对。
2)标注句型的相似匹配算法。谓语动词是句子的核心,是动作的发出者,它的相似度虽然不能完全代替句型之间的相似度,但在很大程度上能够区分标注句型间是否具有一定的相似性,因而可以通过谓语动词的相似匹配来判断标注句型的相似匹配程度。
设句子S1中第i个谓词和S2中的第j个谓词之间的相似度为simij,谓词之间的相似度矩阵为
(7)
式中m、n是2个句子中的谓词个数,因而也是2个句子中的标注句型数。假设m≤n,2个句子间的m对谓语匹配关系的算法分为以下3步:
①找到句子中最大的元素simpq=max(simij|1≤i≤m,1≤j≤n),这样得到S1中第p个谓词和S2中的第q个谓词之间的谓语匹配对。
②删除矩阵A中simpq所在的行和列;
③循环执行前2步直到矩阵A中的行数或列数为0。
3)标注句型间的相似度计算。对于一个含有m个语义角色的标注句T,用v表示它的动词,e(S)={e1,e2,…,em}表示S中所有论元成分的集合,r(S)={r1,r2,…,rm}表示S中所有角色标签的集合。则标注句型T可以表示为一个3元组(v,e(S),r(S))。
标注句型T1、T2的相似度为
sim(T1,T2)=β×sim(v1,v2)+(1-β)×
(8)
式中:m和n分别为句型T1、T2中包含的标注句型数;sim(v1,v2)为2个动词v1、v2间的词语相似度;sim(ei,ej)为2个论元ei、ej间的相似度;β为谓词相似度在全句中所占的权重,这里取β=0.5,即对谓词和语义角色的相似度各赋予0.5的权重。
虽然在学术界,相似度计算已经取得丰硕的研究成果,但是随着自然语言处理技术的发展,对相似度计算所能达到的精确度也提出了较高的要求。基于以上论述,未来的研究方向值得从以下两方面考虑:
第一,计算方法的单一导致计算结果非线性偏高,基于混合建模的相似度算法将日渐丰富。基于统计的方法能够反映文本在语义、语用方面的相似性和差异,但受语料库的质量影响较大,尤其是在对于特定领域进行文本相似度计算时,语料库的质量对结果的精确度至关重要。基于规则的相似度计算方法能够弥补语料库的数据稀疏和噪声问题,但规则制定受人的主观影响较大,如果规则库不能及时更新,规则的不完善将导致不能达到预期结果。基于句法驱动的方法从句法结构的方面刻画句子的相似度,但一般不适用于长句,随着句子长度的增加算法的准确率、复杂度均呈现下降趋势。目前已有的研究表明混合方法能在一定程度上弥补单一方法的不足,提高相似度计算方法的精确度。
对于多种不同的方法,融合方法主要为加权和回归,加权的方法对于权重的选择也是一个问题,采取回归的方法需要考虑不同方法的不同特征。融合方法的选择应该简洁高效,避免陷入单纯追求准确率的提高而忽略其复杂性和实用性的“黑洞”。
所以关于使用何种技术融合以及采用哪几种算法融合还有待深入研究,如果寻找到最佳结合点,混合方法在未来必定取代现有的方法,成为一大发展趋势。
第二,基于深度学习的建模方法将成为新的发展热点。随着神经网络在语音、图像等领域都大幅度超越传统算法,词向量、卷积神经网络、长短时记忆以及注意力模型等都被用于文本相似度计算中,在训练的过程中挖掘文本的潜在语义特征,可以解决人工构造特征而造成的特征不足问题;并且用向量表示文本符合人的认知,因此在大数据量的情况下利用神经网络的方法进行文本处理将会成为今后的又一大发展方向,其在篇章相似度的计算方面将会大展身手。