当前位置:首页 期刊杂志

融合预训练模型的中文知识图谱问题生成方法

时间:2024-05-04

叶 子,陈小平,张 波,欧阳昱,刘辉舟

1(中国科学技术大学 计算机科学与技术学院,合肥 230027)

2(国网安徽省电力有限公司,合肥 230022)

1 引 言

近年来,智能问答技术在诸多领域得到了广泛应用,例如教育、医疗和电力等[1].传统问答系统由于缺乏知识和推理能力始终存在提升瓶颈,因此,基于知识库的问答方法成为了研究问答技术的主流方向.

知识图谱具有高效表达海量知识、深度知识推理、与领域知识高度关联等优势[2],是知识问答的优质知识来源.然而,基于知识图谱的问答技术目前尚处于起步阶段,现有中文知识图谱问答语料库大多存在规模较小,质量较差的问题,这严重制约了中文知识图谱问答技术的发展.

问题生成是利用文本数据生成自然语言形式问题的一种技术[3].文本数据可以是结构化的知识库、句法树等,也可以是篇章级文本或完整的问答语料.简单来说,问题生成是人工智能“主动提问”的技术,它的目标是生成正确且多样的问题.有了问题生成技术,以中文知识图谱三元组作为输入生成对应问题,可以生成中文知识图谱问答训练语料.不仅如此,问题生成技术对自动合成FAQ文档,自动辅导系统等应用场景也具有重要意义.

现有的问题生成方法大多是基于规则的方法,这些方法对模板的质量和数量要求较高,较为耗费人力资源,泛化能力较弱,对大规模数据的处理能力有限.要弥补这些不足,需要问题生成模型充分获取隐含在语料库中的语法模式和特征,行之有效的方法是将预训练模型与问题生成模型进行融合.预训练模型可以利用大规模语料训练词语和句子的向量化表示,充分获取语料中隐含的语义信息,最后根据特定任务设计微调方法得到结果.

本文提出一种融合预训练模型的中文知识图谱问题生成方法,其创新性有3点:1) 利用条件变分自编码器解决预训练模型难以完成问题生成任务的问题;2) 提出一种融合预训练模型和编码器-解码器架构的预编码器-源编码器-解码器架构;3) 改进了问题生成的答案编码方法.

2 相关工作

现有的问题生成方法大多是基于规则的生成方法[4,5],这些方法可以较为稳定的生成符合语法规则的问题,但是极度依赖于人工设定的规则或模板,扩展性和泛化性能较差,很难生成大规模语料.

随着机器学习技术的不断进步与发展,端到端的神经网络模型被更多地应用在了文本生成领域.在问题生成任务上,Song等人[6]通过获取网络信息提出了用于生成领域问题的方法;Venugopal等人[7]提出了问题生成的难度建模方法;Kumar等人[8]对难度可控的复杂问题生成方法进行了尝试;除此之外,研究者们对篇章级的问题生成方法也有很多新的尝试[9-11].这些方法具有较好的泛化能力,能够完成大规模语料库的文本生成问题,但缺点是生成的文本容易出现语法错误,可读性较差.

Liu等人[12]发现,如果不对基于编码器-解码器模型(Seq2seq)的问题生成方法加以限制,容易生成语义不相关的问题.因此,他们将该方法与基于模板的问题生成方法进行了结合,提出了一种基于模板的编码器-解码器模型(Template-based Seq2seq),兼顾了模型的泛化性能和问题生成的稳定性.实验结果显示这种方法较基线模型而言具有一定提升.然而这种方法始终没有办法完全脱离模板,相当于牺牲了一部分效率换取生成问题的稳定性.事实上,原始的编码器-解码器模型效果不佳是因为它对语言的特征提取能力还较为有限,只有提升问题生成模型的语义理解能力才能真正脱离模板进行大规模的问题生成.

原始的编码器-解码器模型存在并行能力较差,长期信息会丢失的问题,而基于自注意力机制的Transformer模型[13]可以解决这些问题.一方面,该模型将序列中的任意两个位置之间的距离缩小为一个常量,解决了长期依赖的问题;另一方面,该模型的计算方式具有更好的并行性,计算速度更快.Transformer模型的整体架构也是编码器-解码器模型,所以它可以很好地完成文本生成任务.

以Transformer模型为基础,谷歌提出了基于双向Transformer编码器的预训练模型BERT(Bidirectional Encoder Representation from Transformers)[14],这个模型的主要任务是预训练语言模型,其预训练任务有两种,分别为掩藏词语言模型训练(Masked LM,MLM)和预测下句(Next Sentence Prediction,NSP).预训练完成后,根据不同自然语言处理任务进行微调.BERT模型极大地提升了语言模型对语义信息的获取能力,但是由于缺少解码器部分,该模型处理文本生成问题的能力不是很强.要利用BERT这种预训练模型来完成文本生成任务,需要在BERT的下游接入解码器,然而直接接入Transformer解码器的效果并不理想.

