PCC: 一个对单用户建模的个性化对话系统

2022-01-20 12:48窦志成文继荣
中文信息学报 2021年12期
关键词:帖子向量编码

郭 宇,窦志成,文继荣

(1. 中国人民大学 高瓴人工智能学院,北京 100086;2. 中国人民大学 信息学院,北京 100086;3. 大数据管理与分析方法北京市重点实验室,北京 100086;4. 数据工程与知识工程重点实验室,北京 100086)

0 引言

对话系统是自然语言处理(NLP)的重要子领域,在技术支持服务和语言学习工具等应用中都有重要作用[1-2]。对话系统可以分为两类,即面向任务型对话系统[3]的和面向非任务型对话系统[4-5],也称为对话机器人。

随着对话模型的快速发展,学者们也发现了一些现有模型的问题,其中生成式对话模型中人格不一致的问题[6]引起了广泛的关注,学者们对此提出了多种不同的方案。主要分为两类,一类基于事先定义好的用户文件,另一类基于用户的对话历史。前者通过一些对机器人显性属性的描述定义其人格,而后者则主要立足于对话历史中体现出来的隐性属性。

基于文件的个性化方案通过几个句子或属性定义了一个人的个性,但这种方案定义出的个性化信息很少,只能在定义的几个方面体现出个性化,而在未定义的方面仍然存在着不一致的问题。其次,这种个性化方案是静态的,它不会随着用户个性化信息的改变而改变,例如兴趣爱好等。因此我们采取了使用用户历史编码个性化信息的方案。

最早的基于用户历史的方案是Li等[6]提出的一个对用户个人信息建模的Speaker模型,让用户ID参与训练,使回复具有个性信息,但该只是简单地将用户ID拼在Decoder的输入部分,历史信息的有效利用程度很低。为了更充分地利用用户历史信息,我们在speaker模型的基础上做了如下改进。

首先借鉴了检索式模型的思想,引入了搜索模块,期望在用户的历史回复中找到符合当前问题的回复,并用于指导模型的生成。其次,speaker模型只利用了用户的回复信息,主要体现用户的说话风格,而用户发布过的帖子也体现着用户的兴趣爱好信息。因此,我们在Encoder端编码了该部分信息,并与当前查询相结合,使得输出的语义向量附带用户的兴趣信息,更有效地利用个性化信息。在实现方式上则借鉴了多轮对话系统的思想,由于多轮对话的上下文有时序关系,需要通过循环神经网络(RNN)附带时序信息,但本文工作中,用户发表的历史帖子并无太多时序上的联系,所以本文采用提取特征功能上更强的TextCNN[7]进行编码。实验结果证明我们的模型在生成回复的准确性和多样性方面都有一定程度的提升。总的来说,本文的贡献主要有两个。

(1) 提出了一种新的对用户和用户历史信息建模的个性化对话系统模型PCC模型。

(2) 证明了对单个用户建模时,其历史回复对机器人回复生成准确性和多样性有明显作用。

本文组织结构如下: 第1节讨论本文的相关工作;第2节介绍PCC模型的具体架构和实现方式;第3节是本文的实验部分,首先对实验所用的语料库PchatbotW进行了介绍并实施相应处理,之后进行了对比实验并分析了实验结束,也进行了消融实验以展现模型各个模块的作用,最后通过案例分析具体展现模型的效果。第4节是本文的结论和未来工作。

1 相关工作

在过去的几十年里,学者们发表了大量的对话系统建模的工作。早期的对话系统是基于规则的[8-9],即根据特定的模式给出特定形式的回答,这种模型不需要训练数据。而随着可以接触到的对话语料库越来越多,规模越来越大,学者们开始更多地探索数据驱动型的对话系统。

基于统计机器翻译(SMT)的方案开始被应用到对话系统中,其思想是将输入作为一种语言,将输出作为另一种语言。这意味着可以将许多机器翻译算法用于对话生成。Koehn[10]中应用基于短语的翻译方法来完成此任务,是最早的生成对话模型之一。一些工作将编码-解码模型[11-12]应用到对话领域中,即先通过编码器将序列编码得到隐藏向量,再在解码段将隐藏向量解码成新的序列。Cho等提出了Seq2Seq框架[11],其编码端和解码段是两个不同的RNN网络,主要是为了解决输入和输出不等长的问题,Sutskever将Seq2Seq模型中的RNN部分扩展为LSTM[13],使模型在信息长期记忆上更具优势。Seq2Seq框架在文本生成任务中非常成功,但是其将整个源序列编码为固定大小的向量,特别是编码长源序列时,有一定的局限性。而基于注意力机制的模型[12]则通过在预测下一个单词时只关注源序列中的一部分信息的方式,减轻了这个限制。到目前为止,注意力机制依然非常广泛地应用在各种文本生成模型中。

