融合对话检测的端到端多轮对话改写方法、系统与存储介质与流程

文档序号:33319629发布日期:2023-03-03 19:33阅读:20来源:国知局
融合对话检测的端到端多轮对话改写方法、系统与存储介质与流程

1.本发明涉及自然语言处理技术领域,尤其涉及多轮对话系统,具体而言涉及一种融合对话检测的端到端多轮对话改写方法、系统与存储介质。


背景技术:

2.对话式ai是在工业上的一个主要应用为人机对话问答系统,包括:单论对话系统和多轮对话系统。单论对话系统,即一问一答,其他问题和答案对本次问题或答案没有任何影响;而多轮对话系统,一般是通过多次提问或回答完成对话服务。在多轮对话中,用户的输入问题常常会存在一些省略或者指代缺失,如果直接使用本轮对话内容进行回答,会出现歧义回复或无法回复的现象。
3.例如:
[0004]“用户:查一下积分“;
[0005]“机器人:可以通过**官方商城-个人中心:可查询本人订单明细、物流配送、优惠券及积分“;
[0006]”用户:打开个人中心,没有这个选项啊“[0007]
如果直接对最后一句“打开个人中心,没有这个选项啊”进行答复,无法确定是什么“选项”,所以在机器回复的时候,无法准确回答。
[0008]
因此,在多轮对话中,常常需要根据历史信息,对本轮对话内容进行修改,将信息进行填充补全,即多轮对话改写。
[0009]
如果将“打开个人中心,没有这个选项啊”改写成“打开个人中心,没有积分选项啊”,那么机器人就可以进行明确的回复。
[0010]
目前常用的多轮对话改写方法有:(1)基于pipeline的对话改写方法,首先对本轮对话进行改写检测,然后从历史对话中抽取待填充要素,最后根据规则或匹配的方法,将候选要素进行填充,完成对话改写;(2)基于seq2seq的对话改写方法,直接将历史对话以及本轮对话直接输入到端到端模型中,或先从历史对话中抽取待填充要素,将其拼接到本轮对话后,再进行本轮对话的改写内容生成。
[0011]
在实际的应用过程中,基于pipeline的方法,往往会出现严重的级联误差,并在匹配和填充后导致语句不通顺等;基于seq2seq的方法,往往需要逐字生成,导致耗时十分严重,用户体验较差。


技术实现要素:

[0012]
本发明的目的在于提出一种融合对话检测的端到端多轮对话改写方法,将对话检测的相关信息融合到生成器中,并通过联合学习的方法训练检测器和生成器,提高最终改写效果以及对话改写速度。
[0013]
根据本发明目的的第一方面,提出一种融合对话检测的端到端多轮对话改写方法,包括以下步骤:
[0014]
步骤101:从对话系统中获取用户的输入,包括,当前轮对话c以及历史轮对话u,历史轮对话u中的每一个数据表示其中一端的对话文本;
[0015]
步骤102:对获得用户的输入,使用[sep]符号依次进行每一端的对话文本的拼接,并对拼接结果进行特征提取,获得对应的特征id;
[0016]
步骤103:将获得的特征id输入到基于transformer结构的模型m的检测器中,对当前轮对话进行检测,获取当前轮对话c中每一个字符的状态,状态标签包含:a-插入、d-删除、r-替换以及k-不变;
[0017]
步骤104:根据步骤103获取的字符的状态,判断是否所有状态均为k,如果是则进行步骤105,否则进行步骤106;
[0018]
步骤105:直接返回用户当前轮对话c,不进行改写操作;
[0019]
步骤106:将步骤103获取的字符状态进行词嵌入,实现向量化,然后将向量化获得的字符状态嵌入表征e
l
与检测器输出e

进行拼接,获取拼接向量e


[0020]
步骤107:将拼接向量e

以及起始符号《sos》输入到所述基于transformer结构的模型m的生成器中,进行逐字生成,其中生成器为一个标准transformer模型decoder结构,并将其输出结果经过一个全连接层,通过softmax激活函数,进行逐字生成;
[0021]
步骤108:当预测生成的标签为结束符号《eos》时,停止生成,输出用户当前轮对话改写后的句子c