Gupta等人[15]提出了一种基于变分自编码器(Variational Autoencoder,VAE)[16]的文本生成框架,本文利用这种思想将BERT编码器和Transformer解码器进行结合.

VAE是一种基于隐变量的生成式模型,它可以学习高维输入的非线性表征.对于一个输入x,VAE首先学习它的隐式表征z,使得输入x可以通过z重构得到.VAE可以得到z的后验分布qφ(z|x),这种后验分布一般是高斯分布N(μ(x),σ2(x)),其中参数φ={μ(x),σ2(x)}是输入x的非线性变换,同时也是以x为输入的前向神经网络的输出部分.解码器部分需要学习另一个分布pθ(x|z),指的是采样z得到解码后的x.学习该模型的损失函数为:

L(x;θ,φ)=Eqφ(z|x)[logpθ(x|z)]-KL(qφ(z|x)‖p(z))

(1)

其中第二项为两个分布之间的KL散度.

公式(1)提供了模型的置信概率p(x|θ,φ)的下界,训练过程中需要最大化这个下界.将公式(1)中的隐变量分布局限在条件y下可得条件变分自编码器(Conditional Variational Autoencoder,CVAE)[17],其损失函数如下:

L(x,y;θ,φ)=Eqφ(z|x,y)[logpθ(x|z,y)]
-KL(qφ(z|x,y)‖p(z))

(2)

3 融合预训练模型的中文知识图谱问题生成模型

本文提出的模型结构如图1所示,主要分为预编码器、源编码器和解码器3个部分.

图1 融合BERT的问题生成模型结构图Fig.1 Question generation model with BERT

3.1 预编码器

预编码器是使用预训练模型的编码器结构,其核心是BERT模型.

BERT模型的输入是句子对的序列化表示,该序列中有两个重要的标记符[CLS]和[SEP].[CLS]是起始标记符,它被用来综合表示序列的最终隐状态,可用来进行分类等.[SEP]标记符是分隔标记符,用来分隔序列中的两个句子.

序列的向量化表示由词向量,分隔向量和位置向量相加得到,其中词向量是经由训练得到的每个词或标记符的向量化表示,分隔向量用来区分某个词或标记符属于句子A还是句子B,位置向量表示每个词或标记符的位置顺序.

得到序列的向量化表示后,将进行BERT模型最重要的两个训练步骤:预训练和微调.

3.1.1 预训练

BERT模型的预训练过程主要是在两种不同的任务上进行无监督学习,即MLM和NSP.

MLM的具体实现方式是在序列中随机用[MASK]标记符来替换15%的词,然后根据未被替换的词来预测被替换的词.为了解决在训练过程出现[MASK]标记符而下游任务中未出现该标记符的问题,对于一个被替换的词,有80%时间使用[MASK]标记符进行正常替换,有10%的时间用随机词进行替换,剩下的10%时间保持该词不变,最终将三者综合后进行预测.

很多下游任务比如问答任务都需要语言模型理解不同句子之间的关系,所以BERT采用了NSP方法进行训练.在训练过程中,对于句子A,它的下一句为B.有50%的时间B为A真实的下一句,标记为“是下一句”(IsNext),其余的50%时间B是语料库中其他的随机一个句子,标记为“不是下一句”(NotNext).

预训练过程需要大量语料和较强的算力,直接采用已有的开源预训练模型可以大大节约计算成本提高效率.因此,本文在实验部分直接采用了预训练好的中文BERT参数模型进行使用.

3.1.2 微调

在微调过程中,我们将包括了头实体、关系和尾实体的中文知识图谱三元组x(o)={Eh,Er,Et}={tok1,tok2,…,tokn}与对应问题x(p)={tok1,tok2,…,tokn}进行拼接,预编码器的输入如图2所示.和BERT模型一样,头部接入[CLS]标记符.x(o)与x(p)用[SEP]进行分隔,尾部接入结束符,得到序列S,输入装载BERT的预编码器部分.

图2 预编码器的输入表示Fig.2 Input representation of p-encoder

序列S进行训练可得到T[CLS]∈H,它是训练后的综合向量表示.然后,将T[CLS]作为输入放入一个前向神经网络,将该网络的输出维映射为2H,以输出维为基准等分为两个张量,其中一个表示均值μ.由于方差大于等于0,需要对另一个张量施加Softplus激活函数,表示标准差σ,从而得到分布z~N(μ,σ).

3.2 源编码器