在人类的日常交谈时,人们通常会适应对话者以促进理解,从而提高对话效率和满意度。要使对话系统达到人的水平,很可能需要个性化,即模型能够感知并能够适应对话者,这种能力可以提高对话的有效性和自然性。学者们因此在个性化领域也进行了许多研究,Li证明了Seq2Seq方法通常具有不连贯的对话[6],也就是说,聊天机器人的回复经常与之前的响应相矛盾。为了解决这个问题,Li等[6]提出了一种Speaker模型,这是一种基于用户历史的方法,需要在数据中加入用户的ID信息,它是LSTM模型的扩展,将ID向量空间嵌入到原始模型中。类似于单词的向量空间,距离较近的说话者的向量空间中的说话者具有更相似的说话风格。该模型不仅可以生成更多的个性化答案,而且在某种程度上符合人类对话中的一对多模式,即一个问题可以具有多个不同的答案。而Luan等提出了通过多任务学习方法对speaker模型进行扩展[14],它结合了由对话数据训练的Seq2Seq模型和由用户的其余文本信息训练的自动编码器(auto-encoder),通过共享解码器的参数使得生成的回复附带有用户个性化信息。Qian等提出了一种基于文件的方法[15]。它会预设机器人的身份文件,并使相关答案与设置一致,以便机器人在回答时可以具有某些身份特征,与先前工作的不同之处在于,其不必从对话中慢慢学习个性。Zhang等提出一种用户适应的方法[16],其也是对单个用户进行建模,模型包括两部分,第一部分使用大型通用训练数据对对话系统进行预训练,第二部分是根据小型个性化训练数据调整模型。Liu等提出了一种生成静态用户ID向量的方案[17],其首先随机初始化用户ID向量,再通过匹配用户ID和用户历史发表的帖子来更新ID,再将训练好的ID向量输入到模型当中。Cho等[11]提出了一种注意力记忆网络(attentive memory network),通过说话者的对话历史来预测说话者将要给出的回复,实验结果也证明了对话历史记录中包含了说话者的个性信息。

在这篇文章中,我们使用生成式模型,借鉴了检索式模型和多轮对话模型的思想,在speaker模型的基础上进行拓展,构建了一种全新的对单个用户建模的对话模型。

2 PCC模型

2.1 任务定义

给定一个帖子x=x1x2…xn,一个用户历史回复hr={hr1,hr2,…,hrN}及其回答的帖子hp={hp1,hp2,…,hpN},任务的目的是对给定的帖子x生成一个适合的回复y=y1y2…ym,使得P(y|x,hr,hp)的概率最大。

2.2 模型架构

图1 PCC模型架构

接下来我们将具体介绍这三个模块的结构以及实施方式。

(1)

(2)

最终在解码端,将上述的显性指导信息以及附带用户兴趣信息的语义向量汇总,并加入用户说话风格信息作为生成的隐形指导,将其通过GRU神经网络解码。再通过注意力机制结合编码端的帖子信息,通过全连接层生成最终的回复,如式(3)所示。

(3)

2.2.1 搜索模块

(6)

我们根据sj的大小找出其中相似性最高的一个帖子。

(7)

由于用户的历史回复中可能没有与当前回答类似的问题,示例如果直接加入该帖子的回复可能并不能起到指导的作用,我们事先设定了一个阈值t。在找到最高相似度si之后,通过该阈值t与其相似度进行比较。我们认为,如果相似度大于该阈值,则其回复对模型回复的生成有指导作用,此时模型不使用显性指导,输出为空否。则通过字典寻找该帖子下的用户历史回复,并将这个hri通过词嵌入得到向量,并将其输入解码端。如式(8)所示。

(8)

2.2.2 编码模块

(1) 帖子信息的提取

由于用户发表的帖子通常较长,为了保证句子的信息能够被充分利用,并解决梯度消失和梯度爆炸问题,我们抛弃了传统的RNN结构,转而使用GRU实现帖子信息的提取。GRU是循环神经网络的一种,是长短时记忆(LSTM)的变体,也是为了解决长期记忆和反向传播中的梯度消失等问题而提出来的。相对于LSTM来说,其训练效果相当,但训练效率则大大提高。我们将帖子的词向量x输入GRU神经网络中,并取出其最后一层隐藏层向量q代表帖子信息。

