一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于深层双向注意力的自动对话方法及系统与流程

2022-12-31 15:57:01 来源:中国专利 TAG:


1.本发明涉及自然语言处理及人工智能技术领域,具体地说是一种基于深层双向注意力的自动对话方法及系统。


背景技术:

2.自动对话技术是人机交互的重要途径,其已被广泛应用于社会的各个方面,例如智能客服、智能助手和搜索引擎等。自动对话技术作为整个计算机领域中的重点研究方向,具有极大的研究意义和应用价值。由于对话的轮次不同,自动对话方法可被划分为单轮对话和多轮对话。其中,单轮对话只需要判断一个问句和候选响应之间的关系。而多轮对话需要判断多条历史对话与候选响应之间的关系,因此其更贴近实际应用场景,同时也更具挑战性。简单来说,多轮对话的难点主要包含两点:
3.首先,历史对话序列过长,所以编码过程不可避免地会导致大量语义信息的丢失;
4.其次,由于编码过程导致的语义信息丢失,所以历史对话序列与候选响应之间的交互并不充分,从而导致响应的预测不够准确。
5.而现有多轮对话方法并没有实质性地解决上述技术问题。故如何缓解语义编码过程中的信息丢失问题以及如何增强历史对话与候选响应之间的语义交互作用,从而提高自动对话的预测准确性是目前亟待解决的技术问题。


技术实现要素:

