首发于AI Box
夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统

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

论文标题:Towards Topic-Guided Conversational Recommender System

论文来源:COLING 2020

论文链接arxiv.org/abs/2010.0412

数据集链接github.com/RUCAIBox/TG-

代码链接github.com/RUCAIBox/TG_

对话推荐系统(conversation recommender system, 以下简称CRS)旨在通过交互式的对话给用户推荐高质量的商品。为了搭建一个高质量的CRS,高质量的数据集至关重要。现有的数据集往往存在以下问题:

  1. 没有考虑用户自身的需求,直接就给出推荐,缺乏系统主动引导用户从非推荐场景过渡到推荐的过程;
  2. 没有考虑用户的个性化信息,如喜好的话题、购买过的商品等等。

这些问题导致对话推荐的数据集与实际应用场景存在一定差距,依此构建的CRS也就很难投入实际应用。

为了解决上述问题,本文提出了一个电影领域的对话推荐数据集TG-ReDial (Recommendation through Topic-Guided Dialog)。它包含1W个完整的对话和近13W条语句,加入了话题线索以实现将用户引导至推荐场景这一语义的自然转移,并且采用半自动的方式构建,保留了用户真实的个性化信息(如交互历史,偏好主题),使得人工标注过程更加合理可控。

基于TG-ReDial,本文提出了一个新任务,基于话题引导的对话推荐,并且基于目前最佳的预训练模型给出了相应的解决方法。实验表明了该方法在话题预测、物品推荐和回复生成三个子任务上的有效性。

数据集概况

TG-ReDial的统计数据见下表:

TG-ReDial中的每段对话包含了丰富的话题,平均一段对话涉及8次话题转移,提及3部电影,平均语句长度达到19个单词,超出了已有的CRS数据集。

此外,大多数现有的数据集主要关注冷启动场景,缺少历史交互数据,TG-ReDial则提供了用户的profile和丰富的观影历史。

我们从豆瓣上收集了真实的观影记录和电影评论,从中构造出user profile(用户偏好的话题)和用户的历史交互信息;在ConceptNet[1]这样一个知识图谱上找出连接所有电影的话题,作为话题转移序列;从豆瓣语料[2]和电影评论中进行检索并加以人工润色,得到最终的对话。可以看到,用红色和紫色标出的话题引导对话从闲聊自然转移到推荐,充分考虑到用户需求,符合真实的对话推荐场景。

总结一下,TG-ReDial提供了这样几个属性:

  • 对话
  • 话题转移序列
  • user profile(用户偏好的话题)
  • 用户交互序列(观影历史)

文章最后给出了一段中文对话样例供大家参考。

数据集构建

收集用于推荐的电影

我们从豆瓣上收集了真实的用户观影记录。从网站提供的标签(如电影的类别、导演和主演)和电影评论中提取到的高频关键词这两者中筛选出每部电影的标签,据此将整个观影序列划分成若干个至少拥有一个相同标签的子序列,每个子序列对应一段对话,平均每个用户参与了4到5段对话,根据用户对每部电影的评分来决定该用户是否会接受这部电影。

创建话题序列

所有对话的初始话题都设定为greeting(打招呼),从下一步要推荐的电影选出一个标签作为下一个话题。我们采用深度优先遍历的方式在ConceptNet上找出连接这两个话题的最短路径,重复上述过程将所有要推荐的电影连接起来,连接所有电影的路径就称作话题序列

此外,为了使得对话与用户偏好相一致,我们采用关键词+模板的方式构造了user profile(用户偏好的话题)。如果当前话题出现在user profile中,就采用这一话题;如果不在,有1/2的概率不采用这一话题,使得对话更加丰富多样。

生成对话

每段对话从闲聊开始,根据话题转移序列逐步转移到最终向用户推荐电影。受到MultiWOZ[3]的启发,我们采用候选驱动的方法,基于开源的豆瓣语料[2]和爬取的电影评论来生成对话。

  • 对于目标之前的话题,我们首先从豆瓣语料中随机检索出20个包含该话题的语句,然后使用一个基于RNN的匹配模型[4]计算相似度,选出和最后一句对话相关性最强的,加以人工润色,作为回复。
  • 对于目标话题,我们需要给出电影的推荐理由。因此我们基于extreme embedding similarity[5]检索出三个最相关的电影评论,人工挑选出一个进行润色,作为回复。

此外,为了保证数据的质量,我们引入了人工检查和Distinct[6]、BLEU[7]这两个评估指标进行筛选。

新任务:基于话题引导的对话推荐

基于TG-ReDial这个数据集,本文提出了一个新任务:基于话题引导的对话推荐

给定user profile P_u,用户交互序列I_u,历史对话\{s_1,...,s_{k-1}\}和对应的话题序列\{t_1,...,t_{k-1}\},要求:

  • 预测下一个话题t_k或者要推荐的电影i_k
  • 生成关于话题或者是电影推荐理由的正确回复s_k

这些子任务分别对应话题预测,物品推荐和回复生成。实验时,按照8:1:1的比例随机划分生成训练集、验证集和测试集,对三个子任务进行评估。

推荐

这里的关键是得到一个有效的用户表示用于推荐。本文分别使用BERT[8]和SASRec[9]来编码历史对话和用户交互序列,将得到的嵌入进行拼接送入MLP,得到用户的表示:

由此计算出用户和物品的相似度,得到物品被推荐的概率:

其中,e_i是物品i的嵌入。

与其他基线模型相比,本文提出的模型使用了文本和交互序列这两方面的信息,性能显著优于其他模型。

话题预测

本文分别使用三个BERT[8]来对对话,话题和profile进行编码。对于每个BERT,将对应的文本和候选话题进行拼接,来突出话题的语义。和推荐类似,我们通过计算相似度预测出下一个话题:

其中,e_t是话题t的嵌入。

可以看出,历史对话和话题序列在话题预测中更为重要。

去掉候选话题后,性能显著下降,验证了加入候选话题的必要性。

回复生成

本文使用了预训练模型GPT-2[10]生成回复:

  • 对于非推荐的情况,我们将下一个话题和历史对话拼接在一起作为输入;
  • 对于推荐的情况,我们将要推荐的电影和历史对话拼接在一起作为输入。

实验中,在PPL,BLEU,Distinct三个自动评测指标的基础上加入了人工评价指标Relevance, Fluency,Informativeness。大多数情况下本文提出的模型是最优的。

总结

本文提出了CRS领域的数据集TG-ReDial,基于该数据集,提出了基于话题引导的对话推荐这样一个新任务并给出了解决方法。实验表明,该方法在三个子任务上的效果优于其他基线方法。

TG-ReDial可以用于个性化的闲聊,目标引导的对话和序列化推荐,未来,我们将在TG-ReDial上探索这些任务。此外,我们还将探索解决基于话题引导的对话推荐这一新任务的其他方法。

附:数据集样例

conv_id : 10002
messages :
  {'local_id': 1, 'role': 'Recommender', 'content': '你在忙什么呢?'}
  {'local_id': 2, 'role': 'Seeker', 'content': '我最近打算考驾照呢!会开车真的很方便啊!'}
  {'local_id': 3, 'role': 'Recommender', 'content': '单纯会开车还不行,还得学会倒车。'}
  {'local_id': 4, 'role': 'Seeker', 'content': '可别提倒车了,真的是太难了,而且每次要学开车,我就感觉车子下一秒就有可能变成怪物,可能是我恐怖片看多了。'}
  {'local_id': 5, 'role': 'Recommender', 'content': '哈哈,那我觉得你应该多看看英雄题材,克服一下这种恐惧,要不要我给你推荐?'}
  {'local_id': 6, 'role': 'Seeker', 'content': '好啊,有那种关于英雄的战争片推荐吗?'}
  {'local_id': 7, 'role': 'Recommender', 'content': '《细细的红线》可以去看看,上帝保佑那些在战争中失去灵魂的孩子们,这部剧真的很好。'}
  {'local_id': 8, 'role': 'Seeker', 'content': '唉,如果全人类都反战,那当然不会有战争,这部电影听起来真的不错,我会好好看这一部的。还有什么关于二战的片子推荐吗?'}
  {'local_id': 9, 'role': 'Recommender', 'content': '你看过《黑皮书》么?我没想到战争和悬疑融合的这么好,是真的好喜欢。'}
  {'local_id': 10, 'role': 'Seeker', 'content': '可以信任人,但不可信任人性,我听说这部电影很有深意,我看的时候会好好的去参透的。'}
  {'local_id': 11, 'role': 'Recommender', 'content': '没错,是真的很有深意,很有人生意义,我觉得人生中最重要的感情之中,必不可少的感情是一定会有友谊了,人真的是不能没有朋友啊!'}
  {'local_id': 12, 'role': 'Seeker', 'content': '对啊,而且我觉得在军队里的友情是最深厚的。因为大家一切并肩作战,一起经历过生死。'}
  {'local_id': 13, 'role': 'Recommender', 'content': '那我就给你推荐一部战争题材的军队片吧,我觉得《从奴隶到将军》不错,参与战争,首先需要知道为何而战,这部片子真的很有意义,我认为你一定会喜欢的。'}
  {'local_id': 14, 'role': 'Seeker', 'content': '这部我了解过,电影很长,但一气呵成,线索分明,环环相扣,也是非常值得看的。谢谢你推荐这么多,回头聊,再见啦!'}
