首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于规则的句子相似度计算

摘要:本文从语言规则出发给出了一种新的句子相似度计算方法。自动对话系统是本文所提算法的立足点,该算法从5方面分析用户问句,对比该问句和问题库中的问句,然后给出最有可能问句的答案作为返回结果。这5方面包括:相同关键词个数、句子长度对比、逆序数、关键词距离、相同关键词在问题库问句中所占比例。这5方面在计算时具有不同的比重,该比重系数根据经验给出,然后在训练时不断优化。这样从一定程度上提高了自动对话系统给出答案的精度,并成功地用于网络聊天机器人“瞎聊”,使机器人具有了一定的智能。

关键词:自然语言处理;句子相似度;逆序数;自然语言处理;对话系统

0引言

随着计算机和网络的发展,计算机自动对话系统(俗称聊天机器人)越来越受到人们的关注。自动对话系统是人工智能的研究领域,是一个用来模拟人类对话或聊天的程序。它模仿人的语言习惯,给出的答案较为人性化[1]。比较著名的聊天机器人如 “Eliza” [2]、 “小图”[3]等。国内的网络聊天机器人有小i、腾讯的小q以及中国移动的飞信助手等。它们试图建立一种计算机程序,这个程序至少暂时性地让一个真正的人类认为他们正在和另一个人聊天。

自动对话系统的设计有两个难点。首先,对话系统给出的回答要符合人们的说话习惯、贴近实际生活。其次,机器人的反应速度要快,和人的交流不能有过多的时间延迟。要解决这两个问题除了计算机硬件的要求外,需要从计算机算法上进行改进。比如,在理解句子输入上需要稳健的计算机算法[4],还有的从输入文本中寻找合适的规律[5]。让机器人很自然地

和人聊天首先需要理解输入的句子。其中,句子相似度的计算是关键技术。相似度的计算方法分为两类:一类方法称为基于统计的方法,它利用自然语言组成的语料语,收集统计数据,来计算句子之间的相似度;另一类是利用知识库,知识库中的词具有一定的关系和层次结构, 如概念之间的上下位关系和同位关系,这是计算句子相似度的基础[6]。 本研究从汉语句子的特征出发,计算对话者所提问题与模板库中句子的语义相似度,从而选出合适的回答提供给说话者。本研究的成果已经用在了网络聊天机器人“瞎聊”中并取得了良好的效果和点击率。

1句子相似度相关研究