源编码器是对知识图谱三元组进行编码的模块,采用的是Transformer的编码器模型.源编码器的输入x(o)={Eh,Er,Et}={tok1,tok2,…,tokn}在答案编码上有略微不同,将在3.5节中介绍.在源编码器中,数据首先会经过多头的自注意力层.它会将数据分别输入到h个自注意力层中进行运算,得到h个加权后的特征矩阵,然后按列进行拼接并经过一层全连接层后得到输出.计算注意力值的公式为:

(3)

为了防止退化问题,模型中采用了残差网络[18]的短路方法将原有向量与经过自注意力层的向量进行相加并归一化.

得到注意力值之后,它会被送入一个前向神经网络,它共有两层,第一层的激活函数是ReLU,第二层是一个线性激活函数,可以表示为:

FFN(Z)=max(0,ZW1+b1)W2+b2

(4)

3.3 解码器

解码器部分采用的是Transformer的解码器模型.因为解码的过程一般为顺序操作过程,所以Transformer采用了掩式的多头注意力机制(Masked Multi-head Attention),也就是说当解码第i个向量时,解码器只能看到第i-1及其之前的解码结果.

在本文的问题模型中,我们将BERT模型得到的分布向量z与解码得到的输出o进行拼接得到z′=[z;o]作为解码器的输入.这种方式相当于预编码器提前赋予了解码器解码的模式,但不给解码器提供完整的目标问题,所以我们将这种机制称为半掩式的多头注意力机制.

同样地,半掩式多头注意力层利用短路方式进行向量的相加与归一化,然后将注意力值输入一个新的多头注意力层.该层与编码器的多头注意力层的结构完全一致,只需将输入的V,K,替换为编码器得到的V,K.类似地,将计算得到的注意力值输入一个前向神经网络.最后,进行损失函数的计算.

3.4 损失函数

Gupta等人[15]给出了该生成模型的分布推导示意图如图3所示.

图3 分布推导示意图Fig.3 Distribution derivation

参考公式(2),可得到损失函数如下:

L(x(o),x(p);θ,φ)=Eqφ(z|x(o),x(p))[logpθ(x(p)|z,x(o))]
-KL(qφ(z|x(o),x(p))‖p(z))

(5)

事实上,公式(5)中的第一项代表了源编码器和解码器的损失,第二项代表了预编码器的损失.要最大化这个下界,需要增大第一项,减小第二项.

第一项的计算最简单的方法是蒙特卡洛采样,可将公式(5)重写为:

(6)

然而使用蒙特卡洛采样法采样出的z方差较大,而且一般不可求导.因此,需要使用其他方法进行z的采样.一种利用重参数法的方法是把z分成两部分来求:一部分是预编码器中的均值μ和标准差σ,另一部分是一个随机的高斯噪声ε.即zl=g(x(o),x(p),εl)=μ+σ⊙εl,其中εl~N(0,1).这种计算方式使得随机的部分只由高斯分布决定,因此减少了方差,而且通过这种方式我们能够计算均值μ和标准差σ的梯度用以更新.

第二项的计算就是计算KL散度.首先,KL散度是恒大于0的,它描述了两个分布之间的差距,由于z是服从高斯分布的所以VAE预设p(z)服从N(0,1),这样可以直接进行计算.衡量两个高斯分布的差异可以通过它们的密度函数展开推导出,可得公式:

(7)

3.5 答案编码

在知识图谱问题生成任务中,问题的生成源为三元组x(o)={Eh,Er,Et}.其中,尾实体一般就是生成问题的答案.在图2所示的例子中,“余华”是问题的答案.事实上,在问题生成任务中答案一般不会出现在问题中,所以如果直接把尾实体进行编码后训练容易使生成的问题中出现答案,从而降低生成问题的正确率.矛盾的是,答案中又包含了很多生成问题所需的知识,例如“余华”是人物,人物与疑问词“谁”紧密相关,完全去除答案又会降低语料中包含的语义信息的利用率.为了避免这种问题,原始的答案编码方法是直接将答案替换为一个特定的标记符进行训练[19].

本文的问题生成模型中,预编码器中输入的三元组是带有答案的,而在源编码器中输入的三元组用标记符来替代答案,我们称之为答案屏蔽.这样可以让问题生成模型在预编码器中充分学习生成问题的模式,而又不会令答案影响真正生成的问题.

4 实验结果及分析

4.1 实验数据与评价指标

由于问题生成领域优质公开数据集较少,本文主要在NLPCC2017 KBQA任务提供的问答数据集上进行了实验,该数据集包含了24479个三元组问题对,其中训练集11687个,验证集2922个,测试集9870个.

评价指标主要有两类,分别是机器指标与人工指标.机器指标沿用了机器翻译中的通用评价指标BLEU(BLEU-4),ROUGE(ROUTGE-4 F-measure);对于人工指标,本文随机选择了测试结果中的200个问题来人工评价这些问题是否是符合语法的,以语法正确的问题的比例作为指标.

