一种层次注意力LSTM和知识图谱的多轮对话管理方法与流程

文档序号:16068478发布日期:2018-11-24 12:54阅读:452来源:国知局

本发明涉及一种层次注意力lstm和知识图谱的多轮对话管理方法,属于自然语言处理领域。

背景技术

随着计算技术与人工智能技术的发展,对话管理系统得到了越来越广泛的研究,尤其是面向特定任务的对话管理系统,可以用于机票预订等客户服务中,帮助企业有效地降低运营成本,具有重要的应用价值。根据对话系统智能化程度的不同,智能对话系统的会话表现形式可简单分为单轮对话和多轮对话两种。单轮对话较简单,没有记忆功能,而多轮对话问题和回答之间是有联系的,意图识别是多轮对话管理系统的关键子任务,只有深入理解用户的意图才能判断是否该轮对话已经完成。

早期对话系统基本是基于规则的,可以和用户进行简单的对话。然而基于规则的方法过于依赖根据经验设置的有限模型参数或是一些人工设置的模板,虽然简单有效,但是只能应用在用户提问具有明显的词汇且无指代的场景中,因此这种方法离复杂场景下的实用化还有很大差距。

在大数据时代背景下,多轮对话管理系统取得了重大的突破,大量的对话数据可以从实际的场景中获得,随着深度神经网络在越来越多的基于大量数据来进行训练的任务中取得显著的成果,基于深度学习的方法成为多轮对话管理系统研究的主流。但是目前基于深度学习的方法也存在一些问题,主要表现在两方面,一方面是没有将多轮对话中的上下文利用起来,在同一轮对话中,用户的提问,系统的回答和当前用户的问题都有一定的联系;另一方面没有结合外部知识,只是数据驱动的方法,在准确率上存在一定的差距。

随着人工智能对数据处理和理解需求逐日增加,知识图谱得到了越来越广泛的研究,简单来说知识图谱就是描述概念、实体、事件及其之间的关系的一种结构,用“属性-值“来刻画它的内在特性,比如说人有年龄、身高、体重等属性。因此这样一个知识库放入到多轮对话管理系统中,提高了用户意图判断的正确率。

本发明方法将会话中的用户和系统对话通过层次注意力机制的lstm进行深层语义提取,并联合知识图谱将用户意图和对话语义进行有机的结合,从而高效的识别当前问题的用户意图,完成多轮对话管理系统中的关键任务。



技术实现要素:

本发明的目的是为了解决现有多轮对话管理方法存在用户意图判断中缺少上下文信息和外部知识的技术缺陷,提出了一种层次注意力lstm和知识图谱的多轮对话管理方法。

本方法的核心思想为:将会话中用户和系统的对话内容作为上下文,利用上下文在单词和句子层面的重要、时序信息抽取上下文深层语义,具体分两步,首先在单词层面利用第一层注意力机制lstm抽取句子语义,其次在句子层面利用第二层注意力机制lstm抽取上下文语义;其中,注意力机制保留重要信息,且注意力机制通过知识图谱作为外部知识来实现,lstm保留时序信息,这些信息共同识别用户意图,识别结果用来判定是否开启下一个会话。本发明利用知识图谱和lstm学习了上下文深层语义、利用注意力机制过滤掉无用信息,从而提高了识别用户意图的效率和准确率。为实现上述目的,本发明采用如下技术方案:

首先进行相关定义,具体如下:

定义1:query,是指用户会向系统提出的一些问题,每一个query都会对应一个用户意图,query又分为两类:firstquery和非firstquery;

其中,firstquery和非firstquery,是指在一个会话中的用户的第一个query,相对应的会话中剩余的query就称为非firstquery;

定义2:用户意图,即用户query的主题,是用户提出query的意图,该用户意图和知识图谱中的实体相对应;

定义3:上下文,由若干个有序的句子构成,对于会话中的任意一个非firstquery而言,其前面出现的所有对话称为当前query的上下文;

定义4:层次注意力的lstm,有两层网络,第一层是注意力机制和lstm结合,第二层是将第一层的结果作为输入,然后将注意力机制和lstm结合,从而组成层次注意力的lstm;