一般来说,句子相似度计算就是寻找和量化目标文本A和B中的相同成分。句子之间的相同成分可以从三方面进行量化:阐释(paraphrase)、蕴含(entailment)、拓展(elaboration)。阐释是使用不同表达方式重述相同的文本信息。在自然语言中阐释现象非常普遍,这就决定了有必要从阐释角度计算句子之间的相似度。在早期的相似度计算中使用编辑距离[7]的方法,在编辑距离达到一定阈值时可以确定句子之间的阐释关系。阐释关系识别的研究成果广泛应用于自然语言处理的各项任务。不同文本之间的第二种关系为蕴含。蕴含的研究分为两种:基于逻辑的(logic-based和基于图的(graph-based)。“蕴含”一词源于逻辑[8],从逻辑角度研究句子蕴含关系符合常规。将自然语言用逻辑表达式表示,然后判断是否可以从文本T推断出假设H。蕴含关系的研究将有助于词义排歧等自然语言处理任务。如多义词 “bank” 的某个义项可能蕴含在不同的句子中(He is walking on the bank和He went to the bank to withdraw some money)。拓展是在原有信息基础上的一种扩展,以形成更复杂的、新兴的整体(complex, emergent whole)。这包括对事物某种细节的进一步阐述或者对事件结果和未来的预测。对于句子拓展关系的研究属于新兴的研究方向,目前成果不多。但是拓展是语言相似度的新视角,拓展关系的存在可以让本来不具相似度的句子具有一定的相关度,如反义关系和部分整体关系[9]。自然语言中的语义涉及因素很多,有语言本身的、也有社会环境的。在计算句子语义相似度的过程中需要考虑各方面因素。目前的研究集中于句子之间的阐释关系,这种研究已经很好地用在自然语言的处理任务中,可以用在自动文摘系统等,这种系统利用了句子之间的阐释关系,以进行多文档的自动文摘生产。蕴含关系和拓展关系的研究不多,但已经有专家在这方面进行了很好的尝试。蕴含关系的研究可以用于问答系统,因为在问答系统的回答中需要确定什么样的文本中蕴含着答案。蕴含关系也可以用于自然语言处理任务如信息检索、信息抽取和机器翻译等 [10]。目前的研究集中于挖掘语言本身的规律,如句子本身的动词论元结构[11]。有的研究采用机器学习的方法挖掘句子之间的关系[12]。本研究从规则出发计算句子之间的相似度,当两句话的相似度达到一定阈值时,可以确定两句话之间的蕴含关系。

2句子相似度计算

本文的研究是面向聊天机器人的,不需要大的训练语料库,这使得机器人反应能力高。但是机器人给出的回答要基于一定的规则,这样用户提问后,机器人对比该提问和语料库中的提问,找出相似度最大的问题-答案对,返回该问题-答案对的答案。在机器人刚投入使用时,因为语料库中没有相关聊天记录,机器人只能从网络中搜索相关答案返回。在聊天进行一段时间后,机器人会变得越来越“聪明”。研究中使用的规则涉及词序和词数两方面。

2.1关键词的提取

在网络聊天机器人“瞎聊”的后台数据库中前期存储问题模板和回答模板,对于输入的句子要在模板库中进行匹配。为此,首先要进行关键词的提取。名词是句子中信息量最大的词,因此在提取名词时,需要增加其权重。关键词提取后可以计算输入问题与模板库中问题的相同关键词个数,记为F1:

F1 = WordSim(Q2,Q1)

其中,Q2为两句中相同词的个数,如果是名词就加权,则一个词相当于两个词。Q1为问题中关键词个数,同样如果是名词就加权,则一个词相当于两个词。一般认为语义相同的句子长度应该一样或者相差无几,句子长度差别大的两个句子其语义相同的可能性小,因此接下来计算句子长度F2:

F2 = LenSim(Q2,Q1)=1 - 绝对值(Len(Q2)-Len(Q1))/(Len(Q2)+Len(Q1))

Len是指句子中关键词的个数。根据该公式。如果两句话句子长度一样,则F2=1;如果两句话差别非常打,则F2的值接近0。因此,直观上看,该公式具有合理性。词总是自然语言中最关键的因素,可是词本身表达语义的作用有限。词和词以一定的词汇组合起来才会形成语言,很多时候由相同的词以不同词序可以组成不同概念的句子。因此,在计算句子中的词和词数之后,主要考虑词序。

2.2关键词逆序数的计算

逆序数是数学中的概念。一般认为,对于按一定顺序排列的n个不同的元素,规定该顺序是标准词序。在这n个元素的任一排列中,当某两个元素的先后次序与标准次序不同时,就说有1个逆序。一个排列中所有逆序总数叫做这个排列的逆序数。句子中的词可以认为是一种排列,句子的排列顺序不同语义也不同,因此本算法考虑问题中关键词的排列顺序,记为F3。

F3 = OrdSim(Q2,Q1) = 1 – Rev(Q2, Q1)/MaxRev(Q2, Q1)

其中,MaxRev(Q2, Q1)表示Q2与Q1相同关键词个数的自然数序列的最大逆序数,例:若Q2与Q1相同关键词的个数为4,自然数序列为{4,3,2,1},它的逆序数为6。Rev(Q2, Q1)表示Q2中关键词在Q1中的位置构成的自然数序列的逆序数。例:将Q1中所有的词分别记为词1,词2,….,等等。Q2中的第1个词是Q1中的第5个词,Q2中的第3个词是Q1中的第4个词,Q2中的第5个词是Q1中的第3个词,Q2中的第6个词是Q1中的第6个词。则它们构成的自然数序列为{5,4,3,6},它的逆序数为3,注意此处只关注Q2与Q1中相同的关键词,若一个关键词出现多次,取最先出现的位置。根据该公式,如果关键词词序相同,则逆序数Rev(Q2, Q1)的值为0,因此OrdSim(Q2,Q1)的值为1。与此相反,如果词序完全不同,逆序数Rev(Q2, Q1)的值接近最大值MaxRev(Q2, Q1),OrdSim(Q2,Q1)的值为0。

2.3关键词距离计算

对于关键词相同、关键词词序相同的两句话,其语义不一定相同。还要考虑关键词之间的距离,因为关键词之间可能会嵌入语义丰富的其他词语。因此,问句中关键词的排列和其语义密切相关,两句中关键词相同可是它们的距离如果不同,其语义也不同。需要将关键词之间的距离考虑进来。本研究中引入如下公式:

F4 = DisSim(Q2,Q1)= 1 – Dis(Q2)/(Dis(Q2)+Dis(Q1))

其中,Dis(Q1)表示Q1中非重复关键词中最左及最右关键词之间的距离;Dis(Q2)表示Q2与Q1中相同的最左及最右关键词之间的距离。若关键词出现多次,以产生最小距离值为准。

2.4相同关键词在Q2中的相同个数比例

模板库中的句子可能语义非常丰富,包含很多关键词,因而本研究引入相同关键词在模板问句中的个数,以提高计算的精度。公式如下:

F5 = SimAtQ2(Q2) = WordSim(Q2,Q1)/Len(Q2)

其中,WordSim(Q2,Q1)表示相同关键词的个数; Len(Q2)表示Q2中关键词个数。公式中,F5的值最大为1,也即是两句关键词完全相同达到一一对应的程度。该值如果很小,则表示模板句的语义很丰富,问题的语义只占其中很小的一部分,两句语义相似度很小。

2.5 句子相似度计算公式

如前所述,在获取了F1、F2、F3、F4、F5之后,Q1与Q2的相似度记为SenSim(Q1,Q2),这样最后的句子相似度计算考虑5种可能的因素,其最后公式为:

SenSim(Q2,Q1)= 1WordSim(Q2,Q1)+ 2LenSim(Q2,Q1)+ 3OrdSim(Q2,Q1)+ 4DisSim(Q2,Q1)+ 5SimAtQ2(Q2)

其中为系数,1+2+3+4+5= 1。该公式综合考虑问题句子和模板句子语义的各个方面,其值为各因素的加权求和。系数的计算要根据实际的应用环境确定。

3实验与结果分析

本研究中的算法应用到聊天机器人“瞎聊”的设计中,使该机器人具有了一定的智能,

能够随时随地和人聊天。如果用户的提问在问题库中没有记录,机器人会自动在网上搜索,给出最有可能的答案。本研究调用“瞎聊”的后台聊天记录,时间区间为2012.6.18-2016.11.24,句子总数为65534,其中特殊值共29487句,其他正常值为36047。

特殊值分布如表1:

表1 特殊相似度值及分布

Tab.1 Similarity with special value and its distribution

相似度值0-11

例句数量81229728378

表1中相似度值为0表示用户的问句有些异常,比如用户重复提问同一个问题,这时机器人会返回预先设定的回答,如“你怎么老是问同一个问题?”。相似度值为-1表示用户问题是新问题,在数据库中找不到相似的问题,这时机器人从网上搜索相关答案返回。相似度值为1表示数据库中有完全相同的问题,将其回答返回即可。除表1中的特殊值外,其他值分为5个区间,具体分组和相关分布如表2所示:

表2 普通值相似度及分布

Tab.2 Similarity with common value and its distribution

相似度值v的范围0<v

v的分布(sum)11057914330709826211418

v的分布(%)0.00%29.35%39.75%19.70%7.27%3.93%

从表2可以看出,几乎100%的相似度值位于区间0.5≤v<1。这说明“瞎聊”机器人返回的回答和用户问句高度相关,只有1句相似度值过于小。其分布曲线如图1所示:

图1 用户问句和库中问句相似度分布

Fig.1 Distribution of similarity between user question and question in the data bank

图1中的相似度值区间对应表2的相似度值v的范围。区间3(0.6≤v<0.7)所占分布最大,为39.75%。这使得该机器人具有很高的相似度计算功能,好像能回答用户的任何问题。但是,这要求设计可行的全文搜索算法,这样机器人可以将搜到的答案进行排序,把最可能的答案返回给用户。此外,机器人所给出回答的精度依赖于问题库的质量,这需要进行反复的训练,这样机器人可以给出让人满意的回答。有了满意的搜索算法、高质量的问题库,还需要句子相似度计算算法。本文的算法设计从一定成都上提高了计算精度,尤其是逆序数的提出,从本质上反应了句子的特点。但是,该机器人无法利用上下文语境,只是简单地把上下文放入问题库,割裂了问题和上文的关系。比如,上文在谈论“中国”,如果提出问题“首都在哪里?”,机器人不知道问的是“中国的首都”。

4 结论

在自然语言处理中,句子语义相似度计算具有广泛的应用价格,目前的研究成果已经从

某种程度上提高了某些应用的效率,如问答系统、信息检索、自动文摘、机器翻译等。研究方法可以分为基于规则的和基于统计的两种。本研究侧重于规则的设计,虽然提高了计算的效率,但是仍然需要大规模问题库和高效的搜索算法。此外,自然语言处理的发展离不开语言学的研究,从本质上提高句子语义相似度计算的效率还需要语言理论的突破,需要从根本上阐释句子的特点和信息结构。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O6O5jRA9BTjFIfTzwfh-pYug0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券