[0022]
作为可选的实施方式,所述检测器被设置成一个标准transformer模型的encoder结构,对当前轮对话进行检测,并将其输出结果经过一个全连接层,通过softmax激活函数,获取每个字的状态;其具体的实现过程包括:
[0023]
首先,将三个特征id进行嵌入表征后,按位加和,获取文本的向量表征e:
[0024]
e=e
input
(input_id)+e
position
(position_id)+e
state
(dialog_state_id)
[0025]
其中,e
input
(input_id)为input_id进行嵌入表征后获得的字嵌入表征;e
position
(position_id)为position_id进行嵌入表征后获得的位置嵌入表征;e
state
(dialog_state_id)为dialog_state_id进行嵌入表征后获得的对话状态嵌入表征;
[0026]
然后,将获取的向量表征e输入到标准transformer模型的encoder中,获得向量表征e经过编码器编码的向量表征e


[0027]e′
=transformerencoder(e)
[0028]
其中,transformerencoder为标准transformer模型encoder编码器,e

为向量表征e经过编码器编码的向量表征;
[0029]
最后,经过全连接层并激活,获得每个字的状态标签:
[0030]
p
dlabel
=softmax(we

+b)
[0031]
dlabel

=argmax(p
dlabel
)
[0032]
其中,p
dlabel
表示预测每个字状态的概率,softmax为激活函数,w和b分别为该处全连接层的权重以及偏置;dlabel

表示预测每个字状态的标签,argmax为取p
dlabel
中概率值最大的标签。
[0033]
作为可选的实施方式,在步骤107中,将拼接向量e

以及起始符号《sos》输入到所述基于transformer结构的模型m的生成器中,进行逐字生成,包括以下操作:
[0034]eg
=transformerdecoder(e

)
[0035]
p
glabel
=softmax(we+b)
[0036]
glabel

=argmax(p
glabel
)
[0037]
其中,transformerdecoder为标准transformer模型decoder解码器,eg为向量表征e

经过解码器解码的向量表征;p
glabel
表示预测词表中每个字的概率,softmax为激活函数,w和b分别为该处全连接层权重以及偏置;glabel

表示预测字的标签,argmax为取p
glabel
中概率值最大的标签。
[0038]
作为可选的实施方式,所述基于transformer结构的模型m为根据训练样本集而预先训练获得,其中,在每步训练时,将检测器的损失值lossd与生成器的损失值lossg进行动态加权,实现模型的联合训练。
[0039]
作为可选的实施方式,所述检测器的损失值lossd,计算过程表示为:
[0040][0041]
其中,dlabel为检测器文本的真实标签,p
dlabel
为检测器预测每个字状态的概率;
[0042]
所述生成器的损失值lossg,计算过程表示为::
[0043][0044]
其中,glabel为生成器文本的真实标签,p
glabel
为生成器预测词典中每个字概率;
[0045]
最后,将检测器和生成器的损失进行动态加权融合,确定最终的模型损失函数l
oss