定义5:输入序列,指词向量序列或者句向量序列,层次注意力的lstm的第一层输入序列是词向量序列,第二层输入序列是句向量序列;

定义6:上下文语义向量序列,上下文中每一个句子用一个句向量来表示,那么上下文中所有句子对应的句向量序列就是上下文语义向量序列;

定义7:上下文语义向量,用一个向量表示上下文中所有的句子,该向量就是上下文语义向量;

一种层次注意力lstm和知识图谱的多轮对话管理方法,包括如下步骤:

步骤1、构建词表、语料集、分词,再利用word2vec算法对分词结果进行学习,得出知识图谱中用户意图的词向量,具体又包括如下子步骤:

步骤1.1构建词表,将知识图谱中的用户意图作为单词整理成词表;

步骤1.2构建语料集,具体为:

通过爬虫工具在维基百科以及百度知道网站中爬取涵盖步骤1.1词表中单词的句子;

步骤1.3将步骤1.2爬取的句子进行分词;

步骤1.4训练词向量,具体用word2vec算法对步骤1.3的分词结果进行训练,输出词向量;

步骤2、输入当前query,并判断当前query是否为会话的firstquery,如果是则执行步骤3,否则执行步骤4;

其中,当前query,是指需要判断用户意图的query;会话是指对话内容,当前会话是指系统和用户已完成的对话内容,新会话是指上下文的用户意图和当前query的用户意图不同时,清除已完成对话内容,并开启新一轮的对话;

步骤3、对当前query分词并利用规则方法识别用户意图,具体又包括如下子步骤:

步骤3.1利用nltk包对当前query进行分词,得到分词结果,记为:q=[q1,q2,…,qn];

步骤3.2将步骤3.1输出的分词结果和知识图谱中的用户意图进行一一匹配,若匹配成功,则匹配结果就是用户意图,输出匹配结果并跳至步骤6;若匹配失败,则执行步骤3.3;

步骤3.3利用大规模中文概念图谱cn-probase将步骤3.1分词结果映射成概念集合p=[p1,p2,…,pm],再令q=p,执行步骤3.2;

步骤4、利用基于注意力机制lstm模型计算上下文中第s个句子的语义向量、上下文语义向量序列;

其中,上下文由若干个有序的句子构成,对于会话中的任意一个非firstquery而言,其前面出现的所有对话称为当前query的上下文;

步骤4具体又包括如下子步骤:

步骤4.1将s赋值1;

步骤4.2训练上下文单词的词向量、计算上下文中句子的隐含层向量、词向量权重和上下文中第s个句子语义向量,具体又包括如下子步骤:

步骤4.2.1利用word2vec算法训练上下文所有单词的词向量;

步骤4.2.2计算contexts的隐含层向量,记为hs,

其中,contexts表示上下文中第s个句子的语义向量;

hs具体通过公式(1)计算:

其中,表示t时刻遗忘门,表示t时刻的输入门,表示t时刻更新的信息,表示t时刻的信息,表示t-1时刻的信息,表示t时刻的输出门,表示t时刻隐含层向量,表示参数矩阵,表示步骤4.1.1中t时刻对应的词向量,表示矩阵参数,表示t-1时刻的隐含层向量,表示偏置向量参数,σ表示sigmoid函数,是lstm模型的激活函数,tanh表示双曲正切函数,是lstm模型的激活函数,°表示向量的叉乘,n表示输入序列中词向量序列的长度,为零向量;

步骤4.2.3利用用户意图和步骤4.2.2得到的隐含层向量,计算输入序列中词向量权重,记为αs,具体通过公式(2)的注意力机制来完成:

其中,表示输入序列中词向量权重的第k维,ui表示用户意图,是以向量的方式表示,hs_k表示隐含层向量hs的第k维,hs_j表示隐含层向量hs的第j维,w表示权重维度大小,e表示指数函数,g是一个前向神经网络;

步骤4.2.4利用步骤4.2.2输出的隐含层向量和步骤4.2.3输出的权重计算contexts,具体通过公式(3)计算:

