本发明属于自然语言处理技术领域,更为具体地讲,涉及一种基于transformer的中文智能对话方法。
背景技术:
随着深度学习技术的快速发展,nlp(naturelanguagemodel,自然语言处理)领域也越来越多引入了深度学习技术,其效果相比传统的基于规则或者传统统计方法的处理方式有了长足的进步。而利用transformer模型的预训练语言表示模型,如bert(bidirectionalencoderrepresentationsfromtransformers),在各项nlp任务中取得了比传统的方法表现更出色的成绩,因为transformer改进了rnn最为人诟病的训练慢的特点。利用self-attention机制实现快速并行,并且transformer可以增加到非常深的深度,充分发掘神经网络(deepneuralnetworks,dnn)模型的特征,提升模型准确率。智能化的问答系统系统层出不穷,并且给带来了许多便利。
原始的transformer模型由编码器(encoder)和解码器(decoder)组成,这种架构在机器翻译任务中取得的成功证实了模型的有效性。2018年发布的预训练语言模型bert,使用transformer的encoder为重要结构,曾在11项自然语言处理任务上取得最好成绩,预训练语言模型开始引起极大关注,并已经成为自然语言处理的新范式。而gpt更好的实现生成语言这一特点,使用了transformer的decoder,gpt单向的语言模型大大提高了推理、问答等应用问题的效果。
基于transformer的预训练语言模型极大的促进了开发领域对话的研究进展,但是目前这一技术在中文对话领域并未广泛应用
gpt网络架构是一个多层transformer的decoder网络,原始的transformer模型和gpt分别采用函数式和参数式的绝对位置编码方式,本模型中使用了完全函数式的相对位置编码,实验表明该位置编码方式使得模型在各个下游任务中得到明显提升。
对transformer模型中跨层参数进行共享,随着transformerblock层数的增加,参数数量呈指数增长。为了解决这个问题,使用了跨层参数共享的概念,学习第一个快的参数,并在剩下的5个层中重用该块,只共享注意力参数。
在训练过程中,优化器方面使用adam优化器,通常在深度神经网络训练的batchsize很大的情况下会对模型的泛化能力带来负面影响,而adam优化器通过一个自适应的方式为每个参数调整学习率,能够在batchsize很大的情况下不损失模型效果。
大规模的、高质量的中文对话数据对模型起着重要的作用,目前已知的问答系统仅能机械地的回答问题,回复常常答非所问,并未达到智能理解语义和语境的程度。
技术实现要素:
本发明的目的在于克服现有技术的不足,提供一种基于transformer的中文智能对话方法,基于深度学习算法,在理解语义和语境的基础上模拟输出流畅的、符合语境的回答。
为实现上述发明目的,本发明一种基于transformer的中文智能对话方法,其特征在于,包括以下步骤:
(1)、使用大规模的中文闲聊语料库lccc(large-scalecleanedchineseconversation)构建训练数据集;
(1.1)、构建长度为n的输入序列;
以[cls]标签作为输入序列的开始符,然后从lccc语料库中提取连续对话句,按照语句顺序将字填入输入序列,每个句子之间插入[sep]标签,每次填入句子时,判定加入当前句总长度m是否大于n,若大于n,则停止填入;若小于n则继续填入,并将未填充部分设置为空值0,从而得到输入序列sin;
(1.2)、构建等长的期望输出序列sout;
从输入序列sin的第2个字符开始依次填入至输出序列,输出序列的最后一个字符设置为空值0;
(1.3)、对输入序列和期望输出序列中的字符均用one-hot列向量进行编码,编码完成后将输入序列记为x,将期望输出序列记为y,从而构建出训练数据集{x,y},其中,x,y∈rv×n,n表示输入序列的长度,v表示经过独热编码后字符向量的维度;
(2)、搭建transformer模型
transformer模型由若干层decoder单元堆叠,在每个decoder单元中又包括自注意力模块、残差连接模块和层归一化处理模块;
(3)、利用中文闲聊语料库提供字嵌入网络对输入序列x进行嵌入操作;
将输入序列x输入至字嵌入网络,经字嵌入网络编码后得到d×n的字嵌入矩阵xwe=wx,d表示字嵌入向量的维度,w为字嵌入矩阵;
(4)、用全0或全1填充的d维列向量,其中,0或1分别表示问或答者,从而构成d×n的段嵌入矩阵xse;
(5)、计算段嵌入后矩阵xe=xwe+xse;
(6)、将xe输入transformer模块,用于提取语义信息;
(6.1)、将xe分别与三个d×d的权重矩阵wq、wk、wi相乘,得到查询矩阵q、键矩阵k和值矩阵v;
q=wqxe=[q1,q2,…,qn]
k=wkxe=[k1,k2,…,kn]
v=wvxe=[v1,v2,…,vn]
然后,基于矩阵q、k、v,引入相对位置编码,计算注意力矩阵z,设矩阵z的i列向量为zi,i=1,2,…,n,则有:
其中,qi、ki、vi分别为矩阵q、k、v对应的列向量,pij是输出位置i和输入位置j的相对位置编码向量,pij的偶数和奇数元素计算公式为:
(6.2)、残差连接;
将注意力矩阵z与段嵌入后矩阵xe相加,得到矩阵xa=z+xe,再对xa进行标准归一化处理,得到x'a,设x′i和xi分别为x'a和xa的第i列向量,则有:
其中,μi和σi分别为xi各元素的均值和标准差,ε为一极小常数,α,β为弥补归一化引起的信息损失值;
(6.3)、将x'a输入至权重矩阵为wh的前馈线性映射层,并经过relu激活,得到输出矩阵xh=relu(whx'a);
(6.4)、将矩阵xh再进行残差连接,得到矩阵x'h=x'a+xh,对矩阵x'h进行标准归一化处理,输出新的嵌入矩阵
(6.5)、重复步骤(6.1)~(6.4),经过多层decoder单元处理后输出d×n的矩阵xte;
(7)、利用反转嵌入模型w对xte进行解码操作,从而将xte重新转换回原one-hot编码空间,再经过softmax激活函数激活,输出预测矩阵
(8)、根据
(9)、重复步骤(3)~(8),利用训练数据集反复对transformer模型进行训练,在训练过程中,使用的一定学习率和权重衰减率的adam优化器进行训练,每一轮完整的训练称为一次epoch,epoch中包括多个训练样本,每次epoch完成后,判断样本的累加损失值小于等于预设阈值,则训练结束,得到训练完成的transformer模型;否则,继续重复步骤(3)~(8)进行下一轮训练,直至样本的累加损失值小于等于预设阈值;
(10)、基于transformer模型的中文智能实时对话;
将待对话的输入序列输入至transformer模型,通过transformer模型实时输出期望输出序列,从而实现中文智能实时对话。
本发明的发明目的是这样实现的:
本发明基于transformer的中文智能对话方法,先使用大规模的中文闲聊语料库lccc(large-scalecleanedchineseconversation)构建训练数据集,作为transformer模型的输入,然后基于深度学习的方式对transformer模型进行训练,直至transformer模型收敛,最后,将待对话的输入序列输入至transformer模型,通过transformer模型实时输出期望输出序列,从而实现中文智能实时对话。
同时,本发明基于transformer的中文智能对话方法还具有以下有益效果:
(1)、在transformer模型中,5层decoder单元中使用相对位置编码替代原来的绝对位置编码,并对多层的解码器进行跨层参数共享,随着transformerblock层数的增加,参数数量呈指数增长。为了解决这个问题,使用了跨层参数共享的概念,学习第一个快的参数,并在剩下的5个层中重用该块,只共享注意力参数;
(2)、发明是基于预训练语言模型gpt做改进,gpt网络架构是一个多层transformer的decoder网络,原始的transformer模型和gpt分别采用函数式和参数式的绝对位置编码方式,本发明中使用了完全函数式的相对位置编码,实验表明该位置编码方式使得模型在各个下游任务中得到明显提升;
(3)、本发明使用了在各项自然语言处理任务中取得了比传统的方法表现更出色的transformer方法来实现问答对话模型,并使用相对位置编码和参数共享来调优模型,达到了较高的问答准确率,通过网络对数据集的训练,可实现实时的问答情景,具有广阔的应用前景。
附图说明
图1是本发明基于transformer的中文智能对话方法流程图;
图2是多轮对话示意图。
具体实施方式
下面结合附图对本发明的具体实施方式进行描述,以便本领域的技术人员更好地理解本发明。需要特别提醒注意的是,在以下的描述中,当已知功能和设计的详细描述也许会淡化本发明的主要内容时,这些描述在这里将被忽略。
实施例
为了方便描述,先对具体实施方式中出现的相关专业术语进行说明:
图1是本发明基于transformer的中文智能对话方法流程图;
在本实施例中,如图1所示,本发明一种基于transformer的中文智能对话方法,包括以下步骤:
s1、使用lccc(large-scalecleanedchineseconversation),以下称为大规模的中文闲聊语料库,简称语料库构建训练数据集;
s1.1、构建长度为n=20的输入序列;
以[cls]标签作为输入序列的开始符,然后从语料库中提取连续对话句,按照语句顺序将字填入输入序列,每个句子之间插入[sep]标签,每次填入句子时,判定加入当前句总长度m是否大于n,若大于n,则停止填入;若小于n则继续填入,并将未填充部分设置为空值0,从而得到输入序列sin,[[cls][最][近][怎][么][样][sep][还][行][你][呢][sep][我][也][不][错][sep][0][0][0]];
s1.2、构建等长的期望输出序列sout;
从输入序列sin的第2个字符开始依次填入至输出序列,输出序列的最后一个字符设置为空值0,[[最][近][怎][么][样][sep][还][行][你][呢][sep][我][也][不][错][sep][0][0][0][0]];
s1.3、对输入序列和期望输出序列中的字符均用one-hot列向量进行编码,编码完成后将输入序列记为x,将期望输出序列记为y,从而构建出训练数据集{x,y},其中,x,y∈rv×n,n表示输入序列的长度,v表示经过独热编码后字符向量的维度,设v=372063,表示词表大小;
s2、搭建transformer模型
transformer模型由6层decoder单元堆叠,在每个decoder单元中又包括自注意力模块、残差连接模块和层归一化处理模块;
s3、利用中文闲聊语料库提供的字嵌入网络对输入序列x进行嵌入操作;
将输入序列x输入至字嵌入网络,经字嵌入网络编码后得到d×n的字嵌入矩阵xwe=wx,d表示字嵌入向量的维度,w为字嵌入矩阵,其中d=256;
s4、如图2所示,用全0或全1填充的d维列向量,其中,0或1分别表示问或答者,从而构成d×n的段嵌入矩阵xse,[[0][0][0][0][0][0][0][1][1][1][1][1][0][0][0][0][0][0][0][0]];
s5、计算段嵌入后矩阵xe=xwe+xse;
s6、将xe输入transformer模块,用于提取语义信息;
s6.1、将xe分别与三个d×d的权重矩阵wq、wk、wi相乘,得到查询矩阵q、键矩阵k和值矩阵v;
q=wqxe=[q1,q2,…,qn]
k=wkxe=[k1,k2,…,kn]
v=wvxe=[v1,v2,…,vn]
然后,基于矩阵q、k、v,引入相对位置编码,计算注意力矩阵z,设矩阵z的i列向量为zi,i=1,2,…,n,则有:
其中,qi、ki、vi分别为矩阵q、k、v对应的列向量,pij是输出位置i和输入位置j的相对位置编码向量,pij的偶数和奇数元素计算公式为:
在本实施例中,上述运算也可采用多头注意力机制,具体为:将q、k、v通过线性映射分成若干组{qκ,kκ,vκ}κ=1,2,...,然后对每组进行上述操作,计算出多个zκ,最后将多个zκ拼接再进行线性投影,得到多头注意力矩阵z*。
s6.2、残差连接;
将注意力矩阵z与段嵌入后矩阵xe相加,得到矩阵xa=z+xe,再对xa进行标准归一化处理,得到x'a,设x′i和xi分别为x'a和xa的第i列向量,则有:
其中,μi和σi分别为xi各元素的均值和标准差,ε为一极小常数,α,β为弥补归一化引起的信息损失值;
s6.3、将x'a输入至权重矩阵为wh的前馈线性映射层,并经过relu激活,得到输出矩阵xh=relu(whx'a);
s6.4、将矩阵xh再进行残差连接,得到矩阵x'h=x'a+xh,对矩阵x'h进行标准归一化处理,输出新的嵌入矩阵
s6.5、重复步骤s6.1~s6.4,经过多层decoder单元处理后输出d×n的矩阵xte;
s7、利用反转嵌入模型w对xte进行解码操作,从而将xte重新转换回原one-hot编码空间,再经过softmax激活函数激活,输出预测矩阵
s8、根据
s9、重复步骤s3~s8,利用训练数据集反复对transformer模型进行训练,在训练过程中,使用的学习率为2×10-5、权重衰减率为0.01的adam优化器进行训练,训练样本进行完整的训练称为一次epoch,每次epoch完成后,判断样本的累加损失值小于等于预设阈值,则训练结束,得到训练完成的transformer模型;否则,继续重复步骤s3~s8进行下一轮训练,直至样本的累加损失值小于等于预设阈值;
s10、基于transformer模型的中文智能实时对话;
将待对话的输入序列输入至transformer模型,通过transformer模型实时输出期望输出序列,从而实现中文智能实时对话。
尽管上面对本发明说明性的具体实施方式进行了描述,以便于本技术领域的技术人员理解本发明,但应该清楚,本发明不限于具体实施方式的范围,对本技术领域的普通技术人员来讲,只要各种变化在所附的权利要求限定和确定的本发明的精神和范围内,这些变化是显而易见的,一切利用本发明构思的发明创造均在保护之列。