[0046]
loss=w*lossd+(1-w)*lossg[0047]
其中,w表示检测器的损失的权重值,为可训练参数;
[0048]
由此,实现检测器和生成器的联合训练。
[0049]
根据本发明目的的第二方面,还提出一种计算机系统,包括:
[0050]
一个或多个处理器;
[0051]
存储器,存储可被操作的指令,所述指令在被一个或多个处理器执行时,实现前述融合对话检测的端到端多轮对话改写方法的过程。
[0052]
根据本发明目的的第三方面,还提出一种存储计算机程序的计算机可读取介质,所述计算机程序包括能被一个或多个计算机执行的指令,所述指令在被所述一个或多个计算机执行时,实现前述融合对话检测的端到端多轮对话改写方法的过程。
[0053]
结合以上本发明的实施例,由于现有技术中基于pipeline的对话改写方法,往往会出现严重的级联误差,并在匹配和填充后导致语句不通顺等;而基于seq2seq的对话改写方法,往往需要逐字生成,并针对很多不需要改写的句子也会进行改写生成,导致耗时十分严重;因此,在本发明提出的融合对话检测的端到端多轮对话改写方法中,通过联合学习的方法训练检测器和生成器,解决了pipeline方法级联误差及匹配和填充后语句不通顺的问题,提高检测器的检测效果;通过检测器忽略不需改写的句子以及将对话检测的相关信息融合到生成器中,解决了seq2seq方法速度较慢以及重复编码的问题,本发明的对话改写过程中不需要生成器对文本重复编码,可提高模型预测速度,同时将对话检测的相关信息融合到生成器中,提高改写句子的生成效果。
[0054]
与现有技术相比,本发明的融合对话检测的端到端多轮对话改写方法的显著优点在于:
[0055]
1、在对话状态检测部分,当检测当前对话状态为均不需要修改时,直接返回输出,不进入模型对话生成部分,从而提高了模型预测速度;
[0056]
2、当检测对话需要修改时,模型的对话生成部分,使用检测器的编码输出,不需要生成器对文本重复编码,从而提高了模型预测速度;
[0057]
3、模型的对话生成部分,将对话检测的相关信息融合到生成器中,对每一步的对话生成进行指导,从提高改写句子的生成效果;
[0058]
4、融合对话检测的端到端多轮对话改写模型采用检测器和生成器联合训练方法,在训练过程中,彼此相互影响,相互优化,从而提高了对话检测以及对话生成的效果。
[0059]
应当理解,前述构思以及在下面更加详细地描述的额外构思的所有组合只要在这样的构思不相互矛盾的情况下都可以被视为本公开的发明主题的一部分。另外,所要求保护的主题的所有组合都被视为本公开的发明主题的一部分。
[0060]
结合附图从下面的描述中可以更加全面地理解本发明教导的前述和其他方面、实施例和特征。本发明的其他附加方面例如示例性实施方式的特征和/或有益效果将在下面的描述中显见,或通过根据本发明教导的具体实施方式的实践中得知。
附图说明
[0061]
附图不意在按比例绘制。在附图中,在各个图中示出的每个相同或近似相同的组成部分可以用相同的标号表示。为了清晰起见,在每个图中,并非每个组成部分均被标记。现在,将通过例子并参考附图来描述本发明的各个方面的实施例,其中:
[0062]
图1是本发明实施例的融合对话检测的端到端多轮对话改写方法的流程示意图。
[0063]
图2是本发明实施例的基于transformer结构的模型的模型结构示意图。
[0064]
图3是本发明实施例的基于transformer结构的模型的训练过程示意图。
具体实施方式
[0065]
为了更了解本发明的技术内容,特举具体实施例并配合所附图式说明如下。
[0066]
在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定意在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。
[0067]
结合图1所示的示例性流程的融合对话检测的端到端多轮对话改写方法,其包括以下实现步骤:
[0068]
步骤101:从对话系统中获取用户的输入,包括,当前轮对话c以及历史轮对话u,历史轮对话u中的每一个数据表示其中一端的对话文本;
[0069]
步骤102:对获得用户的输入,使用[sep]符号依次进行每一端的对话文本的拼接,并对拼接结果进行特征提取,获得对应的特征id;
[0070]
步骤103:将获得的特征id输入到基于transformer结构的模型m的检测器中,对当
前轮对话进行检测,获取当前轮对话c中每一个字符的状态,状态标签包含:a-插入、d-删除、r-替换以及k-不变;
[0071]
步骤104:根据步骤103获取的字符的状态,判断是否所有状态均为k,如果是则进行步骤105,否则进行步骤106;
[0072]
步骤105:直接返回用户当前轮对话c,不进行改写操作;
[0073]
步骤106:将步骤103获取的字符状态进行词嵌入,实现向量化,然后将向量化获得的字符状态嵌入表征e
l
与检测器输出e

进行拼接,获取拼接向量e


[0074]
步骤107:将拼接向量e

以及起始符号《sos》输入到所述基于transformer结构的模型m的生成器中,进行逐字生成,其中生成器为一个标准transformer模型decoder结构,并将其输出结果经过一个全连接层,通过softmax激活函数,进行逐字生成;
[0075]
步骤108:当预测生成的标签为结束符号《eos》时,停止生成,输出用户当前轮对话改写后的句子c


