夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统( 二 )


此外 , 为了使得对话与用户偏好相一致 , 我们采用关键词+模板的方式构造了user profile(用户偏好的话题) 。 如果当前话题出现在user profile中 , 就采用这一话题;如果不在 , 有1/2的概率不采用这一话题 , 使得对话更加丰富多样 。
生成对话每段对话从闲聊开始 , 根据话题转移序列逐步转移到最终向用户推荐电影 。 受到MultiWOZ[3]的启发 , 我们采用候选驱动的方法 , 基于开源的豆瓣语料[2]和爬取的电影评论来生成对话 。

  • 对于目标之前的话题 , 我们首先从豆瓣语料中随机检索出20个包含该话题的语句 , 然后使用一个基于RNN的匹配模型[4]计算相似度 , 选出和最后一句对话相关性最强的 , 加以人工润色 , 作为回复 。
  • 对于目标话题 , 我们需要给出电影的推荐理由 。 因此我们基于extreme embedding similarity[5]检索出三个最相关的电影评论 , 人工挑选出一个进行润色 , 作为回复 。
此外 , 为了保证数据的质量 , 我们引入了人工检查和Distinct[6]、BLEU[7]这两个评估指标进行筛选 。
3 新任务:基于话题引导的对话推荐
基于TG-ReDial这个数据集 , 本文提出了一个新任务:基于话题引导的对话推荐
给定user profile, 用户交互序列 , 历史对话和对应的话题序列 , 要求:
  • 预测下一个话题或者要推荐的电影;
  • 生成关于话题或者是电影推荐理由的正确回复 。
这些子任务分别对应话题预测 , 物品推荐和回复生成 。 实验时 , 按照8:1:1的比例随机划分生成训练集、验证集和测试集 , 对三个子任务进行评估 。
推荐这里的关键是得到一个有效的用户表示用于推荐 。 本文分别使用BERT[8]和SASRec[9]来编码历史对话和用户交互序列 , 将得到的嵌入进行拼接送入MLP , 得到用户的表示:
夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统文章插图
由此计算出用户和物品的相似度 , 得到物品被推荐的概率:
夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统文章插图
其中 , 是物品的嵌入 。
夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统文章插图
与其他基线模型相比 , 本文提出的模型使用了文本和交互序列这两方面的信息 , 性能显著优于其他模型 。
话题预测本文分别使用三个BERT[8]来对对话 , 话题和profile进行编码 。 对于每个BERT , 将对应的文本和候选话题进行拼接 , 来突出话题的语义 。 和推荐类似 , 我们通过计算相似度预测出下一个话题:
夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统文章插图
其中 , 是话题的嵌入 。
夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统文章插图
可以看出 , 历史对话和话题序列在话题预测中更为重要 。
去掉候选话题后 , 性能显著下降 , 验证了加入候选话题的必要性 。
回复生成本文使用了预训练模型GPT-2[10]生成回复:
  • 对于非推荐的情况 , 我们将下一个话题和历史对话拼接在一起作为输入;
  • 对于推荐的情况 , 我们将要推荐的电影和历史对话拼接在一起作为输入 。

夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统文章插图
实验中 , 在PPL , BLEU , Distinct三个自动评测指标的基础上加入了人工评价指标Relevance ,Fluency , Informativeness 。 大多数情况下本文提出的模型是最优的 。
4 总结
本文提出了CRS领域的数据集TG-ReDial , 基于该数据集 , 提出了基于话题引导的对话推荐这样一个新任务并给出了解决方法 。 实验表明 , 该方法在三个子任务上的效果优于其他基线方法 。