其中,表示上下文中第s个句子语义向量的第k维,表示隐含层向量的第k维,表示i时刻隐含层向量;

步骤4.3判断s是否等于k,若不等于则s加1,跳步骤4.2;若等于则跳入步骤5;

其中,k是上下文中句子的个数;

步骤5、利用层次注意力lstm和知识图谱,计算上下文语义向量、识别用户意图,具体又包括如下子步骤:

步骤5.1计算上下文语义向量序列的隐含层向量、句向量权重、上下文语义向量、识别用户意图,具体又包括如下子步骤:

步骤5.1.1计算semantic的隐含层向量,记为hide;

其中,semantic表示上下文语义向量;

hide具体通过公式(4)计算:

其中,ft表示t时刻遗忘门,it表示t时刻的输入门,表示t时刻更新的信息,ct表示t时刻的信息,ct-1表示t-1时刻的信息,ot表示t时刻的输出门,ht表示t时刻隐含层向量,表示参数矩阵,contextt表示上下文语义向量序列中的第t个,表示矩阵参数,ht-1表示t-1时刻的隐含层向量,表示偏置向量参数,σ表示sigmoid函数,是lstm模型的激活函数,tanh表示双曲正切函数,是lstm模型的激活函数,°表示向量的叉乘,m表示输入序列中句向量序列的长度,h0为零向量;

步骤5.1.2利用用户意图ui和步骤5.1.1输出的隐含层向量,计算输入序列中句向量权重,记为α,具体通过公式(5)的注意力机制来计算:

其中,αk表示输入序列中句向量权重的第k维,ui表示用户意图,是以向量的方式表示,hk表示在k时刻的隐含层向量,hj表示在j时刻的隐含层向量,g是一个前向神经网络;

步骤5.1.3利用步骤5.1.1得到的隐含层向量和步骤5.1.2得到的权重计算上下文语义向量semantic,具体通过公式(6)计算:

1≤k≤m

semantic=[semantic1,semantic2,…,semanticn]

其中,semantick表示上下文语义向量的第k维,αk表示输入序列中句向量权重的第k维,hi_k表示隐含层向量hi的第k维;

步骤5.2利用步骤5.1输出的上下文语义向量和知识图谱识别用户意图,具体是通过逻辑回归的方法进行分类,目标函数如公式(7):

其中,uinext表示需要识别的用户意图,ui表示上下文对应的用户意图,θnext表示uinext对应的参数,θi表示词表中i位置单词所对应的参数,表示向量的连接,|v|表示词表的大小,semantic表示上下文语义向量,σ表示求和;

步骤5.3利用交叉熵的方法通过公式(8)计算计算步骤5.2中目标函数(7)的损失函数:

l=-log(p(y=uinext|ui))(8)

其中,uinext表示需要识别的用户意图,log表示以10为底的对数函数,ui表示上下文对应的用户意图;

损失函数(8)通过sampledsoftmax算法和随机梯度下降参数更新方法进行求解并输出识别的用户意图;

步骤6判断输出结果和用户意图ui是否一致,如果一致,则仍然延用当前会话,不需要开启新会话,如果不一致,则关闭当前会话并开启一个新会话;

至此,从步骤1到步骤6,完成了具有上下文语义和知识图谱外部知识的多轮对话方法。

有益效果

本发明一种层次注意力lstm和知识图谱的多轮对话管理方法,对比现有技术,具有如下有益效果:

1.结合知识图谱识别用户意图,进行对话管理,利用知识图谱自带的语义提高了会话转换的准确性;

2.利用层次的lstm,将会话中的上下文充分结合,学习到了最全面的上下文语义;

3.利用层次的注意力机制和知识图谱的用户意图,将上下文中重要的内容提取出来过滤掉无用信息,提高了对话管理效率和准确率。

附图说明

图1为本发明一种层次注意力lstm和知识图谱的多轮对话管理方法的流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下根据附图及实施例对本发明所述的文摘方法进一步详细说明。

实施例1

本实施例叙述了本发明的具体实施过程,如图1所示。