[0076]
其中,在步骤102中,所述对话文本的拼接,被设置成按照对话的前后顺序依次进行文本拼接,从第一轮对话开始,拼接至当前轮对话结束。
[0077]
在步骤102中,所述特征id包括input_id、position_id和dialog_state_id;所述input_id为一个序列,其中的每个元素为文本中每一个字对应字典的id序号;所述position_id为一个序列,其中的元素从0开始,往后依次增一,表示文本中每一个字在文本中的位置;所述dialog_state_id为一个序列,其中的每个元素为文本中每一个字对应对话序列的序号。
[0078]
结合图2所示,在步骤103中,所述检测器被设置成一个标准transformer模型的encoder结构,对当前轮对话进行检测,并将其输出结果经过一个全连接层,通过softmax激活函数,获取每个字的状态。其具体的实现过程包括:
[0079]
首先,将三个特征id进行嵌入表征后,按位加和,获取文本的向量表征e:
[0080]
e=e
input
(input_id)+e
position
(position_id)+e
state
(dialog_state_id)
[0081]
其中,e
input
(input_id)为input_id进行嵌入表征后获得的字嵌入表征;e
position
(position_id)为position_id进行嵌入表征后获得的位置嵌入表征;e
state
(dialog_state_id)为dialog_state_id进行嵌入表征后获得的对话状态嵌入表征;
[0082]
然后,将获取的向量表征e输入到标准transformer模型的encoder中,获得向量表征e经过编码器编码的向量表征e


[0083]e′
=transformerencoder(e)
[0084]
其中,transformerencoder为标准transformer模型encoder编码器,e

为向量表征e经过编码器编码的向量表征;
[0085]
最后,经过全连接层并激活,获得每个字的状态标签:
[0086]
p
dlabel
=softmax(we

+b)
[0087]
dlabel

=argmax(p
dlabel
)
[0088]
其中,p
dlabel
表示预测每个字状态的概率,softmax为激活函数,w和b分别为该处全连接层的权重以及偏置;dlabel

表示预测每个字状态的标签,argmax为取p
dlabel
中概率值最大的标签。
[0089]
作为可选的实施例,在步骤106中,将步骤103获取的字符状态进行词嵌入,实现向
量化,然后将向量化获得的字符状态嵌入表征e
l
与检测器输出e

进行拼接,获取拼接向量e

,包括以下操作:
[0090]el
=e
dlabel
(dlabel

)
[0091]e″
=e
l
+e

[0092]
其中,dlabel

为步骤103中模型m的检测器对每个字符预测状态的结果,e
dlabel
为字符状态嵌入表征矩阵,e
l
为dlabel

进行嵌入表征后获得的字符状态嵌入表征;e

为将模型m的检测器transformerencoder输出结果与字符状态嵌入表征的按位加和结果。
[0093]
作为可选的实施例,在步骤107中,将拼接向量e

以及起始符号《sos》输入到所述基于transformer结构的模型m的生成器中,进行逐字生成,包括以下操作:
[0094]eg
=transformerdecoder(e

)
[0095]
p
glabel
=softmax(we+b)
[0096]
glabel

=argmax(p
glabel
)
[0097]
其中,transformerdecoder为标准transformer模型decoder解码器,eg为向量表征e

经过解码器解码的向量表征;p
glabel
表示预测词表中每个字的概率,softmax为激活函数,w和b分别为该处全连接层权重以及偏置;glabel

