Press "Enter" to skip to content

WSDM 2022 | C2-CRS:用于对话推荐系统的由粗粒度到细粒度的对比学习预训练

作者 :周远航,中国人民大学硕士二年级,研究方向为自然语言处理

 

论文标题: C -CRS: Coarse-to-Fine Contrastive Learning for Conversational Recommender System

 

论文链接: https:// arxiv.org/abs/2201.0273 2

 

开源代码地址: https:// github.com/RUCAIBox/WSD M2022-C2CRS

 

1 引言

 

对话推荐系统(CRS)旨在通过自然语言对话向用户推荐合适的商品。CRS的一个主要目标是在尽可能少的对话轮次内准确捕获用户偏好、完成推荐任务。但这些对话轮次仅包含非常有限的上下文信息来理解用户需求。为了解决这个问题,现有研究已经利用外部数据(如知识图谱、物品评论)丰富上下文信息,并且针对特定类型的外部数据设计了合适的融合模型。

 

但是对话数据和外部数据通常对应非常不同的信息形式(例如对话话语 v.s. 知识图谱)或语义内容(例如对话话语 v.s. 在线评论),这些数据之间有天然的语义鸿沟,很难将外部数据直接用于改进CRS。当多种类型的外部数据可供使用时,情况变得更加困难。因此,必须开发一种通用方法来弥合不同数据信号之间的语义差距。

 

要融合多类型上下文数据,一个主要挑战是它们通常对应于不同的语义空间,并且直接对齐它们的语义空间,可能会损害原始表示性能。为了解决这个问题,我们受到了一个重要的启发,即外部数据和对话数据都是一种多粒度的形式,例如知识图谱中的实体和实体子图, 对话中的单词和句子。实际上,用户偏好也体现在多粒度的方式上:细粒度的语义单元反映了一些特定的用户偏好(例如特定的演员实体),而粗粒度的语义单元反映了一些更泛化的偏好(例如一组对喜剧片的评论)。给定对话场景,可以根据用户偏好关联来自不同数据信号的语义单元,一个多粒度的语义对齐来融合不同的语义空间并更好地表征用户偏好是重要的。

 

2 方法简介

 

我们首先对不同类型的上下文数据进行编码。然后为了有效地利用多类型的数据,我们提出了一种由粗粒度到细粒度的对比学习框架,以改进 CRS 的数据语义融合。我们首先从不同的数据信号中提取和表示多粒度语义单元,然后以由粗粒度到细粒度的方式对齐关联的多类型语义单元。为了实现这个框架,我们设计了粗粒度和细粒度的预训练,前者侧重于更一般的、粗粒度的语义融合,后者侧重于更具体的、细粒度的语义融合。这种方法可以扩展到合并更多种类的外部数据。基于学习到的表示,我们构建了推荐模块和对话模块以完成各自任务。

 

我们的模型图如下所示。

 

3.1 特征编码

 

3.1.1 编码对话历史

 

对话历史 由系统和用户对话中的话语 组成,描述了用户与系统之间关于信息需求的交互。由于话语之间密切相关,为了获得对话历史的表示,我们将多个话语 拼接为一个长句子 ,然后采用标准的 Transformer来编码 :

 

 

其中用户的细粒度特征编码在单词的上下文词表示 中,是在 Transformer 的顶层获得的。我们使用了self-attention层聚合对话上文信息,获得对话历史表示 ,用户的粗粒度偏好即包含在其中。

 

3.1.2 编码知识图谱

 

知识图谱 由实体集 和关系集 组成。 它以三元组 的形式存储语义事实。

 

考虑到连接节点的边可能拥有有用的关系信息,我们利用 R-GCN 对 进行编码。形式上,节点 在 -th 层的表示计算如下:

 

 

其中 是 在 -th 层的节点表示, 表示在 、 和 关系下 的相邻节点集 是可学习矩阵。

 

我们因此可以获得节点表示矩阵 。同时基于self-attention和用户交互过的实体的表示,我们生成了基于图的粗粒度用户表示 。

 

3.1.3 编码评论

 

物品的评论文本 是用户撰写的关于物品 的一组句子 。我们用 Transformer 模型对每个句子进行编码,并利用self-attention来获得句子表示矩阵 。此外,考虑到评论通常包含噪音的并且可能与用户偏好无关,我们进一步利用句子级别的自注意力层来选择句子表示中的有用信息,生成了基于评论的用户表示 。

 

3.2 由粗粒度到细粒度的对比学习

 

经过上述编码,我们可以获得对话历史、知识图谱和评论文本的相应粗粒度表示、细粒度。这三种上下文数据对应不同的语义空间。接下来,基于多类型上下文数据之间的多粒度相关性,我们提出了一种由粗粒度到细粒度的对比学习方法来融合多类型信息以增强数据表示

 

3.2.1 粗粒度对比学习

 

根据上文,我们获得了对话历史表示 、知识图谱表示 和评论文本表示 。这些粗粒度的数据表示从不同视角反映用户的整体偏好。为了弥合表示之间的语义鸿沟,让表示互相增强彼此,我们提出了一种基于对比学习的预训练方法来对齐和融合三种类型的上下文数据。

 

