

夺冠 or 姜子牙?ChatBot帮你搞定:基于话题引导的对话推荐系统
source link: https://zhuanlan.zhihu.com/p/264978792
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

论文标题 :Towards Topic-Guided Conversational Recommender System
论文来源 :COLING 2020
论文链接 : https:// arxiv.org/abs/2010.0412 5
数据集链接 : https:// github.com/RUCAIBox/TG- ReDial
对话推荐系统(conversation recommender system, 以下简称CRS)旨在通过交互式的对话给用户推荐高质量的商品。为了搭建一个高质量的CRS,高质量的数据集至关重要。现有的数据集往往存在以下问题:
- 没有考虑用户自身的需求,直接就给出推荐,缺乏系统主动引导用户从非推荐场景过渡到推荐的过程;
- 没有考虑用户的个性化信息,如喜好的话题、购买过的商品等等。
这些问题导致对话推荐的数据集与实际应用场景存在一定差距,依此构建的CRS也就很难投入实际应用。
为了解决上述问题,本文提出了一个电影领域的对话推荐数据集 TG-ReDial ( Re commendation through T opic- G uided Dial og)。它包含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 ,用户交互序列
,历史对话
和对应的话题序列
,要求:
- 预测下一个话题
或者要推荐的电影
;
- 生成关于话题或者是电影推荐理由的正确回复
。
这些子任务分别对应 话题预测,物品推荐和回复生成 。实验时,按照8:1:1的比例随机划分生成训练集、验证集和测试集,对三个子任务进行评估。
推荐
这里的关键是得到一个有效的用户表示用于推荐。本文分别使用BERT[8]和SASRec[9]来编码历史对话和用户交互序列,将得到的嵌入进行拼接送入MLP,得到用户的表示:

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

其中, 是物品 的嵌入。

与其他基线模型相比,本文提出的模型使用了文本和交互序列这两方面的信息,性能显著优于其他模型。
话题预测
本文分别使用三个BERT[8]来对对话,话题和profile进行编码。对于每个BERT,将对应的文本和候选话题进行拼接,来突出话题的语义。和推荐类似,我们通过计算相似度预测出下一个话题:

其中, 是话题 的嵌入。

可以看出,历史对话和话题序列在话题预测中更为重要。
去掉候选话题后,性能显著下降,验证了加入候选话题的必要性。
回复生成
本文使用了预训练模型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.
Recommend
-
45
这7个技巧,帮你搞定网页中背景纹理的设计 我要投稿 编辑:
-
11
三个文件帮你搞定 Spring Cloud Gateway (Alibaba体系)在微服务架构中,网关是必不可少的重要组件。这关系到了客户端“如何访问”每个服务。以前主流的方式就是使用Netfilx的Zuul组件。但是,因为某些奇妙的原因,Netfil...
-
12
我的新课 《C2C 电商系统微服务架构120天实战训练营》 在公众号
-
7
10个维度,4种手段,帮你搞定用户分层 十里村 • 2021-04-19 20:45:56 来源:十里村 E1993G1...
-
10
👮每日一句 最美好的生活方式是和一群志同道合的人,一起奔跑在理想的路上,回头有一路的故事,低头有坚定的脚步,抬头有清晰的远方! 👮 Sentinel存在的意义 👮 Sentinel...
-
8
一文帮你搞定90%的JS手写题爱前端不爱恋爱关注微信公众号:web前端学习圈,领取85G前端全套系统教程
-
5
引流新玩法,可以帮你躺赢的视频号#话题标签?
-
11
聊到养生,年轻人向来有自己的态度:持续性熬夜、间歇性养生,就是当代青年推崇的“朋克养生“大法。概括成四个字,就是:边耗边补!这?纯粹无效养生喽!为了研究出更加有效、日常的养生大法,搞事情的X-men望闻问切,四处寻访,终于寻到了兔子这个养生良...
-
7
在一些特殊场景下,使用组件的时机无法确定,或者无法在Vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载。 今天我们将带大家从实际项目出发,看看在实际解决客户问题时,如何将组件进行动态挂...
-
5
新行为设计模型与触发式引导,帮你拿捏用户! 泡泡 2022-08-06 0 评论...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK