改进Transformer融入知识的端到端对话方法与流程

文档序号:30424974发布日期:2022-06-15 14:40阅读:193来源:国知局
改进Transformer融入知识的端到端对话方法与流程
改进transformer融入知识的端到端对话方法
技术领域
1.本发明属于自然语言处理领域,特别涉及改进transformer融入知识的端到端对话方法。


背景技术:

2.早期的对话系统基于规则和模版对输入进行回复,如eliza和alice。这种对话系统优点是回复可控;缺点是回复只能覆盖设定好的问题,需要大量人力准备问答对,不能很好的处理闲聊这种开放式聊天场景。
3.随着深度学习的发展和互联网数据的积累,利用神经网络生成回复开始流行。一种典型的结构是sequence to sequence结构。它将输入编码成语义向量,再由解码器自回归的生成回复。编码器和解码器起初一般基于rnn、lstm或gru构建。后来发展到基于注意力的结构,例如gpt和transformer。与rnn结构相比,注意力机制在特征提取和生成速度上更有优势。在大量数据上训练的模型可以生成流畅的回复。与早期基于规则和模版的方法相比,基于神经网络的对话系统是一种端到端的系统,回复生成的中间过程不可控,需要大量训练数据。优点是不需要大量的人力,生成的回复覆盖范围广,对于未知的问题也能生成流畅的回复。
4.然而基于神经网络的端到端模型虽然可以生成流畅回复,但是倾向于生成不含知识或信息的通用回复,例如“不知道”、“好的”、“嗯”。这种回复虽然没有语法错误,但是对双方的对话没有促进作用,用户很快会觉得无聊而结束对话。为了使用户有更好的对话体验,如何使模型能够生成包含知识的回复是一个值得研究的问题。
5.目前已有相关技术公开了融入知识的对话系统,核心的融入方法是将知识转化为向量,与解码器的隐向量进行拼接后生成回复字符。这种做法简单明了,但是缺少对知识更细致的解析与融合。


技术实现要素:

6.针对现有技术不足,本发明提出了改进transformer融入知识的端到端对话方法。
7.为实现上述目的,本发明的技术方案为:本发明实施例的第一方面提供了一种改进transformer融入知识的端到端对话方法,所述方法包括如下步骤:s1,收集以对话和知识组成的二元组,将该二元组作为训练数据;s2,对训练数据进行清洗,将训练数据组成包括对话、知识和回复的三元组形式,并对该三元组进行预处理;s3,构建由编码运算模块、知识解码器运算模块和解码器运算模块组成的改进的transformer模型;s4,利用步骤s1得到的训练数据与步骤s2得到的三元组训练步骤s3构建的改进的transformer模型,并保存;s5,将以对话和知识组成的二元组输入训练好的改进的transformer模型中,模型
预测输出回复结果;s6,用户对模型输出的回复结果进行回复后,将模型输出的回复结果和用户回复拼接到对话记录串中,并选取新的知识输入训练好的改进的transformer模型中持续进行端到端对话。
8.进一步地,所述预处理包括去掉空格,制表符,换行符,字母全部转化为小写,字符归一化在内的操作。
9.进一步地,所述对话具体为:将最近的对话记录拼接成字符串,保留最新对话记录以保证拼接后的字符串长度不超过512,更早的对话记录将被舍弃;如果最新一条回复的字符串长度超过512,则截取后512个字符串。
10.进一步地,所述知识和回复为长度不超过512的字符串。
11.进一步地,对三元组进行预处理包括将字符对应成数字索引;并进行对话的拼接,生成说话者标识序列;所述说话者标识序列中的0表示说话者是用户,1表示说话者是机器人。
12.进一步地,改进的transformer模型中的编码运算模块、解码器运算模块与标准transformer模型中的编码运算模块、解码器运算模块的结构相同。
13.进一步地,改进的transformer模型中的知识解码器运算模块将标准transformer模型中解码器运算模块中的掩码值全部置为0,不带掩码,使得多头掩码注意力机制改为多头注意力机制,每个位置都能关注到所有位置的信息。
14.进一步地,所述步骤s5中模型预测输出回复结果的过程具体为:将编码运算模块每个编码层的输出向量接入线性层再经过逻辑回归得到概率向量,用贪心搜索法或集束搜索法生成回复,直到生成结束符或长度等于阈值,所述阈值小于等于512,将生成的回复索引向量转化为字符串输出。
15.本发明实施例的第二方面提供了一种改进transformer融入知识的端到端对话装置,包括存储器和处理器,所述存储器与所述处理器耦接;其中,所述存储器用于存储程序数据,所述处理器用于执行所述程序数据以实现上述的改进transformer融入知识的端到端对话方法。
16.本发明实施例的第三方面提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述的改进transformer融入知识的端到端对话方法。
17.本发明的有益效果为:本发明利用transformer模型对文本特征提取能力强的优点,对输入的对话和知识进行编码。改进的transformer模型将输入对话进行特征提取和编码,生成对话编码。知识解码器对输入的知识进行特征提取和编码。知识解码器会结合编码器生成的对话编码对输入的知识进行特征提取和编码;这一过程通过模型结构中的交叉注意力机制实现。改进的transformer模型以这种方式实现输入对话对输入知识的细致选择和深度融合。改进的transformer模型的解码器结合知识编码器提取的编码自回归生成回复,提高回复生成的信息量和质量。改进的transformer模型相比流水线式的复杂对话系统而言是一个结构简洁的端到端对话方法,更容易工程实现,方便推广应用。
附图说明
18.图1为本发明方法的流程图;
图2为本发明所述的整体模型结构图;图3为编码运算模块的结构图;图4为本发明所述的知识解码器运算模块的结构图;图5为解码器运算模块的结构图;图6为改进的transformer模型运行的示例图;图7为本发明实施例提供的一种计算机设备的结构示意图。
具体实施方式
19.这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
20.在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
21.下面结合附图,对本发明的基于变分自编码器的融入知识和感情的端到端对话方法进行详细说明。在不冲突的情况下,下述的实施例及实施方式中的特征可以相互组合。
22.如图1所示,本发明提出了改进transformer融入知识的端到端对话方法,包括如下步骤:s1,收集以对话和知识组成的二元组,将该二元组作为训练数据;例如:对话:说话者0:我是一名救生员。
23.说话者1:令人敬佩,监督别人在水中的安全是一个很大的责任。
24.说话者0:嗯,我要走了,再见。
25.说话者1:再见。
26.知识:救生员是一名救援人员,负责监督游泳者、冲浪者和其他水上运动参与者的安全和救援工作,如游泳池、水上公园、海滩、水疗中心、河流和湖泊。
27.s2,对训练数据进行清洗,将训练数据组成包括对话、知识和回复的三元组形式,并对该三元组进行预处理。
28.具体地,所述预处理包括去掉空格,制表符,换行符,字母全部转化为小写,字符归一化。所述字符归一化是指将字符统一表示为规范形式,可以通过python的unicodedata包中的normalize方法来完成。
29.完成预处理后,将训练数据中出现过的字符收集起来创建词表。词表用于将字符对应成整数索引。例如有词表:[你,好,很,高,兴,认,识]。对于“你好很高兴认识你”这句话,“你”在词表中的索引为0,“好”在词表中的索引为1,依此类推。根据词表,“你好很高兴认识你”这句话将转化成整数索引:[0,1,2,3,4,5,6,0]。改进的transformer模型预测出回复结果后,结果是一个概率分布。从概率分布中选出合适的索引,根据词表可以得到对应的字符。生成完词表后,进行对话的拼接,同时生成说话者标识序列(token_type_ids)。
[0030]
例如这段对话和知识:说话者0:我是一名救生员。
[0031]
说话者1:令人敬佩,监督别人在水中的安全是一个很大的责任。
[0032]
说话者0:嗯,我要走了,再见。
[0033]
说话者1:再见。
[0034]
知识:救生员是一名救援人员,负责监督游泳者、冲浪者和其他水上运动参与者的安全和救援工作,如游泳池、水上公园、海滩、水疗中心、河流和湖泊。
[0035]
可以生成如下训练数据:训练数据1:对话:我是一名救生员。
[0036]
说话者标识序列:00000000知识:救生员是一名救援人员,负责监督游泳者、冲浪者和其他水上运动参与者的安全和救援工作,如游泳池、水上公园、海滩、水疗中心、河流和湖泊。
[0037]
回复:令人敬佩,监督别人在水中的安全是一个很大的责任。
[0038]
训练数据2:对话:我是一名救生员。令人敬佩,监督别人在水中的安全是一个很大的责任。
[0039]
说话者标识序列:00000000111111111111111111111111知识:救生员是一名救援人员,负责监督游泳者、冲浪者和其他水上运动参与者的安全和救援工作,如游泳池、水上公园、海滩、水疗中心、河流和湖泊。
[0040]
回复:嗯,我要走了,再见。
[0041]
训练数据3:对话:我是一名救生员。令人敬佩,监督别人在水中的安全是一个很大的责任。嗯,我要走了,再见。
[0042]
说话者标识序列:000000001111111111111111111111110000000000知识:救生员是一名救援人员,负责监督游泳者、冲浪者和其他水上运动参与者的安全和救援工作,如游泳池、水上公园、海滩、水疗中心、河流和湖泊。
[0043]
回复:再见。
[0044]
如上述例子所示,说话者标识序列是标识这句话是由哪个说话者所说,模型通过这个标识区分拼接的对话。
[0045]
拼接对话时,如果对话长度超过512长度,则先前的对话记录将被舍弃,因此说话者标识序列以1开始。
[0046]
如果开始构造训练数据时,说话者第一条对话长度就超过512,则截取后512个字符作为对话,之前的字符将被舍弃。与多条对话拼接起来超过512长度的处理不同,多条对话拼接起来超过512长度时,先前的整条对话记录将舍弃,直到长度小于512。而单条对话长度就大于512时,截取后512个字符作为对话。
[0047]
构造好训练数据后,将训练数据由字符转为整数索引。
[0048]
s3,构建由编码运算模块、知识解码器运算模块和解码器运算模块组成的改进的transformer模型;所述改进的transformer模型的结构如图2所示。利用步骤s1得到的训练数据与步骤s2得到的三元组训练改进的transformer模型,并保存。
[0049]
具体地,编码运算模块如图2中的左边一列所示。由若干编码层(encoder)串联组成。encoder模块的结构如图3所示。输入经过多头注意力,残差连接,层归一化,线性层,残差连接,层归一化之后得到输出。本实施例采用6层encoder组成编码运算模块。
[0050]
其中,知识解码器运算模块如图2中的中间一列所示,由若干层知识解码器运算(knowledge_decoder)组成。knowledge_decoder模块的结构如图4所示。输入经过多头注意力,残差连接,层归一化之后,经过交叉注意力,残差连接,层归一化,线性层,残差连接,层归一化得到输出。本实施例采用6层knowledge_decoder组成知识解码器。
[0051]
其中,解码器运算模块如图2中的右边一列所示,由若干层解码层(decoder)所示。解码器运算模块的结构图如图5所示。输入经过多头掩码注意力,残差连接,层归一化之后,经过交叉注意力,残差连接,层归一化,线性层,残差连接,层归一化得到输出。本实施例采用6层decoder组成解码器。
[0052]
其中,知识解码器运算模块knowledge_decoder和解码器运算模块decoder结构的不同之处在输入经过的第一层注意力层。knowledge_decoder中输入经过的第一层注意力层不带掩码,注意力可以关注到全局的信息。decoder输入经过的第一层注意力层带有掩码,掩码的存在保证了注意力只能关注到先前的信息, 有利于自回归的生成回复。在具体实现过程中,由于知识解码器运算模块(knowledge_decoder)和解码器运算模块(decoder)的结构相似,可以借助解码器运算(decoder)来实现。将解码器运算模块(decoder)中多头掩码注意力层multiheadmaskedattention中的掩码矩阵值全部置成0即可。
[0053]
改进的transformer模型训练时,目标是使模型生成标签句子的概率最大,其损失函数的公式如下:其中,loss为损失函数, z为回复索引向量, z
^
为生成索引向量, m+1为生成结束符的位置,为t时候生成的字符,为t时候的标签字符,为t时刻之前生成的句子, x为用户输入句子的字嵌入矩阵。
[0054]
训练模型的方法包括free running和teacher forcing两种。free running是将模型上一个时刻生成的输出作为当前时刻的输入进行训练。teacher forcing是将上一个时刻的标签作为当前的输入进行训练。
[0055]
在模型刚开始训练的时候性能很差,不能生成好的结果。采用free running的方法训练模型,生成过程中得到的不好的结果会影响后续的生成,导致模型收敛慢,训练过程长。teacher forcing方法将上一个时刻的标签作为当前的输入进行训练,使模型能更快收敛,避免了坏的生成结果对后续的影响。然而teacher forcing方法也有缺点,模型在测试时,通过自回归的方式生成结果。由于不能将标签作为输入,模型可能取得很差的结果。综合考虑两种方法的优缺点,本实施例采用teacher forcing的方法训练模型。
[0056]
训练好模型并保存。保存模型的方式主要有两种:只保存参数和保存完整模型。只保存参数的方法优点是节省存储空间,缺点是在其他地方加载时,需要知道模型的结构信息。保存完整模型的方法需要更多的存储空间,但是加载使用的时候更方便。模型存储时,
不同的训练框架有不同的后缀名,也可以存储为onnx后缀名的通用格式。本实施例将模型的参数存储为onnx格式的文件。
[0057]
s4,接受用户输入,并选取相关知识;再对用户输入和相关知识进行预处理;进行预测数据的处理。
[0058]
相关知识的选取可以人工输入提供、从已有的知识中随机选择或者提取用户输入中的关键字,借助搜索引擎搜索相关信息再提供给模型。
[0059]
对于用户输入和知识进行预处理,预处理包括去掉空格,制表符,换行符,字母全部转化为小写,字符归一化。预处理的方式和对训练数据进行预处理的方式相同。
[0060]
之后再生成说话者标识序列(),并将训练数据转为整数索引矩阵。
[0061]
s5,将s4预处理后的用户输入和相关知识输入训练好的改进的transformer模型中,模型自动预测输出回复结果。
[0062]
对话经过编码器编码成对话编码矩阵,对话编码矩阵通过知识解码器模块的交叉熵运算参与知识的选择和融合。知识经过知识解码器编码成知识矩阵。知识解码矩阵通过解码器模块的交叉熵运算参与生成回复。解码器模块自回归的生成回复,当生成句号、感叹号、问号时结束。当没有上述字符生成且生成回复长度达到512时结束生成。
[0063]
具体地,将用户输入整数索引向量和说话者标识序列输入模型,模型将它们对应的嵌入向量相加,得到初始矩阵,用公式表示为:其中x为用户输入对话整数索引矩阵,token_type_ids为说话者标识序列,为得到的初始矩阵。为获取字嵌入矩阵运算, 为获取位置编码矩阵运算, 为获取说话者标识编码向量运算。
[0064]
得到初始矩阵后,将初始矩阵输入encoder,经过多头注意力,残差连接,层归一化,线性层,残差连接,层归一化之后得到输出。可以表示为:化,线性层,残差连接,层归一化之后得到输出。可以表示为:其中为计算过程中间矩阵,multiheadattention表示多头注意力运算,layernormalization表示层归一化,linear表示线性层。表示第一层encoder的输出。
[0065]
multiheadattention计算通过多套权重将输入映射成多套矩阵,每套矩阵包括查询矩阵q,键矩阵k和值矩阵v,每套qkv矩阵都做attention计算,将得到的结果拼接起来,通过一个权重映射得到结果。可表示为:其中,中括号表示拼接,attention表示注意力运算,n表示头数。
[0066]
attention计算将查询矩阵q和键矩阵k相乘后除以根号维度,再经softmax得到权重,将权重乘以v得到结果,attention计算过程可表示为:其中,d表示向量维度。
[0067]
上述过程为一个encoder的计算。本实施例采用6层encoder,6层encoder的计算过程可以表示为:其中为第i-1层编码器的输出,为第i层编码器的输出,encoder为编码器运算。
[0068]
将知识输入模型,模型将它们对应的嵌入向量相加,得到初始矩阵,用公式表示为:其中y为相关知识整数索引向量,为得到的初始矩阵,为获取字嵌入矩阵运算, 为获取位置编码矩阵运算。
[0069]
得到初始矩阵后,将初始矩阵输入knowledge_decoder,经过多头注意力,残差连接,层归一化之后,经过交叉注意力,残差连接,层归一化,线性层,残差连接,层归一化得到输出。可以表示为:为:为:其中为计算过程中间矩阵,为计算过程中间矩阵,为最后一层编码器运算(encoder)的输出矩阵。为第一层knowledge_decoder的输出。multiheadattention表示多头注意力运算,layernormalization表示层归一化,linear表示线性层。
[0070]
上述过程为一个knowledge_decoder的计算。本实施例采用6层knowledge_decoder,6层knowledge_decoder的计算过程可以表示为:其中,,为最后一层编码器运算(encoder)的输出矩阵。
[0071]
模型自回归的生成回复时,将起始字符对应的索引矩阵输入解码器,解码器将对应的嵌入向量相加,得到初始矩阵,用公式表示为:
其中为得到的初始矩阵,z为起始字符对应的索引矩阵,为获取字嵌入矩阵运算, 为获取位置编码矩阵运算。
[0072]
得到初始矩阵后,将初始矩阵输入decoder,经过多头掩码注意力,残差连接,层归一化之后,经过交叉注意力,残差连接,层归一化,线性层,残差连接,层归一化得到输出。可以表示为:以表示为:以表示为:其中为计算过程中间矩阵,为计算过程中间矩阵,为最后一层知识解码器运算(knowledge_decoder)的输出矩阵。
[0073]
为多头掩码注意力运算,通过多套权重将输入映射成多套矩阵,每套矩阵包括查询矩阵q,键矩阵k和值矩阵v,每套qkv矩阵都做maskedattention计算,将得到的结果拼接起来,通过一个权重映射得到结果。multiheadmaskedattention计算过程为:其中,中括号表示拼接,maskedattention表示掩码注意力运算,n表示头数。
[0074]
maskedattention将查询矩阵q和键矩阵k相乘再加上掩码矩阵后除以根号维度,再经softmax得到权重,将权重乘以v得到结果计算过程为:其中,d表示向量维度,m表示掩码矩阵。m中元素的取值为:掩码矩阵m的值保证了生成第i个位置词时只能关注到前面的信息。
[0075]
上述过程为一个decoder的计算。本实施例采用6层decoder,6层decoder的计算过程可以表示为:其中,,为最后一层知识解码器运算(knowledge_decoder)的输出矩阵。
[0076]
解码器输出矩阵之后,经过线性映射和归一化得到每一个位置在词表上的分布。可以表示为:
其中为每一个位置在词表上的分布,为前馈网络权重, 为t时刻第6层解码器的输出。
[0077]
寻找最佳生成结果时常用的方法有贪心搜索和集束搜索。贪心搜索是每次寻找概率最大的词作为生成词。集束搜索是一种启发式图搜索算法,在图的解空间比较大时,为了减少搜索所占空间和时间,在每一步深度扩展的时候,剪掉一些质量比较差的节点,保留下一些质量比较高的节点。具体过程为:使用广度优先策略在树的每一层建立搜索树,按照启发代价对节点进行排序,然后仅仅留下预先设定的个数的节点,仅这些节点在下一层继续扩展,其他节点则被剪掉。预先设定的个数称为集束宽度。为了简洁本实施例采用贪心搜索方法(greedysearch)。
[0078]
s6,用户对步骤s5输出回复结果进行回复后,将模型输出的回复结果和用户回复拼接到对话记录串中,并选取新的相关知识,重复步骤s4,输入训练好的改进的transformer模型中持续进行端到端对话。
[0079]
具体的,对于对话:说话者0:你好说话者1:你好说话者0:再见说话者1:再见知识:你好再见用户输入“你好”对应的整数索引向量,说话者标识序列00,知识对应的整数索引向量。模型生成了回复“你好”对应的整数索引向量。将回复的整数索引向量拼接到对话记录串中,得到“你好你好”。用户之后回复“再见”,将“再见”拼接到对话记录串中,得到对话记录串“你好你好再见”和说话者标识序列001100。将知识,新的对话记录串对应的整数索引向量和说话者标识序列输入模型,模型生成回复“再见”。
[0080]
当拼接的对话记录串越来越长,长度超过512时,之前的对话将被舍弃,处理方式和第二步处理时相同。
[0081]
模型运行的一个示例如图6所示:用户输入“我是一名救生员”。
[0082]
相关知识输入“救生员是一名救援人员,负责监督游泳者、冲浪者和其他水上运动参与者的安全和救援工作,如游泳池、水上公园、海滩、水疗中心、河流和湖泊”。
[0083]
模型输出回复“令人敬佩,监督别人在水中的安全是一个很大的责任”模型输出回复中“监督别人在水中的安全是一个很大的责任”融入了相关知识中“负责监督游泳者、冲浪者和其他水上运动参与者的安全和救援工作”的信息。如图6中下划线部分的内容所示。
[0084]
与前述改进transformer融入知识的端到端对话方法的实施例相对应,本发明还提供了改进transformer融入知识的端到端对话装置的实施例。
[0085]
参见图7,本发明实施例提供的一种改进transformer融入知识的端到端对话装置,包括一个或多个处理器,用于实现上述实施例中的改进transformer融入知识的端到端对话方法。
[0086]
本发明改进transformer融入知识的端到端对话装置的实施例可以应用在任意具备数据处理能力的设备上,该任意具备数据处理能力的设备可以为诸如计算机等设备或装置。装置实施例可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在任意具备数据处理能力的设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图7所示,为本发明改进transformer融入知识的端到端对话装置所在任意具备数据处理能力的设备的一种硬件结构图,除了图7所示的处理器、内存、网络接口、以及非易失性存储器之外,实施例中装置所在的任意具备数据处理能力的设备通常根据该任意具备数据处理能力的设备的实际功能,还可以包括其他硬件,对此不再赘述。
[0087]
上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
[0088]
对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
[0089]
本发明实施例还提供一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时,实现上述实施例中的基于多尺度心率信号的面部心率测量方法。
[0090]
所述计算机可读存储介质可以是前述任一实施例所述的任意具备数据处理能力的设备的内部存储单元,例如硬盘或内存。所述计算机可读存储介质也可以是任意具备数据处理能力的设备,例如所述设备上配备的插接式硬盘、智能存储卡(smart media card,smc)、sd卡、闪存卡(flash card)等。进一步的,所述计算机可读存储介质还可以既包括任意具备数据处理能力的设备的内部存储单元也包括外部存储设备。所述计算机可读存储介质用于存储所述计算机程序以及所述任意具备数据处理能力的设备所需的其他程序和数据,还可以用于暂时地存储已经输出或者将要输出的数据。
[0091]
以上实施例仅用于说明本发明的设计思想和特点,其目的在于使本领域内的技术人员能够了解本发明的内容并据以实施,本发明的保护范围不限于上述实施例。所以,凡依据本发明所揭示的原理、设计思路所作的等同变化或修饰,均在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1