q=GRU(embedding(x))

(9)

(2) 用户兴趣信息的提取

我们通过编码用户的历史回复提取用户兴趣信息。在多轮对话中,用户的前几轮对话历史是模型的额外信息,并依此给出更符合逻辑的回复。而在对单人建模的个性化模型中,用户的历史信息也是额外信息,两者的区别在于前者有着严格的时序结构,所以大部分采用可以附带时序信息的RNN神经网络。此外,前几轮对话历史与当前待回复帖子的联系更紧密。而对于个性化模型,用户历史信息与当前待回复帖子联系较弱,因此需要提取特征能力更强的模型,其时序信息较弱,因此我们选用了TextCNN来达成这一目的。TextCNN的结构与CNN类似,但其只在文本的垂直方向做卷积,并且只有一层。用户兴趣信息提取过程如下。

hp′=embedding(hp)

(10)

首先对其进行卷积操作,其中卷积核大小为h={h1,h2,…,hl}。

(11)

其中,ct,ji代表第j个卷积核卷积过后的第i个值,hj为卷积核大小,σ为sigmond函数,wj为随机初始化并参与训练的矩阵,bj为偏移量。之后将这些值聚合起来得到经过第j个卷积核卷积后得到的向量ct,j,如式(12)所示。

(12)

再通过一维的最大池化函数1_max_pooling对ct,j进行池化操作,然后提取ct,j中最大的一维数值ct,j′,以此压缩向量维度并提取明显特征,如式(13)所示。

ct,j′=1_maxpooling(ct,j)

(13)

再将l个卷积核卷积得到的结果结合起来得到向量c。该向量被认为是用户兴趣信息的特征提取向量。

ct=[ct,1′,ct,2′,…,ct,l′]

(14)

之后我们对ct进行线性化操作:

pt′=Linear(ct)

(15)

最终我们将t个句子的特征向量结合起来得到用户兴趣向量p′。

p′=[p1′,p2′,…,pt′]

(16)

我们认为向量p′中即附带了用户兴趣信息。

(3)基于注意力机制的两部分信息的结合

注意力机制其实是一个查询(query)到一系列键值对(key-value)的映射,其输入即为Q,K,V。计算方式分三步,即首先对Q与K进行相似度计算得到权值,之后对上部权值归一化,再用归一化的权值与V加权求和。

由于用户兴趣信息由多句用户之前回复的帖子信息组成,而用户当前回答的问题可能只与其中少量帖子相关,因此我们要集中注意力于用户历史信息中与当前帖子较为相关的部分。因此,我们通过注意力机制实现两部分信息的结合,并使用dot_product函数计算并输出最终的语义向量。其过程如下:

我们首先通过注意力机制对两部分信息进行匹配,过程如下式(17)、式(18)所示。

得到的q′向量即附带了用户兴趣信息。其中ai为第i句历史帖子的权值。

(19)

我们认为该语义向量既包含帖子的语义信息,也附带用户兴趣信息。

2.2.3 解码模块

解码模块的输入由三部分组成,第一部分是编码模块的输出,作为解码端的初始化隐藏层向量;第二部分是搜索模块的输出作为生成的显性指导;第三部分是用户ID向量[6]作为生成的隐形指导。具体来说,用户ID也输入到训练的数据中,可以把它看作另一个词嵌入。由于每个用户有多条不同的回复,所以每一轮训练会存在多条用户ID但内容不同的数据,所以用户ID会被训练多次,其所代表的用户说话风格也会在一次次的训练过程中逐渐变得清晰。

解码端使用GRU神经网络对这三部分信息进行解码,其过程如下:

在GRU的传播过程中,除了上一个神经元传来的状态ht-1和当前的输入qt,我们将用户ID向量以及显性指导p′也当作该神经元的输入。

(20)

之后再通过GRU的重置门控r重置之前的数据得到ht-1′,如式(21)、式(22)所示。

其中,σ为sigmond函数,可以将数据变为0-1范围内的数值,⊕是连接运算符,将两个向量连接起来,Wr是随机初始化并参与训练的权重矩阵。再将ht-1′与输入qt拼接,通过tanh函数放缩到-1~1之间。

h′=tanh(W(q′t⊕ht -1′))

(23)

其中,W是随机初始化并参与训练的权重矩阵。最终通过更新单元z得出新的状态向量ht,如式(24)、式(25)所示。

其中,Wz为随机初始化并参与训练的矩阵。