表示预测字的标签,argmax为取p
glabel
中概率值最大的标签。
[0098]
作为可选的实施例,所述基于transformer结构的模型m为根据训练样本集而预先训练获得,其中,在每步训练时,将检测器的损失值lossd与生成器的损失值lossg进行动态加权,实现模型的联合训练。
[0099]
其中,检测器的损失值lossd,计算过程表示为:
[0100][0101]
其中,dlabel为检测器文本的真实标签,p
dlabel
为检测器预测每个字状态的概率;
[0102]
所述生成器的损失值lossg,计算过程表示为::
[0103][0104]
其中,glabel为生成器文本的真实标签,p
glabel
为生成器预测词典中每个字概率;
[0105]
最后,将检测器和生成器的损失进行动态加权融合,确定最终的模型损失函数loss:
[0106]
loss=w*lossd+(1-w)*lossg[0107]
其中,w表示检测器的损失的权重值,为可训练参数;
[0108]
由此,实现检测器和生成器的联合训练。
[0109]
由此,本发明提出的融合对话检测的端到端多轮对话改写方法,将对话检测的相关信息融合到生成器中,并通过联合学习的方法训练检测器和生成器,提高最终改写效果以及对话改写速度。其通过将检测器与生成器联合学习的方法,解决现有pipeline方法的级联误差及匹配和填充后语句不通顺的问题,并提高检测器的检测效果;通过检测器忽略不需改写的句子以及将对话检测的相关信息融合到生成器中,解决了seq2seq方法速度较慢以及重复编码的问题。
[0110]
下面,我们结合具体的实施例,更加具体的描述上述过程的示例性实现过程。
[0111]
步骤101:从对话系统中获取用户的输入,包括当前轮对话c以及历史轮对话u,u={u1,u2,...,un};
[0112]
作为示例的对话如下:
[0113]“用户:查一下积分”;
[0114]“机器人:可以通过**官方商城-个人中心:可查询本人订单明细、物流配送、优惠券及积分”;
[0115]
用户:“打开个人中心,没有这个选项啊”;
[0116]
则:
[0117]
当前轮对话c=打开个人中心,没有这个选项啊。
[0118]
历史对话:
[0119]
u1=查一下积分;
[0120]
u2=可以通过**官方商城-个人中心:可查询本人订单明细、物流配送、优惠券及积分。
[0121]
步骤102:对101步骤中获取的输入,使用“[sep]”符号进行对话文本的拼接。
[0122]
以前述的示例对话为例,拼接结果如下:
[0123]“查一下积分[sep]可以通过**官方商城-个人中心:可查询本人订单明细、物流配送、优惠券及积分[sep]打开个人中心,没有这个选项啊”。
[0124]
然后,对拼接结果进行id转换,提取对应的特征id,包括:input_id、position_id和dialog_state_id。
[0125]
input_id为一个序列,每个元素为文本中每一个字对应字典的id序号。
[0126]
position_id为一个序列,元素从0开始,往后一次增一,表示文本中每一个字在文本中的位置。
[0127]
dialog_state_id为一个序列,每个元素为文本中每一个字对应对话序列的序号。
[0128]
步骤103:将102步骤得到得三个特征id输入到模型m的检测器中,对当前轮对话进行检测,获取当前轮对话c中每一个字符的状态,状态标签包含:a(插入)、d(删除)、r(替换)和k(不变)。
[0129]
如图2所示的模型m的结构示意,其中的检测器被配置为一个标准transformer模型的encoder结构,并将其输出结果经过一个全连接层,通过softmax激活函数,获取每个字的标签状态。
[0130]
作为示例,特征id输入到检测器,进行具体的操作如下:
[0131]
首先,将三个特征id进行嵌入表征后,进行按位加和,获取文本的向量表征:
[0132]
e=e
input
(input_id)+e
position
(position_id)+e
state
(dialog_state_id)
[0133]
其中,e
input
(input_id)为input_id进行嵌入表征后获得的字嵌入表征;e
position
(position_id)为position_id进行嵌入表征后获得的位置嵌入表征;e
state
(dialog_state_id)为dialog_state_id进行嵌入表征后获得的对话状态嵌入表征;
[0134]
然后,将获取的向量表征e,输入到标准transformer模型encoder中,获得每个字符的状态e


[0135]e′
=transformerencoder(e)
[0136]
其中,transformerencoder为标准transformer模型encoder编码器,e

为向量表征e经过编码器编码的向量表征;
[0137]
最后,经过全连接层并激活,获得每个字的标签状态:
[0138]
p
dlabel
=softmax(we

+b)
[0139]
dlabel

=argmax(p
dlabel
)
[0140]
其中,p
dlabel
表示预测每个字状态的概率,softmax为激活函数,w和b分别为全连接层权重以及偏置;dlabel

表示预测每个字状态的标签,argmax为取p
dlabel
中概率值最大的标签。
[0141]
步骤104:根据步骤103获取的字符状态,判断是否所有状态全为k。如果是则进行步骤105,否则进行步骤106。
[0142]
步骤105:直接返回用户当前轮对话c,此时不需要进行改写操作。
[0143]
步骤106:将步骤103获取的字符状态进行词嵌入,实现向量化,并与检测器输出e

