面向语义多样性的对话生成模型
2022-10-15卢永美卜令梅于中华
刘 家,卢永美,何 东,卜令梅,陈 黎,于中华
(四川大学 计算机学院,成都 610065)
E-mail:cl@scu.edu.cn
1 引 言
对话生成是自然语言处理中重要的研究领域之一,受到学术界和工业界的广泛关注.目前,开放域对话生成的研究主要分为检索式[1-3]、生成式[4-7]和检索-生成式[8-13].检索式方法从问-答语料库中检索与当前问题最匹配的语句作为回复,得到的回复语义流畅、信息丰富但相关性较差.为了解决检索式方法存在的问题,生成式方法将问题作为输入,通过序列到序列(Seq2seq)模型生成相关性较好的回复,但是容易生成较短且无意义的万能回复,例如“我也是”、“我不知道”等,降低了用户的体验度.近年来,为了结合检索式和生成式方法的优点,研究者提出了检索-生成式方法,先从语料库中检索出与当前问题最相关的回复,将其作为辅助信息引入到生成过程,以此提高生成回复的质量[8-13].例如,Song[8]、Wu[9]和Cai[10,11]等人利用问-答语料库中最相关的一个检索结果来生成对话.由于语料库大小有限,无法覆盖所有语言现象,所以这种做法不仅存在稀疏问题,而且严重依赖于单个检索结果的质量,当检索结果与问题相关性差或完全无关时,模型往往会产生错误或者无关的回复[13].因此,研究者开始探索如何将多个检索结果融入到回复生成中,如Cai等人[10]尝试了对多个回复骨架的嵌入表达拼接后用于回复的生成.Song等人[12]则将当前问题的编码与最相似的两个回复的嵌入拼接后作为生成模型的输入,提高了生成回复的质量.为了利用到更多的检索结果对同一类型的问题语义提取共同回复特征,Tian[13]等人提出聚类-生成方法.该方法利用K-均值算法对历史问-答对中的问题进行硬聚类,将问题-回复对分配到不同的问题-回复语义簇,根据当前问题与问题语义簇的相似性,找到最相似的回复簇,并将回复簇中所有回复信息融入到生成过程,以此提高生成回复的质量.
虽然对话生成研究取得了很大的进步,特别是聚类-生成方法从每个问题簇所对应的回答中学习该簇问题的回复模式,但是利用单个检索结果的方法和聚类-生成方法都只考虑了问题的单个语义,忽略了问题的语义多样性.如表1所示,问题中包含“孤单”和“麻烦”两种语义,而现有检索-生成方法倾向于产生回复1或回复2这类只包含一种语义信息的回复,很明显回复3才是更有效的回答,因为它从问题的多个语义方面来生成回复.
表1 问题语义多样性实例Table 1 Example of semantic multiplicity
为了解决上述挑战,本文对问题的语义多样性建模,通过径向基函数(Radial Basis Function,RBF)神经网络的软聚类方式将训练集中的问题分配到多个语义簇,从而达到捕获语义多样性的目的.模型根据当前问题与每个问题语义簇的隶属度来融合问题簇对应的回复簇信息,并用于对话生成.本文引入的RBF不仅能够解决语义多样性问题,同时由于它的可微性,使模型能够进行端到端的训练.本文在腾讯公开的大型中文单轮对话数据集Chat上进行了一系列对比和消融实验,结果表明,相比最好的聚类-生成模型,本文的模型在相关性、流畅性和信息性指标上均有明显的提升.
本文的主要贡献如下:
1)提出了基于语义多样性的对话生成模型,通过对历史问题的语义多样性建模,能够生成更相关、信息更丰富的回复.
2)引入了径向基神经网络实现训练集中的问题软聚类来捕获问题的不同语义,通过这种端到端可训练的软聚类方式使得聚类和生成过程更加紧密耦合.
3)在公开的基准数据集上进行了一系列对比和消融实验,实验结果表明,本文提出的方法在自动评价指标和人工评价指标上都明显优于目前已经提出的对话生成方法.
2 相关工作
现有的开放域对话生成方法主要分为检索式、生成式以及二者结合的检索-生成式方法.检索式方法需要构建大规模问-答对语料,对于给定的问题,根据当前问题和历史问题的相似性或者当前问题与历史回复之间的相关性从语料库中选择最合适的回复.早期的检索式方法主要使用传统的信息检索算法,如Ji[1]使用TF-IDF对问-答语句进行编码,但这种方法只考虑了字面的相似性而忽略了深层次的语义信息.为了解决传统信息检索的问题,同时受到深度学习的启发,研究者提出了一系列基于深度学习的方法建模问题和回复的语义表示[2-3,14-17].如Shen等[2]和Wan等[3]使用卷积神经网络和循环神经网络来获取问题和回复的语义嵌入.检索式方法由于直接使用语料库中的回复作为输出,因此生成的回复流畅且信息丰富,但相关性较差,并且无法产生语料库以外的回复.
为了解决检索式方法存在的问题,研究者提出了基于序列到序列的生成式方法,在编码端对当前问题进行编码,再通过解码端生成回复[18].然而,生成式方法倾向于产生缺乏信息且无意义的通用回复[4],如“我不知道”等.为缓解该问题,Li等[4]利用最大互信息作为目标函数来增强回复的信息性;Xing等[5]引入主题信息,并与当前问题共同解码,生成了更有意义的回答;Mou等[6]提出先预测关键词,然后使解码端生成的回复中包含该关键词,以此减少通用回复的产生;Kong等[7]先解码生成内容词,再用内容词与当前问题来生成回复,提高了回复的质量.现有的基于生成的研究虽然提出了各种方法来提高生成回复的质量,但模型仍然倾向于生成通用回复[8].
基于相似问题具有相似回答这一假设,近年来,研究者结合检索式和生成式方法的优点提出了检索-生成式方法.该方法根据当前问题在问-答语料库检索得到的相似回复来指导对话生成.Song等[8]首次提出先利用检索式方法得到语料库中与问题最相关的回复,然后将问题和检索得到的回复编码拼接后作为解码器的输入;Wu等[9]把检索得到的最相关回复作为原型语句,基于当前问题与相似问题的字面差异构造编辑向量,利用编辑向量改写原型语句来生成当前问题的回复;Cai等[10,11]对检索回复提取相关词语作为回复“骨架”,其中文献[10]通过骨架抽取器得到检索回复的骨架语义,文献[11]则对检索回复提取字符级别的骨架;为避免最终生成的回复与检索回复过于相似导致相关性较差,Zhang等[19]先对当前问题生成“草稿”回复,并利用Transformer学习检索得到回复中的语句信息对“草稿”回复进一步修改,从而生成信息丰富且更加相关的回复.然而上述方法仅利用到单个检索结果,能获取的额外信息有限,并且当检索结果与问题相关性较低时,模型往往生成无关或无意义的回复.因此,如何利用更多的检索回复以生成更高质量的回复成了研究者们面临的新问题.Cai[10]尝试拼接多个“骨架”来生成对话,但由于多个不同的“骨架”无法出现在同一回复中,反而干扰了生成过程,最终效果比生成式方法更差.Song等[12]将检索得到的最相关的两个回复语句与问题语句分别编码,拼接三者后解码生成回复.但这类方法仅能引入固定个数的检索结果,难以扩展.而Tian等[6]使用K-均值聚类算法将语料库中问题聚为多个问题簇,提取每个问题簇所对应的回复簇的信息生成回复.但在实际应用中,问题中往往包含多方面语义信息,使用硬聚类方式只能捕获单方面的语义,忽略了问题的语义多样性,降低了生成最终回复的质量.
为了解决上述问题,本文提出了一个面向语义多样性的对话生成模型,通过径向基神经网络的软聚类能力,将训练集中的问题划分为多个语义簇来学习不同的语义表达,并根据当前问题与问题语义簇的隶属度来融合不同语义簇的回复信息,以此来生成信息量更大、语义更丰富的回复.
3 本文算法
本文算法基于序列到序列模型,问题编码层和回复自编码层采用双向LSTM[20]分别学习问题和回复的语义表达,解码层通过单向LSTM顺序解码生成回复中的每个词.为了捕获问题的多样性语义,本文引入了径向基神经网络,将训练集中的问题分配到不同的语义簇.在顺序生成每个词时,通过两个注意力机制分别聚焦当前问题对回复产生重要作用的信息以及检索回复对生成回复起重要作用的信息来指导对话的生成.本节先给出对话生成任务的形式化描述,然后介绍本文算法的方法细节.
3.1 任务定义
假定当前问题q={q1,…,qi,…,qN},长度为N,qi表示问题中第i个词,回复r={r1,…,ri,…,rM},长度为M,ri表示回复中第i个词.对话生成任务可形式化定义为:
给定训练集D={},
,表示训练集中问题-回复对,其中r是问题q对应的回复,模型的目标是最大化似然P(r|q,D).
3.2 模型结构
本文提出面向语义多样性的对话生成模型总体架构如图1所示.模型由4部分组成:问题编码层、聚类层、解码层和回复自编码层.训练时,模型以对作为输入,通过问题编码层将输入的问题q的词序列通过双向LSTM获得问题的句子表达,随后送入到Q-聚类模块的径向基神经网络将训练集中的问题根据语义分配到多个语义簇,每个径向基单元学习不同问题簇的语义向量.根据当前问题和每个语义向量的隶属度来融合问题簇对应的回复簇的信息作为检索的特征表达,并送入到解码器来生成最终回复.回复自编码器用于更新记忆模块中回复的嵌入表达,通过自编码器的回复重建,能够学到与问题更相关的回复的句子编码.
图1 模型示意图Fig.1 Model architecture overview
3.2.1 问题编码层
(1)
(2)
3.2.2 回复自编码层
(3)
S′=MLP[hq;hr]
(4)
(5)
回复自编码层损失如式(6)所示:
(6)
3.2.3 聚类层
在训练阶段,聚类层的任务是捕获问题的语义多样性,因此,本文通过Q-聚类模块的径向基神经网络对训练集中的问题进行软聚类,并训练了K个不同的问题语义向量(簇中心).记忆模块存储了回复簇的语义信息,并根据当前问题的隶属度生成不同的检索回复表达,用于对话生成.
Q-聚类模块对于当前问题q,它的嵌入表达hq通过一个含有K个径向基单元的网络生成q的语义嵌入表达Q*,其中径向基单元采用高斯核函数.第j个隐藏单元的激活函数为:
(7)
其中,Qj为第j个径向基单元的语义向量,即第j个问题簇的簇中心,σj为该径向基单元的方差,二者均为可学习参数.然后,获取q在第j个问题簇的隶属度αj,如式(8)所示,通过对各个簇的隶属度的加权求和得到问题的语义嵌入表达Q*,如式(9)所示:
(8)
(9)
记忆模块根据相似的问题有相似的回复这一假设,将当前问题在各个问题簇的隶属度作为回复簇的隶属度,即当前问题对第j个回答簇的隶属度αj作为对应回复簇中回复的隶属度,来计算对应回复簇每个语义向量(簇中心),如式(10)所示.当前问题对应的回复语义表达是根据问题隶属度分布α对所有的回复簇簇中心进行加权求和,如式(11)所示:
(10)
(11)
径向基单元的语义向量是用来描述问题语义的多样性,模型希望各个问题簇的语义尽可能分离,本文使用如式(13)的正交损失.
Q=[Q1;Q2;…;QK]
(12)
(13)
3.2.4 解码层
对话生成的解码器基于单向LSTM,首先将q的语义表达Q*、句子表达hq以及回复的语义表达R*拼接后通过全连接网络得到解码器的初始状态S0,如式(14)所示:
S0=MLP([Q*,hq,R*])
(14)
(15)
以St作为查询向量,利用式(16)和式(17)计算问题中每个词在第t时刻前后文注意力权重,根据注意力权重加权求和得到问题前后文表达Ct,如式(18)所示:
(16)
(17)
(18)
其中Wc是可学习的参数,ut,i表示时刻解码器隐藏状态与q里第i个词的注意力大小.
检索嵌入表达Zt编码了回复簇语义信息,有助于当前问题的回复生成.本文将当前问题和每个问题簇的隶属度作为回复簇对目标问题生成的回复的贡献度.考虑在不同的t时刻,根据当前隐藏状态St,需要聚焦回复簇中不同的回复特征来生成检索的表达.同样地,以St作为查询向量,利用式(19)和式(20)计算不同语义的回复簇注意力,再根据注意力加权求和后得到t时刻Zt:
(19)
(20)
(21)
其中Wz为注意力矩阵,vi,j表示解码器时刻隐藏层状态St与记忆模块中第j个回复簇Rj的注意力大小.
(22)
在回复生成中,使用负对数似然作为损失函数:
(23)
其中,M为标注回复长度,θ为模型所有参数.
3.3 模型的训练和测试
训练时,本文将对作为输入,模型优化的总损失函数由3部分构成,如式(24)所示:
L=Lpre+λ1LQ+λ2LAE
(24)
其中,λ1和λ2为超参数.训练时,在当前epoch内固定记忆模块中的所有回复簇的语义向量并存储所有历史回复的嵌入表达hr及其在所有回复簇中的隶属度分布α,当前epoch结束后,根据式(10)更新所有回复簇特征信息.在测试阶段,对于测试样例,只有问题q送入模型,回复自编码层将被去掉.
4 实 验
为验证算法性能,本文开展了以下3个方面的实验:1)和现有对话生成的方法进行对比,考察软聚类的效果,以验证本文提出的算法的有效性;2)消融实验,考察模型中各模块的作用;3)考察径向基单元的个数对模型性能的影响.
4.1 数据集及评价指标
为了验证模型的有效性,本文在腾讯公开的大型中文单轮对话数据集Chat上进行了一系列实验.Chat数据集来源于微博和豆瓣论坛,相比来源于单个论坛的数据集,该数据集包含更多问题语义类型.经预处理[19]后,本文的实验将其中550万条数据用于训练,1000条用于验证,10000条用于测试,并使用了3类自动评价指标来评估模型的性能:
1)Bleu 1-4[21]:Bleu N 反映生成回复与黄金标准之间N-gram的字面相似度,分数越高,字面匹配程度越高.
2)Embedding Average(E-A),Embedding Greedy(E-G),Embedding Extrema(E-E)[22]:Embedding * 用来度量生成回复与标注回复的语义相似度.E-A使用生成文本与黄金标准的词向量均值的余弦相似度,E-G使用生成回复与黄金标准之间的最大词-词余弦相似度的平均作为二者相似度,E-E使用句子中所有词的词向量每一维极值作为句子向量,然后计算生成文本和黄金标准之间的余弦相似度.数值越大,表明生成文本与黄金标准语义越相似.
3)Dist-1/2:Dist-N反映生成回复的多样性,计算生成回复集合中一元组或二元组占总数的百分比.数值越大,多样性越好.
本文实验的所有模型是在相同数据集上进行了5次实验,后续小节报告的是5次的平均值.同时,本文从测试集中随机抽取了100个问题,邀请了3名研究生对每个模型生成的回复从相关性、流畅性和信息性3方面进行了人工评估.相关性是指是否与问题相关;流畅性是指语义是否流畅,是否容易理解;信息性是指是否有意义,而非通用回复.每个度量指标用5级评分.以相关性为例,数字表示回复语句的相关程度,其中1表示与问题完全不相关,5表示完全相关.
4.2 实验设置
本文实验基于PyTorch1.8.1,Python版本为3.8.5.服务器实验环境为Ubuntu 18.04.4 LTS,搭载的显卡为NVIDIA GeForce RTX 3090.
根据Chat数据集特点,模型设置词表大小为20000,训练时使用Adam[23]优化器,初始学习率为0.001,测试时束搜索大小为10,其余超参数如表2所示.
表2 超参数设置Table 2 Hyperparameters setting
4.3 基线模型
为了验证本文算法考虑到问题的语义多样性对生成回复质量的影响,本文与以下5个基线方法进行了对比:
Seq2seq[24]:带有注意力的Seq2seq对话生成模型,仅以问题作为输入生成回复;
CVAE[25]:使用变分编码器来增加回复多样性的对话生成模型;
RP[19]:先通过当前问题生成回复,再利用检索结果对回复进一步润色得到最终回复;
Skeleton[11]:基于骨架生成回复的对话生成模型,先对检索的回复提取骨架词,然后将当前问题与骨架词融合来生成回复;
Memory[13]:一种检索-生成式对话生成模型,通过对历史问题进行硬聚类,将与当前问题相似度最高的问题簇对应的回复簇的特征信息融入到对话生成中.
4.4 实验结果与分析
为了验证本文模型的有效性,本文模型和现有的基线模型进行了对比,自动评价结果如表3所示,人工评估的对比结果如图2所示.从表3的实验结果可以看出,本文的模型在Blue 3、Blue 4和Dist-1上分别提高了18.6%、4.48%以及6.38%.同时Blue N中N越大能反映回复的流畅性,本文的模型在Blue 3和Blue 4指标上性能提升显著,这些结果也充分说明了,通过径向基神经网络的软聚类方式能够捕获问题的语义多样性,提高生成结果的相关性、信息性和流畅性,从而得到了质量更高的回复.在生成回复的字面多样性中,本文模型Dist-1远高于其他模型,而Dist-2低于Skeleton,但相比最新的聚类-生成模型Memory提升了0.55%.根据对生成回复的结果进行分析发现,本文模型倾向于产生通用句式的语句,如“××我也××”,“××哈哈,××”这类句式,其中,“××我也××”在训练集中占比为1.8%.而Skeleton先提取检索结果的“骨架词”,利用“骨架词”的信息生成对话,倾向于生成与检索结果相似的回复,因此在Dist-2上性能较好,但相关性上较差.
图2 人工评价的对比结果Fig.2 Comparative results of human evaluation
表3 本文模型和基准模型的性能对比Table 3 Overall performance of our model and the baseline models
从图2的人工评价对比结果中可以看出,检索-生成式的方法由于利用到了额外的检索结果,所以在信息性上要明显优于生成式的Seq2seq方法.而Memory与本文方法通过聚类方式将更多的检索结果的特征信息融入到对话生成中,能够进一步提高生成回复的信息性.同时,由于本文使用软聚类方式,获取问题语句的多方面语义,因而能检索得到更多的相关回复信息增强生成过程,不仅提高了信息性和相关性,同时还保持着较高的流畅性.
4.5 消融实验
为验证模型中各模块的有效性,本文对比了两种消融实验:
1) 本文算法w/o Mul:采用硬聚类方式,即认为当前问题语句只属于一个问题语义簇,查询记忆模块时也只取相似度最高的问题语义簇对应的回复特征;
2) 本文算法 w/o:去掉模型Q-聚类模块中的正交损失.
表4列出了消融实验结果,从表中可以看出去除各模块的消融实验性能都有所下降.首先,当采用硬聚类方式时,模型只能捕捉问题语句单方面的语义,因此模型性能在各方面都略低于软聚类的结果,从而表明考虑问题的语义多样性有助于生成质量更高的回复.其次,去掉正交损失后,模型性能急剧下降,这是因为去掉正交损失后,各个径向基单元学习到的语义向量过于相似,无法充分表达训练集中多方面语义,极大地降低了模型性能.
表4 消融实验结果Table 4 Ablation experimental results
4.6 径向基单元个数K的影响
为了探究径向基单元数K对模型性能的影响,本文使用不同的K在Chat数据集上进行实验,如图3所示.
图3 不同K下的性能Fig.3 Performances of different K
由图3可以看出,随着K的增加,性能在逐渐提升,而当K>2000以后,模型的性能又开始缓慢下降.说明K如果太小,会导致训练集中问题的语义不能有效区分,而K太大则导致径向基单元学习到的语义向量太过于相似,从而降低了最终回复的质量,其中对回复的多样性影响最大.
4.7 案例分析
为了更深入了解本文提出的方法在开放域对话中的性能,本小节从问题语义的多样性、软聚类质量以及生成回复的质量3方面进行了案例分析.
多样性本文从训练集中选择了两个问题,分别包含了两种语义信息,并对比了基线模型和本文模型的回复结果,如表5所示.从表5中可以看出,问题1和问题2都包含了两个方面的语义:症状以及寻求解决方法.只利用了单个检索结果生成回复的模型,如RP和Skeleton和利用多个检索结果的Memory都只能捕获问题单方面的语义,所以回复中只包含关于症状信息,而本文算法由于对问题进行软聚类后能够捕获问题多方面语义,所以生成的回复能够关注到“过敏”或者“口腔溃疡”同时还关注到了“怎么办”两种不同的语义.
表5 语义多样性案例Table 5 Cases of semantic multiplicity
软聚类本文首先从训练集中选择8个问题,分别计算每个问题和问题簇的隶属度,根据隶属度最高的前10个簇.对8个问题隶属的语义簇取交集后,如表6所示(为方便理解,人工为3个簇添加了语义标签并将问题中与簇相关的语义信息加粗表示).从表6中可以看出,这3个簇的语义差别比较大,说明每个簇的径向基单元通过正交损失能够学到不同的语义.同时,对于问题中包含多个语义的样例,如Q3,Q5和Q6,其中Q3在簇1和簇2相似度很高,但在簇3的相似度很低.在这3个簇的语义向量的相似度都比较高.由此可以看出,用软聚类的建模方式才能更好地捕捉问题语句的多样性语义,检索得到多方面相关回复信息,从而提高生成回复的质量.
表6 软聚类案例Table 6 Cases of soft clustering
回复质量本文从测试集中随机选择了两个问题,并对比了本文模型和基线模型产生的回复的质量,结果如表7所示.从表7中可以看出,对问题1,Seq2seq和CVAE回复的相关性很低,而RP只是对问题做了一个陈述,Skeleton回复的流畅性较差,相比Memory的回复,本文模型的回复的可读性更好.问题2的本文的模型用“屈臣氏的燕窝面膜”来回答了问题,而其他模型的回复和问题的语义相关性比较差.
表7 回复质量案例Table 7 Cases of response quality
5 结 语
针对现有检索-生成式研究存在语义多样性的挑战,本文提出面向语义多样性的开放域对话生成模型,并设计了一个可学习的聚类网络将训练集中的问题根据语义分配到多个语义簇,从而对语义多样性建模.本文使用径向基神经网络来实现软聚类过程,由于径向基的可微性,使得本文提出的模型对软聚类和回复生成过程可以通过梯度下降端到端地训练,使得聚类和生成更加紧密耦合.本文通过一系列的对比实验、消融实验及案例分析验证了本文模型的有效性.