为了使回答生成的效果更好,解码模块加入了注意力机制。我们将编码端的帖子编码部分的GRU的输出向量与解码端的输出向量进行加权注意力,得到的向量与解码端的输出向量再结合得到最终输出yt。其过程与上文编码端帖子信息与用户兴趣信息的结合类似。我们将yt通过tanh函数放缩到[-1,1]之间,通过beam-search得到最终的句子。

3 实验

在本节中,我们将具体介绍验证模型效果的实验,包括选取的语料库、训练数据的构建、训练设置、评价指标的使用、对比模型、实验结果分析,以及消融实验。

3.1 数据集

本文使用的数据集是PchatbotW,为语料库Pchatbot的一个子数据集。Pchatbot语料库是2019年由中国人民大学开放的一个超大规模的中文对话语料库,其由PchatbotL和PchatbotW两个部分组成,前者是司法领域的对话数据,并不适合本篇工作所面向的开放领域,所以本文不多做赘述,后者从中国最大的社交网络平台新浪微博上爬取下来。微博用户可以随时随地在应用上发帖或者评论他人的帖子,我们爬取了2018年9月10日至2019年9月10日的超过三亿条(帖子,回答)对并从中筛选出130万作为本次实验的原始语料。表1给出了PchatbotW的一组数据样例。在样例中可以看到,PchatbotW每组数据有两个部分,分别是帖子和回复,两部分除了保留原始的聊天内容以外,还保留了发表帖子或回复的用户ID和时间戳(经过隐私化处理),用户ID的保留为Speaker模型的复现和拓展保留了基础,而时间戳的保留则可以通过当前对话提取出用户之前的历史记录。

表1 PchatbotW数据样例

3.2 训练数据构建

在本次实验中,由于资源限制,我们并没有使用全部的对话数据,而只是根据用户ID在其中筛选出了近120万(帖子,回复)对。在实验数据处理上,我们通过用户ID构造ID词汇表,通过ID和时间戳提取出每一条回复的历史回复,并通过搜索模块事先构建出最相似回复的数据文件。为了训练用户模型以获得隐式表示,并进一步建立对话模型以在给定的对话中进行适当的回复,我们采取了时序方案划分训练、评价和测试集。具体来说,对于具有两个或更多回复历史的用户,根据时间戳,将用户的倒数第二个响应对用作验证集,并使用最后一个响应对作为测试集,以保证测试集和训练集的用户历史信息在训练数据中都出现过。而只有一个回复的用户则只放入验证集。而在正负例的划分中,训练中,正例为原本的用户回复,负例是在其他用户的回答中随机挑选的,正负例比例为1∶1。各个数据集的信息如表2所示。

表2 数据集信息

3.3 训练设置

我们的模型训练设置如下: GRU隐藏层为1层,每层具有1 024个隐藏单元。 批处理大小设置为32,词向量维度设置为100,学习率设置为0.000 1,衰减因子为0.995,参数在范围[-0.8,0.8]内初始化,最大梯度截断设置为5,词汇表大小设置为40 000,用户ID词汇表设置为40 000,神经元衰减系数(dropout rate)设置为0.2,Beam Width设置为5以进行beam search。最大帖子长度和最大回复长度都设置为50。

3.4 评价指标

在自动指标方面,我们使用了BLEU-n,perplexity以及distinct-n[19]。BLEU-n指标在机器翻译任务中被广泛采用,并应用于其他文本生成类任务,也经常作为对话质量评测的标准之一。其认为生成序列和参考序列越接近,则其生成质量越高。同时也使用了perplexity指标(ppl)评价模型生成能力,其思想是根据每个词来估计一句话出现的概率,并用句子长度做归一化,PPL越小,我们期望的sentence出现的概率就越高。此外我们还使用了distinct[19]指标来评价模型生成的回复的多样性程度,distinct指数越高,则说明回复越多样。

然而,在对话领域,这些自动指标的说服力仍没有那么强,为了证明模型的效果,我们也进行了人工评价,其评价原则如表3所示。为了排除评价人的主观因素影响,我们在评价前对几个模型生成的答案进行了随机处理。由于人力限制,我们选取了200条帖子,并使用三个模型分别对这200条帖子进行回复的生成并进行人工评价。

表3 人工评价准则

3.5 对比模型

(1)Seq2Seq-Attention模型: 我们复现了经典的Seq2Seq模型,在生成端加入了注意力机制,其输入是帖子,输出是回复。不需要加入用户ID信息和历史信息。