进行拼接获取拼接向量e

,具体的操作过程包括:
[0144]el
=e
dlabel
(dlabel

)
[0145]e″
=e
l
+e

[0146]
其中,dlabel

为步骤103中模型m检测器对每个字符预测状态结果,e
dlabel
为字符状态嵌入表征矩阵,e
l
为dlabel

进行嵌入表征后获得的字符状态嵌入表征;e

为将模型m检测器transformerencoder输出结果与字符状态嵌入表征的按位加和结果。
[0147]
步骤107,将拼接向量e

以及起始符号“《sos》“输入到模型m的生成器中,进行逐字生成,其中,生成器为一个标准transformer模型decoder结构,并将其输出结果经过一个全连接层,通过softmax激活函数,进行逐字生成,如下:
[0148]eg
=transformerdecoder(e

)
[0149]
p
glabel
=softmax(we+b)
[0150]
glabel

=argmax(p
glabel
)
[0151]
其中,transformerdecoder为标准transformer模型decoder解码器,eg为向量表征e

经过解码器解码的向量表征;p
glabel
表示预测词表中每个字的概率,softmax为激活函数,w和b分别为全连接层权重以及偏置;glabel

表示预测字的标签,argmax为取p
glabel
中概率值最大的标签。
[0152]
步骤108:当预测生成的标签为结束符号“《eos》“时,停止生成,输出用户当前轮对话改写后的句子c


[0153]
由此,完成对对话的改写过程。
[0154]
结合图3所示的流程,示例性地表示了基于transformer结构的模型m的训练以及最优模型保存过程。
[0155]
步骤201:爬取、清洗并标注多轮对话数据集,构建数据集d。
[0156]
步骤202:将数据集按照8:1:1的比例进行切分,构建训练集d
train
、验证集d
dev
和测试集d
test

[0157]
步骤203:多轮对话改写模型训练,并每训练预定步数(例如设定为1000步)在验证集d
dev
上进行一次验证。
[0158]
其中,每步训练时,是将检测器的损失值lossd与生成器的损失值lossg进行动态加
权,实现模型的联合训练。如下:
[0159]
首先,计算检测器的损失值lossd:
[0160][0161]
其中,dlabel为检测器文本的真实标签,p
blabel
为检测器预测每个字状态的概率。
[0162]
其次,计算生成器的损失值lossg:
[0163][0164]
其中,glabel为生成器文本的真实标签,p
glabel
为生成器预测词典中每个字概率。
[0165]
最后,将检测器和生成器进行动态融合:
[0166]
loss=w*lossd+(1-w)*lossg[0167]
其中,w为可训练参数,实现检测器和生成器的联合训练。
[0168]
步骤204:判断本次验证效果是否高于上一次结果,如果是,则进行步骤205;否则进行步骤206。
[0169]
步骤205:保存当前模型m,并将及早停止数字n归0。
[0170]
步骤206:及早停止数字n进行加1。
[0171]
步骤207:判断及早停止数字n是否大于5,如果是,则进行步骤208,否则,进行步骤203。
[0172]
步骤208:停止训练。
[0173]
结合以上实施例的融合对话检测的端到端多轮对话改写方法的实现,根据本发明公开的实施例还提出一种计算机系统,包括:一个或多个处理器以及存储器。
[0174]
其中,前述的存储器被设置成可以存储可被操作执行的指令,所述指令在被一个或多个处理器执行时,实现前述的融合对话检测的端到端多轮对话改写方法的过程。
[0175]
结合以上实施例的融合对话检测的端到端多轮对话改写方法的实现,根据本发明公开的实施例还提出一种存储计算机程序的计算机可读取介质,所述计算机程序包括能被一个或多个计算机执行的指令,所述指令在被所述一个或多个计算机执行时,实现前述的融合对话检测的端到端多轮对话改写方法的过程。
[0176]
虽然本发明已以较佳实施例揭露如上,然其并非用以限定本发明。本发明所属技术领域中具有通常知识者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰。因此,本发明的保护范围当视权利要求书所界定者为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1