对比学习是一种广泛采用的预训练技术,它通过将语义上接近的表示拉在一起,并将不相关的表示分开来学习表示。 来自同一个用户的三个表示 、 和 来自不同视图,并且语义上接近的。因此,我们取 , 和 作为正例,同时考虑同一batch内不同用户的粗粒度表示作为负例。 因此,粗粒度的预训练目标可以表示为:

 

 

其中 和 是用户的两种粗粒度表示, 是负例集, 是温度超参数, 是余弦相似度 。

 

由于相同用户在不同视图下的表示被拉到一起,这个目标对齐了三种类型的上下文数据的语义空间,并且这三种类型的表示相互补充,相互改进。

 

3.2.2 细粒度对比学习

 

粗粒度对比学习在整体层面融合了语义空间。然而,细粒度语义单元(例如单词和实体)之间的相应语义关联被忽略了。细粒度上下文数据捕获细粒度的、具体的用户偏好。因此,我们进一步进行细粒度对比学习以更好地融合表示空间。

 

对于这三种类型的上下文数据,细粒度的偏好被编码在对话历史中一个词的上下文词表示 中,来自知识图谱中的实体的节点表示 ,以及来自评论文档的句子的表示 。我们考虑了类型间数据关联,对于单词-实体相关性,我们利用实体链接方法将知识图谱中的实体与其在对话历史中的对应词进行匹配。对于实体-句子相关性,我们将实体与描述实体的句子进行匹配。

 

这样,我们就可以构造语义一致的表示三元组 来描述相同用户的细粒度偏好。然后,我们将三元组切分成 , 和 ,构建成对的正例用于对比学习。类似地,来自同一batch内其他用户的细粒度表示构成了一个负例集。因此,我们的细粒度预训练目标可以表述为:

 

 

为了进一步保持粗粒度对比学习的增强效果,我们将粗粒度目标以权重 加入。然后,最终的细粒度预训练目标 给出如下:

 

 

如上,我们设计了一种由粗粒度到细粒度的融合方式,让不同数据的语义空间逐渐融合,并且获得更优质的数据表示。

 

3.3 Fine-tuning

 

基于预训练的表示,我们构建了推荐模块和对话模块,并针对推荐任务和对话任务进行微调。

 

3.3.1 推荐模块fine-tuning

 

我们首先生成用户表示。在语义融合之后,实体表示已经从其他类型的上下文数据中学到了有用的信息,我们将其作为物品表示 。同时,我们将对话历史中出现的实体对应的表示使用self-attention聚合 ,生成用户表示 。然后,我们计算从物品集中向用户 推荐物品 的概率:

 

 

我们可以利用该公式对所有物品进行排名并为用户生成推荐集。

 

为了微调用户表示 和物品表示 ,我们应用交叉熵损失作为优化目标:

 

 

其中, 是对话数, 是对话的索引, 是物品的数量, 是物品的索引。

 

3.3.2 对话模块fine-tuning

 

我们的对话模块是Transformer Decoder架构的,并且构建了多个cross-attention层,以融合预训练的表示:

 

 

其中 是第 层解码器的输出表示矩阵。cross-attention层分别关注如下信息:生成的词 对话历史 知识图谱 评论。在此基础上,我们还设计了复制机制以增强生成的回复里的信息。

 

为了微调该模块以生成更多信息响应,我们设计了一个instance weighting增强的交叉熵损失:

 

 

其中 是生成的响应中的单词数, 是考虑该标记频率的权重, 是预设阈值, 是为了避免对高频词进行过多的惩罚, 是 在语料库中的词频。 通过上述交叉熵损失,我们可以惩罚高频单词,并帮助生成更多信息响应。

 

4 实验

 

4.1 数据集

 

我们使用了ReDial和TGReDial两个数据集

 

4.2 推荐任务实验结果

 

对于推荐任务,我们采用 Recall@ ( ) 进行评估。我们在两个数据集上进行了推荐效果的测试并和现有的baseline进行了比较。可以看到,C -CRS的推荐性能优于绝大部分的baseline。

 

4.3 对话任务实验结果

 

对于对话任务,评估包括自动评估和人工评估。自动评估方面,我们使用 Distinct -gram ( ) 来衡量句子级别的多样性。人工评估方面,我们使用Fluency衡量回复的流畅程度,用Informativeness衡量回复的信息量。可以看到,C -CRS的对话表现优于绝大部分的baseline。

 

4.4 消融实验

 

我们基于模型的不同变体进行了消融实验,以确定各个模块的有效性。 首先,我们可以看到去除粗到细对比学习导致最大的性能下降。由于多类型数据存在天然的语义鸿沟,融合底层语义是有效利用信息的关键。 其次,直接将所有预训练和微调任务进行多任务学习的性能会变差。主要原因是不同类型的数据很难融合,这就需要更好的语义融合方法。 最后,删除任何类型的外部数据都会导致性能下降。它表明各种外部数据在我们增强数据表示的方法中都很有用。

 

5 总结

 

我们为对话推荐系统设计了一种新的基于对比学习的粗粒度到细粒度的预训练方法。通过利用由粗到细的预训练策略,可以有效地融合多类型数据表示,从而进一步增强对话上下文的表示,最终提高CRS的性能。通过构建广泛的实验,我们的方法在推荐和对话任务中的有效性得到了证明。它表明我们的方法可以有效地弥合CRS不同外部数据信号之间的语义差距。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注