goal_path : {2: ['Seeker', '谈论', '开车'], 3: ['Rec', '谈论', '倒车'], 4: ['Seeker', '拒绝', '倒车', '谈论', '怪物'], 5: ['Rec', '谈论', '英雄', '请求推荐', '英雄'], 6: ['Seeker', '允许推荐', ['战争', '英雄']], 7: ['Rec', '推荐电影', '细细的红线'], 8: ['Seeker', '反馈', None, '请求推荐', '二战'], 9: ['Rec', '推荐电影', '黑皮书'], 10: ['Seeker', '反馈', None], 11: ['Rec', '谈论', '友谊'], 12: ['Seeker', '谈论', '军队'], 13: ['Rec', '请求推荐', ['战争', '军队'], '推荐电影', '从奴隶到将军'], 14: ['Seeker', '反馈,结束', None]}
mentionMovies : {7: ['1292781', '细细的红线(1998)'], 9: ['1858802', '黑皮书(2006)'], 13: ['1437321', '从奴隶到将军(1979)']}
user_id : 559

参考文献

[1] Robyn Speer, Joshua Chin, and Catherine Havasi. 2017. Conceptnet 5.5: An open multilingual graph of general knowledge. In Proceedings of the Thirty-First AAAI Conference on Artificial Intelligence, February 4-9, 2017, San Francisco, California, USA, pages 4444–4451.

[2] Yu Wu, Wei Wu, Chen Xing, Ming Zhou, and Zhoujun Li. 2017. Sequential matching network: A new architecture for multi-turn response selection in retrieval-based chatbots. In Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics, ACL 2017, Vancouver, Canada, July 30 - August 4, Volume 1: Long Papers, pages 496–505.

[3] Pawel Budzianowski, Tsung-Hsien Wen, Bo-Hsiang Tseng, I˜nigo Casanueva, Stefan Ultes, Osman Ramadan, and Milica Gasic. 2018. Multiwoz - A large-scale multi-domain wizard-of-oz dataset for task-oriented dialogue modelling. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing, Brussels, Belgium, October 31 - November 4, 2018, pages 5016–5026.

[4] Ryan Lowe, Nissan Pow, Iulian Serban, and Joelle Pineau. 2015. The ubuntu dialogue corpus: A large dataset for research in unstructured multi-turn dialogue systems. In Proceedings of the SIGDIAL 2015 Conference, The 16th Annual Meeting of the Special Interest Group on Discourse and Dialogue, 2-4 September 2015, Prague, Czech Republic, pages 285–294.

[5] Chia-Wei Liu, Ryan Lowe, Iulian Serban, Michael Noseworthy, Laurent Charlin, and Joelle Pineau. 2016a. How NOT to evaluate your dialogue system: An empirical study of unsupervised evaluation metrics for dialogue response generation. In Proceedings of the 2016 Conference on Empirical Methods in Natural Language Processing, EMNLP 2016, Austin, Texas, USA, November 1-4, 2016, pages 2122–2132.

[6] Jiwei Li, Michel Galley, Chris Brockett, Jianfeng Gao, and Bill Dolan. 2016. A diversity-promoting objective function for neural conversation models. In NAACL HLT 2016, The 2016 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, San Diego California, USA, June 12-17, 2016, pages 110–119.

[7] Kishore Papineni, Salim Roukos, Todd Ward, and Wei-Jing Zhu. 2002. Bleu: a method for automatic evaluation of machine translation. In Proceedings of the 40th Annual Meeting of the Association for Computational Linguistics, July 6-12, 2002, Philadelphia, PA, USA, pages 311–318.

[8] Jacob Devlin, Ming-Wei Chang, Kenton Lee, and Kristina Toutanova. 2019. BERT: pre-training of deep bidirectional transformers for language understanding. In Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, NAACL-HLT 2019, Minneapolis, MN, USA, June 2-7, 2019, Volume 1 (Long and Short Papers), pages 4171–4186.

[9] Wang-Cheng Kang and Julian J. McAuley. 2018. Self-attentive sequential recommendation. In IEEE Interna-tional Conference on Data Mining, ICDM 2018, Singapore, November 17-20, 2018, pages 197–206.

[10] Alec Radford, Jeffrey Wu, Rewon Child, David Luan, Dario Amodei, and Ilya Sutskever. 2019. Language models are unsupervised multitask learners. OpenAI Blog, 1(8):9.

编辑于 2020-12-12 21:45

文章被以下专栏收录