6.本发明的技术任务是提供一种基于深层双向注意力的自动对话方法及系统,来缓解语义编码过程中的信息丢失问题以及增强历史对话与候选响应之间的语义交互作用,从而提高自动对话的预测准确性的问题。
7.本发明的技术任务是按以下方式实现的,一种基于深层双向注意力的自动对话方法,该方法具体如下:
8.获取自动对话数据集:从网络上下载已经公开的自动对话数据集或自行构建自动对话数据集;
9.构建自动对话模型:基于深层双向注意力构建自动对话模型;
10.训练自动对话模型:在自动对话数据集上对自动对话模型进行训练。
11.作为优选,构建自动对话模型具体如下:
12.构建输入数据:针对自动对话数据集中的每一条数据,联接所有的历史对话语句,句子与句子中间用间隔符“[sep]”隔开,记为h(history);在多个响应中选择一个响应作为当前响应,形式化为r(response);根据该条响应是否为正确响应,确定该条数据的标签,即:若该条响应是正确响应,则记为1;否则,则记为0;其中,h、r和标签共同组成一条输入数据;
[0013]
嵌入处理:通过token层、segment层和position层对输入数据进行嵌入处理,并将三层的嵌入表示相加,从而得到历史对话嵌入表示和候选响应嵌入表示;
[0014]
深层双向注意力编码:使用多层编码结构对历史对话嵌入表示和候选响应嵌入表示进行纵向自筛特征编码操作和横向交互特征编码操作,从而得到历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和深层横向交互特征表示,记为和
[0015]
特征压缩:使用一层全连接网络dense对深层横向交互特征表示进行映射处理,得到映射处理后的深层横向交互特征表示;再使用relu激活函数对映射处理后的深层横向交互特征表示进行映射处理,从而得到横向交互特征表示公式如下:
[0016][0017]
对历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和横向交互特征表示执行联接操作,从而得到双向特征表示公式如下:
[0018][0019]
标签预测:将双向特征表示作为输入,经过一层维度为1、激活函数为sigmod的全连接网络处理,从而得到当前响应为正确响应的概率。
[0020]
更优地,嵌入处理具体如下:
[0021]
通过token层将输入数据中的每个词均转换成固定维度的向量,得到token层的嵌入表示;
[0022]
通过segment层区分历史对话序列中的不同句子,得到segment层的嵌入表示;
[0023]
通过position层识别输入数据中每个词所在的位置,得到position层的嵌入表示;
[0024]
将token层的嵌入表示、segment层的嵌入表示和position层的嵌入表示相加,得到历史对话嵌入表示和候选响应嵌入表示公式如下:
[0025][0026][0027]
其中,h表示历史对话序列;r表示候选响应序列;token_emb()表示token层嵌入操作;segment_emb()表示segment层嵌入操作;position_emb()表示position层嵌入操作。
[0028]
更优地,深层双向注意力编码具体如下:
[0029]
第一层编码结构encoder1分别对历史对话嵌入表示和候选响应嵌入表示进行编码操作,以得到历史对话编码表示1和候选响应编码表示1,记为和公式如下:
[0030][0031][0032]
其中,表示历史对话嵌入表示,表示候选响应嵌入表示;encoder1表示第一层编码结构;
[0033]
对历史对话编码表示1和历史对话嵌入表示进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示1,记为对候选响应编码表示1和候选响应嵌入
表示进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示1,记为同时,对历史对话编码表示1和候选响应编码表示1进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示1,记为公式如下:
[0034][0035][0036][0037]
其中,表示历史对话编码表示1;表示历史对话嵌入表示;表示候选响应编码表示1;表示候选响应嵌入表示;
[0038]
第二层编码结构encoder2分别对历史对话纵向自筛特征表示1和候选响应纵向自筛特征表示1进行编码操作,以得到历史对话编码表示2和候选响应编码表示2,记为和公式如下:
[0039][0040][0041]
其中,表示历史对话纵向自筛特征表示1;表示候选响应纵向自筛特征表示1;encoder2表示第二层编码结构;
[0042]
对历史对话编码表示2和历史对话纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示2,记为对候选响应编码表示2和候选响应纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示2,记为同时,对历史对话编码表示2和候选响应编码表示2进行联接操作,然后使用self-attention机制完成两者的交互处理,从而得到横向交互特征表示2,记为公式如下:
[0043][0044][0045][0046]
其中,表示历史对话编码表示2;表示历史对话纵向自筛特征表示1;表示候选响应编码表示2;表示候选响应纵向自筛特征表示1;
[0047]
第三层编码结构encoder3分别对历史对话纵向自筛特征表示2和候选响应纵向自筛特征表示2进行编码操作;以此类推,进行多次反复编码;根据自动对话模型预设的层次
深度,直到生成最终的历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和横向交互特征表示n;对于第n层编码结构encodern,其分别对历史对话纵向自筛特征表示n-1和候选响应纵向自筛特征表示n-1进行编码操作,以得到历史对话编码表示n和候选响应编码表示n,记为和公式如下:
[0048][0049][0050]
其中,表示历史对话纵向自筛特征表示n-1;表示候选响应纵向自筛特征表示n-1;encodern表示第n层编码结构;
[0051]
对历史对话编码表示n和历史对话纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示n,记为对候选响应编码表示n和候选响应纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示n,记为同时,对历史对话编码表示n和候选响应编码表示n进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示n,记为公式如下:
[0052][0053][0054][0055]
其中,表示历史对话编码表示n;表示历史对话纵向自筛特征表示n-1;表示候选响应编码表示n;表示候选响应纵向自筛特征表示n-1;
[0056]
联接横向交互特征表示1、横向交互特征表示2、
……
、横向交互特征表示n,从而获得深层横向交互特征表示,记为公式如下:
[0057][0058]
其中,和分别表示横向交互特征表示1、横向交互特征表示2和横向交互特征表示n。
[0059]
作为优选,训练自动对话模型具体如下:
[0060]
构建损失函数:采用交叉熵作为损失函数,公式如下:
[0061][0062]
其中,y
true
为真实的标签;y
pred
为模型输出的正确概率;
[0063]
构建优化函数:经过对多种优化函数进行测试,最终选择使用adamw优化函数作为优化函数,除了其学习率设置为2e-5外,adamw的其他超参数均选择pytorch中的默认值设
置;
[0064]
当自动对话模型尚未进行训练时,需要对自动对话模型进行训练,以优化模型的参数;当自动对话模型训练完毕时,通过标签预测模块预测候选响应中的哪一个是正确响应。
[0065]
一种基于深层双向注意力的自动对话系统,该系统包括,
[0066]
自动问答数据集获取单元,用于从网络上下载已经公开的自动对话数据集或自行构建自动对话数据集;
[0067]
自动问答模型构建单元,用于基于深层双向注意力构建自动对话模型;
[0068]
自动问答模型训练单元,用于在自动对话数据集上对自动对话模型进行训练,完成候选响应的预测。
[0069]
作为优选,所述自动问答模型构建单元包括输入数据构建模块、嵌入处理模块、深层双向注意力编码模块、特征压缩模块及标签预测模块;
[0070]
输入数据构建模块用于预处理原始数据集,从而构建输入数据;
[0071]
嵌入处理模块用于通过token层、segment层和position层对输入数据进行嵌入处理,并将token层嵌入表示、segment层嵌入表示和position层嵌入表示相加,从而得到历史对话嵌入表示和候选响应嵌入表示;
[0072]
深层双向注意力编码模块用于接收嵌入处理模块输出的历史对话嵌入表示和候选响应嵌入表示,再使用多层编码结构对历史对话嵌入表示和候选响应嵌入表示依次进行纵向自筛特征编码操作和横向交互特征编码操作,从而得到历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和深层横向交互特征表示;
[0073]
特征压缩模块用于对深层横向交互特征表示进行全连接映射处理、relu映射处理,并将映射结果与历史对话纵向自筛特征表示n和候选响应纵向自筛特征表示n进行联接处理,从而得到双向特征表示;
[0074]
标签预测模块用于基于双向特征表示预测当前响应为正确响应的概率;
[0075]
所述自动问答模型训练单元包括损失函数构建模块和优化函数构建模块;
[0076]
其中,损失函数构建模块用于使用交叉熵损失函数计算预测结果与真实标签的误差;
[0077]
优化函数构建模块用于训练并调整模型中的待训练参数,减小预测误差。
[0078]
更优地,所述深层双向注意力编码模块实现方式具体如下:
[0079]
第一层编码结构encoder1分别对历史对话嵌入表示和候选响应嵌入表示进行编码操作,以得到历史对话编码表示1和候选响应编码表示1,记为和公式如下:
[0080][0081][0082]
其中,表示历史对话嵌入表示,表示候选响应嵌入表示;encoder1表示第一层编码结构;
[0083]
对历史对话编码表示1和历史对话嵌入表示进行交叉注意力cross-attention计
算,从而得到历史对话纵向自筛特征表示1,记为对候选响应编码表示1和候选响应嵌入表示进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示1,记为同时,对历史对话编码表示1和候选响应编码表示1进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示1,记为公式如下:
[0084][0085][0086][0087]
其中,表示历史对话编码表示1;表示历史对话嵌入表示;表示候选响应编码表示1;表示候选响应嵌入表示;
[0088]
第二层编码结构encoder2分别对历史对话纵向自筛特征表示1和候选响应纵向自筛特征表示1进行编码操作,以得到历史对话编码表示2和候选响应编码表示2,记为和公式如下:
[0089][0090][0091]
其中,表示历史对话纵向自筛特征表示1;表示候选响应纵向自筛特征表示1;encoder2表示第二层编码结构;
[0092]
对历史对话编码表示2和历史对话纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示2,记为对候选响应编码表示2和候选响应纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示2,记为同时,对历史对话编码表示2和候选响应编码表示2进行联接操作,然后使用self-attention机制完成两者的交互处理,从而得到横向交互特征表示2,记为公式如下:
[0093][0094][0095][0096]
其中,表示历史对话编码表示2;表示历史对话纵向自筛特征表示1;表示候选响应编码表示2;表示候选响应纵向自筛特征表示1;
[0097]
第三层编码结构encoder3分别对历史对话纵向自筛特征表示2和候选响应纵向自筛特征表示2进行编码操作;以此类推,进行多次反复编码;根据自动对话模型预设的层次深度,直到生成最终的历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和横向交互特征表示n;对于第n层编码结构encodern,其分别对历史对话纵向自筛特征表示n-1和候选响应纵向自筛特征表示n-1进行编码操作,以得到历史对话编码表示n和候选响应编码表示n,记为和公式如下:
[0098][0099][0100]
其中,表示历史对话纵向自筛特征表示n-1;表示候选响应纵向自筛特征表示n-1;encodern表示第n层编码结构;
[0101]
对历史对话编码表示n和历史对话纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示n,记为对候选响应编码表示n和候选响应纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示n,记为同时,对历史对话编码表示n和候选响应编码表示n进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示n,记为公式如下:
[0102][0103][0104][0105]
其中,表示历史对话编码表示n;表示历史对话纵向自筛特征表示n-1;表示候选响应编码表示n;表示候选响应纵向自筛特征表示n-1;
[0106]
联接横向交互特征表示1、横向交互特征表示2、
……
、横向交互特征表示n,从而获得深层横向交互特征表示,记为公式如下:
[0107][0108]
其中,和分别表示横向交互特征表示1、横向交互特征表示2和横向交互特征表示n。
[0109]
一种电子设备,包括:存储器和至少一个处理器;
[0110]
其中,所述存储器上存储有计算机程序;
[0111]
所述至少一个处理器执行所述存储器存储的计算机程序,使得所述至少一个处理器执行如上述的基于深层双向注意力的自动对话方法。
[0112]
一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述
计算机程序可被处理器执行以实现如上述的基于深层双向注意力的自动对话方法。
[0113]
本发明的基于深层双向注意力的自动对话方法及系统具有以下优点:
[0114]
(一)本发明可以有效缓解语义编码过程中的信息丢失问题,并且可以增强历史对话与候选响应之间的语义交互作用,从而提高自动对话的预测准确性;
[0115]
(二)本发明通过token层、segment层和position层对输入数据进行嵌入处理,可以捕获历史对话和候选响应中三种类型的嵌入特征,从而获得更加丰富、准确的嵌入表示;
[0116]
(三)本发明采用深层双向注意力编码,可以有效缓解语义编码过程中的信息丢失问题,从而得到更加完整、准确的语义特征表示;
[0117]
(四)本发明采用深层双向注意力编码,可以有效增强历史对话与候选响应之间的语义交互作用,从而提高自动对话的预测准确性;
[0118]
(五)本发明通过特征压缩,可以将多种特征表示进行压缩聚合,从而节省训练资源,提高训练效率;
[0119]
(六)本发明结合深层双向注意力编码,可以有效提高自动对话模型的预测准确率。
附图说明
[0120]
下面结合附图对本发明进一步说明。
[0121]
附图1为基于深层双向注意力的自动对话方法的流程框图;
[0122]
附图2为构建自动对话模型的流程框图;
[0123]
附图3为训练自动对话模型的流程框图;
[0124]
附图4为基于深层双向注意力的自动对话系统的结构框图;
[0125]
附图5为深层双向注意力编码模块的实现过程示意图;
[0126]
附图6为基于深层双向注意力的自动对话系统的交互示意图。
具体实施方式
[0127]
参照说明书附图和具体实施例对本发明的基于深层双向注意力的自动对话方法及系统作以下详细地说明。
[0128]
实施例1:
[0129]
如附图1所示,本实施例提供了一种基于深层双向注意力的自动对话方法,该方法具体如下:
[0130]
s1、获取自动对话数据集:从网络上下载已经公开的自动对话数据集或自行构建自动对话数据集;
[0131]
举例:网络上有许多已经公开的自动对话数据集,例如ubuntu dialogue corpus。该数据集中的数据格式如下表所示:
[0132][0133]
其中,在训练集和验证集中,针对相同的历史对话序列,正确响应(positive(label:1))和错误响应(negative(label:0))均只有一个;在测试集中,正确响应(positive(label:1))只有一个,错误响应(negative(label:0))有九个。
[0134]
s2、构建自动对话模型:基于深层双向注意力构建自动对话模型;
[0135]
s3、训练自动对话模型:在自动对话数据集上对自动对话模型进行训练。
[0136]
如附图2所示,本实施例步骤s2中的构建自动对话模型具体如下:
[0137]
s201、构建输入数据:针对自动对话数据集中的每一条数据,联接所有的历史对话语句,句子与句子中间用间隔符“[sep]”隔开,记为h(history);在多个响应中选择一个响应作为当前响应,形式化为r(response);根据该条响应是否为正确响应,确定该条数据的标签,即:若该条响应是正确响应,则记为1;否则,则记为0;其中,h、r和标签共同组成一条输入数据;
[0138]
举例:使用步骤s1中展示的数据作为样例,以此组成一条输入数据。其结果如下所示:
[0139]
(h:what is that ubuntu package that installs all the mp3 codec the nvidia driver dvd support etc.?[sep]you can do that easily with instructions provided here[sep]i remember there was some package that did it all for you....called ez-something[sep]easyubuntu[sep]that be it..thanks,r:man mount what flag am i looking for,1)
[0140]
s202、嵌入处理:通过token层、segment层和position层对输入数据进行嵌入处理,并将三层的嵌入表示相加,从而得到历史对话嵌入表示和候选响应嵌入表示;具体如下:
[0141]
s20201、通过token层将输入数据中的每个词均转换成固定维度的向量,得到token层的嵌入表示;
[0142]
s20202、通过segment层区分历史对话序列中的不同句子,得到segment层的嵌入表示;
[0143]
s20203、通过position层识别输入数据中每个词所在的位置,得到position层的嵌入表示;
[0144]
s20204、将token层的嵌入表示、segment层的嵌入表示和position层的嵌入表示相加,得到历史对话嵌入表示和候选响应嵌入表示公式如下:
[0145][0146][0147]
其中,h表示历史对话序列;r表示候选响应序列;token_emb()表示token层嵌入操作;segment_emb()表示segment层嵌入操作;position_emb()表示position层嵌入操作。
[0148]
举例:本发明在ubuntu dialogue corpus数据集上实施时,调用预训练语言模型bert的嵌入层完成token层嵌入、segment层嵌入、position层嵌入和相加操作,且嵌入维度选择bert嵌入层的维度,即,768维。在pytorch中,对于上面描述的代码实现如下所示:
[0149]
#使用bert的嵌入层对输入数据进行编码
[0150]
history_embed=bert.embedding(history)
[0151]
response_embed=bert.embedding(response)
[0152]
其中,history表示历史对话序列,history_embed是历史对话嵌入表示,response表示候选响应序列,response_embed是候选响应嵌入表示。
[0153]
s203、深层双向注意力编码:使用多层编码结构对历史对话嵌入表示和候选响应嵌入表示进行纵向自筛特征编码操作和横向交互特征编码操作,从而得到历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和深层横向交互特征表示,记为和
[0154]
s204、特征压缩:使用一层全连接网络dense对深层横向交互特征表示进行映射处理,得到映射处理后的深层横向交互特征表示;再使用relu激活函数对映射处理后的深层横向交互特征表示进行映射处理,从而得到横向交互特征表示公式如下:
[0155][0156]
举例:在pytorch中,对于上面描述的代码实现如下所示:
[0157]
self.dense=nn.linear(config.hidden_size*12,config.hidden_size)
[0158]
self.intermediate_act_fn=torch.nn.functional.relu
[0159]
i=self.intermediate_act_fn(self.dense(i_depth))
[0160]
其中,config.hidden_size为编码维度,在本发明中其被设置为768;i_depth为深层横向交互特征表示;i为横向交互特征表示。
[0161]
对历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和横向交互特征表示执行联接操作concat,从而得到双向特征表示公式如下:
[0162][0163]
举例:在pytorch中,对于上面描述的代码实现如下所示:
[0164]
b=torch.cat((z_h_n,z_r_n,i),dim=-1)
[0165]
其中,z_h_n为历史对话纵向自筛特征表示n;z_r_n为候选响应纵向自筛特征表示n;i为横向交互特征表示;b为双向特征表示。
[0166]
s205、标签预测:将双向特征表示作为输入,经过一层维度为1、激活函数为sigmod的全连接网络处理,从而得到当前响应为正确响应的概率。
[0167]
本实施例步骤s202中的嵌入处理
[0168]
如附图5所示,本实施例步骤s203中的深层双向注意力编码具体如下:
[0169]
s20301、第一层编码结构encoder1分别对历史对话嵌入表示和候选响应嵌入表示进行编码操作,以得到历史对话编码表示1和候选响应编码表示1,记为和公式如下:
[0170][0171][0172]
其中,表示历史对话嵌入表示,表示候选响应嵌入表示;encoder1表示第一层编码结构;
[0173]
s20302、对历史对话编码表示1和历史对话嵌入表示进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示1,记为对候选响应编码表示1和候选响应嵌入表示进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示1,记为同时,对历史对话编码表示1和候选响应编码表示1进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示1,记为公式如下:
[0174][0175][0176][0177]
其中,表示历史对话编码表示1;表示历史对话嵌入表示;表示候选响应编码表示1;表示候选响应嵌入表示;
[0178]
s20303、第二层编码结构encoder2分别对历史对话纵向自筛特征表示1和候选响应纵向自筛特征表示1进行编码操作,以得到历史对话编码表示2和候选响应编码表示2,记为和公式如下:
[0179][0180][0181]
其中,表示历史对话纵向自筛特征表示1;表示候选响应纵向自筛特征表示1;encoder2表示第二层编码结构;
[0182]
s20304、对历史对话编码表示2和历史对话纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示2,记为对候选响应编码表示2和候选响应纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示2,记为同时,对历史对话编码表示2和候选响应编码表示2进
行联接操作,然后使用self-attention机制完成两者的交互处理,从而得到横向交互特征表示2,记为公式如下:
[0183][0184][0185][0186]
其中,表示历史对话编码表示2;表示历史对话纵向自筛特征表示1;表示候选响应编码表示2;表示候选响应纵向自筛特征表示1;
[0187]
s20305、第三层编码结构encoder3分别对历史对话纵向自筛特征表示2和候选响应纵向自筛特征表示2进行编码操作;以此类推,进行多次反复编码;根据自动对话模型预设的层次深度,直到生成最终的历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和横向交互特征表示n;对于第n层编码结构encodern,其分别对历史对话纵向自筛特征表示n-1和候选响应纵向自筛特征表示n-1进行编码操作,以得到历史对话编码表示n和候选响应编码表示n,记为和公式如下:
[0188][0189][0190]
其中,表示历史对话纵向自筛特征表示n-1;表示候选响应纵向自筛特征表示n-1;encodern表示第n层编码结构;
[0191]
s20306、对历史对话编码表示n和历史对话纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示n,记为对候选响应编码表示n和候选响应纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示n,记为同时,对历史对话编码表示n和候选响应编码表示n进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示n,记为公式如下:
[0192][0193][0194][0195]
其中,表示历史对话编码表示n;表示历史对话纵向自筛特征表示n-1;表示候选响应编码表示n;表示候选响应纵向自筛特征表示n-1;
[0196]
s20307、联接横向交互特征表示1、横向交互特征表示2、
……
、横向交互特征表示
n,从而获得深层横向交互特征表示,记为公式如下:
[0197][0198]
其中,和分别表示横向交互特征表示1、横向交互特征表示2和横向交互特征表示n。
[0199]
举例:本发明在ubuntu dialogue corpus数据集上实施时,编码结构encoder选择使用transformer encoder,编码维度设置为768;层数设置为12层;
[0200]
cross attention选择使用dot-product attention计算方法,以历史对话纵向自筛特征表示1的计算为例,其计算过程如下所示:
[0201][0202]
该式表示通过点积乘法操作实现历史对话编码表示1和历史对话嵌入表示间的交互计算,表示历史对话编码表示1,eh表示历史对话嵌入表示,表示点积乘法操作;
[0203][0204]
该式表示通过归一化操作获得注意力权重α,i和i'表示对应输入张量中的元素下标,l表示输入张量eh中的元素数量,其他符号意义同上式;
[0205][0206]
该式表示使用已获得的注意力权重α完成对历史对话嵌入表示的特征筛选,从而得到史对话纵向自筛特征表示1;l表示eh和α中的元素数量;
[0207]
self attention选择使用self dot-product attention计算方法,以横向交互特征表示1的计算为例,假设其计算过程如下所示:
[0208][0209]
该式表示通过点积乘法操作实现历史对话编码表示1和候选响应编码表示1的联接结果的自注意力交互计算,l表示历史对话编码表示1和候选响应编码表示1的联接结果,表示点积乘法操作;
[0210][0211]
该式表示通过归一化操作获得注意力权重α,i和i'表示对应输入张量中的元素下标,l表示输入张量l中的元素数量,其他符号意义同上式;
[0212][0213]
该式表示使用已获得的注意力权重α完成对历史对话编码表示1和候选响应编码表示1的联接结果的自注意力特征筛选,从而得到横向交互特征表示1;l表示l和α中的元素
数量;
[0214]
在pytorch中,对于上面描述的代码实现如下所示:
[0215]
#定义cross attention的计算过程
[0216]
def cross_attention(s1,s2):
[0217]
s1_s2_dot=tf.expand_dims(s1,axis=1)*tf.expand_dims(s2,axis=2)
[0218]
sd1=tf.multiply(tf.tanh(k.dot(s1_s2_dot,self.wd)),self.vd)
[0219]
sd2=tf.squeeze(sd1,axis=-1)
[0220]
ad=tf.nn.softmax(sd2)
[0221]
qdq=k.batch_dot(ad,s2)
[0222]
return qdq
[0223]
#定义self attention的计算过程
[0224]
def self_attention(s3):
[0225]
s4=s3
[0226]
s3_s4_dot=tf.expand_dims(s3,axis=1)*tf.expand_dims(s4,axis=2)
[0227]
sd1=tf.multiply(tf.tanh(k.dot(s3_s4_dot,self.wd)),self.vd)
[0228]
sd2=tf.squeeze(sd1,axis=-1)
[0229]
ad=tf.nn.softmax(sd2)
[0230]
qdq=k.batch_dot(ad,s4)
[0231]
return qdq
[0232]
#定义编码结构
[0233]
encoder_layer=nn.transformerencoderlayer(d_model=512,nhead=8)
[0234]
self.transformer_encoder=nn.transformerencoder(encoder_layer,um_layers=12)
[0235]
#循环编码
[0236]
e_h=history_embed
[0237]
e_r=response_embed
[0238]
self.i=[]
[0239]
for i in range(n):
[0240]
f_h=self.transformer_encoder.layers[i](e_h)
[0241]
f_r=self.transformer_encoder.layers[i](e_r)
[0242]
z_h=cross_attention(f_h,e_h)
[0243]
z_r=cross_attention(f_r,e_r)
[0244]
lin=torch.cat((f_h,f_r),dim=1)
[0245]
self.i.append(self_attention(lin))
[0246]
e_h=z_h
[0247]
e_r=z_r
[0248]
z_h_final=z_h
[0249]
z_r_final=z_r
[0250]
final_i=torch.cat(self.i,dim=-1)
[0251]
其中,history_embed表示历史对话嵌入表示;response_embed表示候选响应嵌入表示;z_h_final表示z_h_final;z_r_final表示候选响应纵向自筛特征表示n;d_model表示编码器要求的词向量大小,此处设置为512;nhead表示多头注意力模型中的头数,此处设置为8;um_layer表示编码结构的层数,此处设置为12。本实施例步骤s3中的训练自动对话模型具体如下:
[0252]
s301、构建损失函数:采用交叉熵作为损失函数,公式如下:
[0253][0254]
其中,y
true
为真实的标签;y
pred
为模型输出的正确概率;
[0255]
举例:在pytorch中,对于上面描述的代码实现如下所示:
[0256]
#通过交叉熵损失函数计算预测值与标签之间的误差
[0257]
loss_fct=crossentropyloss()
[0258]
loss=loss_fct(logits.view(-1,self.num_labels),labels.view(-1))
[0259]
其中,labels为真实的标签,logits为模型输出的正确概率。
[0260]
s302、构建优化函数:经过对多种优化函数进行测试,最终选择使用adamw优化函数作为优化函数,除了其学习率设置为2e-5外,adamw的其他超参数均选择pytorch中的默认值设置;
[0261]
举例:在pytorch中,对于上面描述的代码实现如下所示:
[0262]
#通过adamw优化器对模型参数进行优化
[0263]
optimizer=adamw(optimizer_grouped_parameters,lr=2e-5)
[0264]
其中,optimizer_grouped_parameters为待优化的参数,默认为自动问答模型中的所有参数。
[0265]
当自动对话模型尚未进行训练时,需要对自动对话模型进行训练,以优化模型的参数;当自动对话模型训练完毕时,通过标签预测模块预测候选响应中的哪一个是正确响应。
[0266]
实施例2:
[0267]
如附图4所示,本实施例提供了一种基于深层双向注意力的自动对话系统,该系统包括,
[0268]
自动问答数据集获取单元,用于从网络上下载已经公开的自动对话数据集或自行构建自动对话数据集;
[0269]
自动问答模型构建单元,用于基于深层双向注意力构建自动对话模型;
[0270]
自动问答模型训练单元,用于在自动对话数据集上对自动对话模型进行训练,完成候选响应的预测。
[0271]
本实施例中的自动问答模型构建单元包括输入数据构建模块、嵌入处理模块、深层双向注意力编码模块、特征压缩模块及标签预测模块;
[0272]
输入数据构建模块用于预处理原始数据集,从而构建输入数据;
[0273]
嵌入处理模块用于通过token层、segment层和position层对输入数据进行嵌入处理,并将token层嵌入表示、segment层嵌入表示和position层嵌入表示相加,从而得到历史对话嵌入表示和候选响应嵌入表示;
[0274]
深层双向注意力编码模块用于接收嵌入处理模块输出的历史对话嵌入表示和候选响应嵌入表示,再使用多层编码结构对历史对话嵌入表示和候选响应嵌入表示依次进行纵向自筛特征编码操作和横向交互特征编码操作,从而得到历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和深层横向交互特征表示;
[0275]
特征压缩模块用于对深层横向交互特征表示进行全连接映射处理、relu映射处理,并将映射结果与历史对话纵向自筛特征表示n和候选响应纵向自筛特征表示n进行联接处理,从而得到双向特征表示;
[0276]
标签预测模块用于基于双向特征表示预测当前响应为正确响应的概率;
[0277]
本实施例中的自动问答模型训练单元包括损失函数构建模块和优化函数构建模块;
[0278]
其中,损失函数构建模块用于使用交叉熵损失函数计算预测结果与真实标签的误差;
[0279]
优化函数构建模块用于训练并调整模型中的待训练参数,减小预测误差。
[0280]
如附图6所示,嵌入处理模块对输入的历史对话和候选响应通过token层、segment层和position层进行嵌入处理,并将token层嵌入表示、segment层嵌入表示和position层嵌入表示相加,从而得到历史对话嵌入表示和候选响应嵌入表示,并将其传递给深层双向注意力编码模块;深层双向注意力编码模块包括若干层编码结构,每层编码结构对历史对话嵌入表示和候选响应嵌入表示依次进行纵向自筛特征编码操作和横向交互特征编码操作,从而得到历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和深层横向交互特征表示,并将其传递给特征压缩模块;特征压缩模块对深层横向交互特征表示进行全连接映射处理、relu映射处理,并将其映射结果与历史对话纵向自筛特征表示n和候选响应纵向自筛特征表示n进行联接处理,从而得到双向特征表示,并将其传递给标签预测模块;标签预测模块将双向特征表示映射为指定区间上的一个浮点型数值,将其作为该候选响应与历史对话的匹配度;再比较不同响应的匹配度,将匹配度最高的响应作为正确响应。
[0281]
如附图5所示,本实施例中的深层双向注意力编码模块实现方式具体如下:
[0282]
第一层编码结构encoder1分别对历史对话嵌入表示和候选响应嵌入表示进行编码操作,以得到历史对话编码表示1和候选响应编码表示1,记为和公式如下:
[0283][0284][0285]
其中,表示历史对话嵌入表示,表示候选响应嵌入表示;encoder1表示第一层编码结构;
[0286]
对历史对话编码表示1和历史对话嵌入表示进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示1,记为对候选响应编码表示1和候选响应嵌入表示进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示1,记为同时,对历史对话编码表示1和候选响应编码表示1进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示1,记为公式如
下:
[0287][0288][0289][0290]
其中,表示历史对话编码表示1;表示历史对话嵌入表示;表示候选响应编码表示1;表示候选响应嵌入表示;
[0291]
第二层编码结构encoder2分别对历史对话纵向自筛特征表示1和候选响应纵向自筛特征表示1进行编码操作,以得到历史对话编码表示2和候选响应编码表示2,记为和公式如下:
[0292][0293][0294]
其中,表示历史对话纵向自筛特征表示1;表示候选响应纵向自筛特征表示1;encoder2表示第二层编码结构;
[0295]
对历史对话编码表示2和历史对话纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示2,记为对候选响应编码表示2和候选响应纵向自筛特征表示1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示2,记为同时,对历史对话编码表示2和候选响应编码表示2进行联接操作,然后使用self-attention机制完成两者的交互处理,从而得到横向交互特征表示2,记为公式如下:
[0296][0297][0298][0299]
其中,表示历史对话编码表示2;表示历史对话纵向自筛特征表示1;表示候选响应编码表示2;表示候选响应纵向自筛特征表示1;
[0300]
第三层编码结构encoder3分别对历史对话纵向自筛特征表示2和候选响应纵向自筛特征表示2进行编码操作;以此类推,进行多次反复编码;根据自动对话模型预设的层次深度,直到生成最终的历史对话纵向自筛特征表示n、候选响应纵向自筛特征表示n和横向交互特征表示n;对于第n层编码结构encodern,其分别对历史对话纵向自筛特征表示n-1和候选响应纵向自筛特征表示n-1进行编码操作,以得到历史对话编码表示n和候选响应编码
表示n,记为和公式如下:
[0301][0302][0303]
其中,表示历史对话纵向自筛特征表示n-1;表示候选响应纵向自筛特征表示n-1;encodern表示第n层编码结构;
[0304]
对历史对话编码表示n和历史对话纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到历史对话纵向自筛特征表示n,记为对候选响应编码表示n和候选响应纵向自筛特征表示n-1进行交叉注意力cross-attention计算,从而得到候选响应纵向自筛特征表示n,记为同时,对历史对话编码表示n和候选响应编码表示n进行联接操作,再使用自注意力self-attention机制完成两者的交互处理,从而得到横向交互特征表示n,记为公式如下:
[0305][0306][0307][0308]
其中,表示历史对话编码表示n;表示历史对话纵向自筛特征表示n-1;表示候选响应编码表示n;表示候选响应纵向自筛特征表示n-1;
[0309]
联接横向交互特征表示1、横向交互特征表示2、
……
、横向交互特征表示n,从而获得深层横向交互特征表示,记为公式如下:
[0310][0311]
其中,和分别表示横向交互特征表示1、横向交互特征表示2和横向交互特征表示n。
[0312]
实施例3:
[0313]
本实施例还提供了一种电子设备,包括:存储器和处理器;
[0314]
其中,存储器存储计算机执行指令;
[0315]
处理器执行所述存储器存储的计算机执行指令,使得处理器执行本发明任一实施例中的基于深层双向注意力的自动对话方法。
[0316]
处理器可以是中央处理单元(cpu),还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通过处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
[0317]
存储器可用于储存计算机程序和/或模块,处理器通过运行或执行存储在存储器
内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现电子设备的各种功能。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器还可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,只能存储卡(smc),安全数字(sd)卡,闪存卡、至少一个磁盘存储期间、闪存器件、或其他易失性固态存储器件。
[0318]
实施例4:
[0319]
本实施例还提供了一种计算机可读存储介质,其中存储有多条指令,指令由处理器加载,使处理器执行本发明任一实施例中的基于深层双向注意力的自动对话方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
[0320]
在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
[0321]
用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-rym、dvd-rw、dvd rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
[0322]
此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
[0323]
此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
[0324]
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献