从图1可以看出,本发明一种层次注意力lstm和知识图谱的多轮对话管理方法的流程如下:

步骤a构建词表;将知识图谱中的实体都提取出来,实体代表的就是用户意图,那么词表中的所有单词就是用户意图的集合;

步骤b爬取数据;利用scrapy工具构建爬虫框架,对于步骤a词表中某一单词,爬取20条包含该单词的句子就满足停止的条件,那么语料的大小计算方法如公式(9):

len=num(uiall)*20(9)

其中,len表示爬取语料的大小,num(uiall)表示所有用户意图的个数;

步骤c学习词向量;具体是利用word2vec算法对步骤b爬取的语料集进行学习,首先利用nltk工具进行分词,将分词后的结果输入到word2vec算法中,算法目标函数如公式(10):

其中,k为窗口单词,i为当前单词,t为语料库中单词大小,利用梯度下降方法学习得到128维的词向量;

步骤d是否为firstquery;是指判断当前query是否为firstquery;如果是firstquery,则执行步骤e1,如果不是则执行步骤f1;

步骤e1将当前query分词利用nltk包进行分词,两个分词结果分别为1.[有什么比较好的手机],2.[最近苹果有活动吗];

步骤e2利用知识图谱识别用户意图;具体是将步骤e1中分词结果中每个单词和知识图谱中的用户意图进行匹配,对于结果1识别出用户意图为手机,对于结果2识别失败;

步骤e3是否成功;具体是判断匹配结果是否成功,如果成功,则匹配结果就是用户意图并执行步骤g,如果失败,则执行步骤e4;

步骤e4概念映射;将步骤e1的分词结果通过大规模中文概念图谱cn-probase映射成其概念,这样“苹果”对应的概念就是“手机”,映射完毕后执行步骤e2;

步骤f1学习上下文语义向量序列;利用word2vec算法学习上下文所有单词的词向量,对于上下文中的句子[有什么比较好的手机],该句子包括五个单词,那么就对应五个128维的词向量,将五个词向量依次输入模型的第一层,那么就对应5个时刻,对于t时刻而言,利用公式(1)计算其隐含层向量,隐含层向量的维度是256维,利用第一层注意力机制,将上下文中每个单词和当前会话的用户意图“手机”结合起来,具体利用公式(2)可以得到一个256维的权重向量[0.001,0.110,0.021,0.750,0.000,…,0.001],该权重向量的各个维度加和为1,将该权重向量和上下文中的每个句子进行公式(3)的操作即可得到上下文中每个句子的句向量,这些向量有序的排列起来就得到上下文语义向量序列;

步骤f2利用层次注意力的lstm识别用户意图;将上下文语义向量序列输入到模型的第二层,上下文中句子的个数为n,那么就有n个维度为128的向量作为输入,也就对应着n个时刻,对于t时刻而言,利用公式(4)计算其隐含层向量,隐含层向量的维度是256维,利用第二层注意力机制,将上下文中每个句子和当前会话的用户意图“手机”结合起来,具体利用公式(5)可以得到一个256维的权重向量[0.000,0.810,0.011,0.005,0.000,…,0.001],该权重向量的各个维度加和为1,将该权重向量和上下文中的每个句子进行公式(6)的操作即可得到上下文中每个句子的句向量,这些向量有序的排列起来就得到上下文语义向量,利用逻辑回归的方法进行分类,得到分类概率[0.901,0.000,0.001,0.000,…,0.003],分类概率各个维度加和等于1,概率最大的对应的是用户意图;

步骤g输出用户意图,具体是输出识别的用户意图,即输出“手机”;

步骤h是否相同;具体是判断步骤g输出的用户意图和当前会话的用户意图“手机”是否一致,结果是一致,则仍然延用当前会话,不需要开启新会话。

以上对本发明“一种层次注意力lstm和知识图谱的多轮对话管理方法”进行了详细的说明,但本发明的具体实施形式并不局限于此。实施例说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

在不背离本发明所述方法的精神和权利要求范围的情况下对它进行的各种显而易见的改变都在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1