(2)Speaker模型: 我们也复现了Speaker模型,本文是基于Speaker模型的改进,将Speaker模型作为对比可以体现用户历史信息和生成显性指导的重要作用。值得一提的是,出于训练效率的考虑,我们将Speaker模型中的对帖子的LSTM编码替换成了GRU编码。

3.6 实验结果分析

我们首先比较了三个模型的自动指标,具体数据如表4所示。从表中可以看出,PCC模型的BLEU指标最高,perplexity指数最低,证明相较于其他两个模型,其生成回复的准确性较高。其次,生成回复的distinct指数有了一定提高,说明PCC模型在改善回答的多样性方面有一定提升。而Speaker模型相比于Seq2Seq在各指标上提升相对明显,说明用户ID在提升对话质量方面作用显著,也说明了新发表的数据集Pchatbot的实用性。

表4 对比实验结果

人工评价的实验结果如表5所示,其表格数据为获得相应得分的样本数。可以看到,PCC模型生成的高分回复数目相较于Seq2Seq和Speaker模型增多,低分回复减少,平均得分上升。同时我们使用方差分析进行显著性检验,其P-value值均小于0.05,证明PCC模型与Speaker模型以及Seq2Seq模型有显著差异,说明PCC模型在改善对话质量上的确有较大作用。

表5 人工评价结果

3.7 消融实验

在证明PCC模型实验的优越结果之后,我们还做了消融实验,即去除模型中的一部分以证实另一部分的效果,具体来说,我们做了PCC去除搜索模块(称为PCC-R)和PCC去除用户历史发表帖子信息(称为PCC-P)的实验,其实验结果如表6所示。可以看到,两个消融实验的实验效果都有不同程度的降低,而去除检索模块使准确度指标(BLEU)下降的幅度较大,而去除历史发表帖子信息使多样性指标(distinct)下降的幅度较大,说明模型的这两个部分分别在准确性和多样性上起更大作用。而两者相比较于Speaker模型在各指标上仍然有一定程度的提升,说明搜索模块和帖子编码模块对于改善回复质量都有一定程度的帮助。

表6 消融实验结果

此外,对于搜索模块的阈值t,我们设置了不同的值从0.2-0.6,跨度为0.2,比较其生成效果,最终根据ppl选定了t为0.2,t值较高时效果不好的原因可能是相似度较高的答案相对较少,使得模型的信息相对较少,所以虽然t为0.2时筛选出的相似回复可能相似度更低,但有更多的相似回复可供参考,所以生成效果更好一些。

3.8 案例分析

我们也进行了案例分析,具体理解模型的作用,结果如表7所示。回复该帖子的用户的历史回复一共有62条,其中大部分是关于明星,以有关张艺兴的评论居多。可以看出Seq2Seq生成的回复较为泛化,虽然语义连贯,但并不能体现该用户的特性。而Speaker模型生成的回复则可以看出一定的用户特性,提到了张艺兴的名字。而PCC模型生成的回复在附带个人信息的同事,与原始回复也更为接近,因为该用户曾回复过类似的帖子。

表7 案例分析

4 结论和未来工作

在这篇文章里,我们介绍了一种将对用户历史信息建模以构建对话机器人的模型。其在Speaker模型的基础上,延续了Seq2Seq框架,在外部加入了搜索模块以搜索相似回答作为显性指导,并通过历史发表帖子编码了用户历史特征信息。此外,本文通过实验结果证明了搜索模块在提升回复的准确性上有较大作用,用户历史回复帖子编码的信息在提升回复的多样性上有较大作用,也证明了用户ID向量空间对对话质量的提升效果。

本文的编码器-解码器框架是基于Seq2Seq的,而基于Transformer的实验将于之后完成。其次,本文基于doc2Vec生成句向量的以及通过cos相似度计算相似性的方法仍然比较基础,而阈值方案也较为简单,以后需要改进,基于其他标准选取生成指导的方案也将在之后进行测试。其次是本文的搜索模块面向的数据较少,如果信息文本较多,模型可能无法运行,可以考虑将IR模型应用到该模型中。最后是本文所做的个性化对话机器人,仍然限定在单轮对话,而在对话领域,对多轮对话的研究早已进行很久,而由于缺乏附带个性化信息的多轮对话语料库,个性化多轮对话仍然处于起步阶段,希望可以尽快推动其发展,使人类可以真正拥有一个机器聊天伴侣。

猜你喜欢
帖子向量编码
向量的分解
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
聚焦“向量与三角”创新题
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
Genome and healthcare
暴力老妈
向量垂直在解析几何中的应用
向量五种“变身” 玩转圆锥曲线
高手是这样拍马屁的