在问题生成任务上,能否生成多种不同的问题也是一项重要的评价指标.因此,Liu等人[12]提出了多样性(DIVERSE)作为评价指标.多样性通过计算具有相同关系的三元组所生成的问题之间的相似度来进行评价,该指标值越低说明生成问题越不相似,多样性越高,其计算公式为:

(8)

4.2 实验设置

预训练模型采用的是基于全词遮罩(Whole Word Masking)技术的中文预训练模型BERT-wwm[20].该模型层数为12,隐藏单元为768,多头注意力头数为12,参数总量为110M.

本文对语料库中的目标问题进行分词作为输入序列输入问题生成模型,利用BERT模型表示词向量,维度均为768.输入的三元组序列长度限定为15,目标问题序列长度限定为40,长度不足的序列使用标记符进行补全.

我们将源编码器与解码器的编码解码模块数设置为6,多头注意力层的头数为12.所有前向神经网络的隐藏单元数为2048.

我们设置批处理大小为32,学习率为1e-4,dropout保留率为0.9作为参数组合在测试集上进行预测,并与其他基线模型进行对比.其他基线模型均使用默认参数.

实验采用的CPU为3.7GHz Intel Core i7,RAM为32GB,GPU为NVIDIA GTX2080Ti.

4.3 实验结果分析

4.3.1 质量分析

实验比较了基于模板的方法,Seq2seq方法,基于模板的Seq2seq方法以及本文提出的融合预训练模型的问题生成方法.实验结果如表1所示,为方便展示,表中数据均为百分比结果.

表1 问题生成模型实验结果对比Table 1 Performance of question generation models

实验结果表明,基于模板的方法在人工指标和BLEU指标上都有较好的表现,出现这种情况可能有两种原因:1)训练集与测试集的知识图谱三元组具有较高的相似度,两者之间的生成方式具有相同的模式;2)测试集的规模较小,所抽取的模板能够生成大部分的问题.

较基于模板的方法而言,Seq2seq方法在ROUGE指标上有略微提高,但BLEU指标要低许多.这是因为原始的Seq2seq方法还不能够很好地获取训练语料中的语义信息,也没有如基于模板的方法一般的自然语言生成模式,所以也很难生成具有较高流畅度的问题.

基于模板的Seq2seq方法较前两种方法在3个指标上均有提升,主要原因是这种方法结合了前面两种方法的优势,既保证了生成的问题具有模板的限制,又增强了模型的泛化能力.但是这种模型还是没有充分提取语料中的语义信息,很大程度上还是依赖于模板,提升较为有限.

本文提出的方法较所有模型在所有指标上均取得了最优效果.在ROUGE指标上,较前3种方法而言,分别提升了9.12,8.55,3.85.ROUGE指标评价了模型生成的问题的召回程度,这保证了知识图谱三元组在真实问题中的体现,说明融合预训练模型的问题生成方法在语义理解能力上较前3种模型有提升;在BLEU指标上,分别提升了0.90,2.37,0.39,提升较为有限的原因可能是测试数据集与训练集相似度较高,所以基于模板的两种方法具有较高的BLEU值;在人工评价的200个生成问题中,符合语法的问题共有189个,准确率为94.5%,稳定性较好,比前3种模型分别提升了7.5,11.0,2.0.

4.3.2 多样性分析

根据公式(8)可以计算得到四种模型的DIVERSE值如表2所示:

表2 问题生成模型多样性对比Table 2 DIVERSE of proposed models

为了减少误差,计算多样性的关系种类都是至少对应3条或3条以上的三元组,共有505种.结果如表2所示,其中N=[3,4]表示包含3条或4条三元组的关系,共有406种,N≥5表示包含5条和5条以上三元组的关系,共有99组.

实验结果显示,融合预训练模型的问题生成方法总体上能够生成更加丰富多样的问题,在N=[3,4]的问题集合中取得了最优效果,但基于模板的Seq2seq方法在N>=5的问题集合中效果略好.出现这种情况可能有两个原因:1) 实验的关系种类数量太少,存在偶然性;2) 这类关系一般性较强,描述方式较为简单,如果不设计多样的模板容易生成相似度较高的问题.

5 总结与展望

本文提出了一种融合预训练模型的中文知识图谱问题生成方法.该方法以条件变分自编码器为基础,利用BERT作为预编码器,结合Transformer模型作为源编码器和解码器.该模型增强了问题生成模型的语义理解和表示能力,极大提高了泛化能力,为知识问答任务扩充语料提供了一种新的思路.该方法在NLPCC2017 KBQA数据集上优于其他现有中文知识图谱问题生成方法,并且能够生成更加具有多样性的问题.

后续的工作主要是将该问题模型融合其他预训练模型进行实验比较.还可以对答案编码部分进行改进,用命名实体识别方法标注答案词性,增强答案与疑问词之间的联系.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!