序列推荐SRS 交互式推荐IRS 对话推荐CRS 以及建模为MDP后的区别

2024-02-06 22:38

本文主要是介绍序列推荐SRS 交互式推荐IRS 对话推荐CRS 以及建模为MDP后的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

序列推荐

  1. SRS:通过用户历史交互数据预测用户下一个要点击的物品。history interaction -> recommend the next item
  2. 如GRU4Rec,将用户点击过的物品一个一个输入模型,预测下一个要点击的物品。
  3. 属于one-step prediction

交互式推荐

  1. IRS:是循环推荐,收集反馈的过程
  2. 多步决策过程:1)推荐一个列表;2)收集用户对于该推荐的反馈。然后往复循环这两个步骤。
  3. 属于multi-step interaction

对话推荐

  1. CRS:① IRS可以视为 CRSs 的一种早期雏形,CRSs 引入了更多的交互模式,其核心任务是关注如何问问题,即什么时候问问题(不一定是对话的形式,也可以是给出选项让用户选择的形式),什么时候做推荐。
  2. 相比较task-oriented dialogue system,CRSs 关注的重点并不在于语言,而是推荐的质量。CRSs 的核心任务,还是利用其交互的能力去想方设法获得用户喜好,做出高质量体验。与此同时,CRSs 的输入输出可以用基于规则的文本模版来实现。当然,这并不代表语言不重要。随着技术的的发展迭代以及学者们研究方向的重合,不同领域的差距将越来越小。
  3. 例如,其可以主动问用户问题,例如问关于商品属性的问题:“你喜欢什么样颜色的手机?”“你喜欢关于摇滚类乐曲吗?”丰富的交互模式克服了交互式推荐系统的三个问题(太单调;需要在信息充足时推荐;用推荐商品刺探用户喜好是低效的),用更高效的方式来进行交互,从而快速获得用户的兴趣爱好,在信心比较充足的情况下,才作出推荐。

建模为MDP过程的SRS与IRS是一样的吗?

先说结论:可以! 原因如下:

  1. 二者的核心区别在于SRS是离线模型,IRS是在线策略,即前者只推荐一次,后者需要循环推荐。
  2. 离线模型:模型在一系列静态的历史数据上学习,可以当成单点学(传统推荐)或者序列学(SRS),不过都是静态的学,最后在test data上进行测试。
  3. 交互式学习:需要不断提供反馈,因此是一个动态的过程。
  4. 举个栗子:我们想给用户推荐一双臭袜子,但是用户并没有买过(没有历史数据),那要如何评价推荐的好坏呢(evaluation)?对于离线/静态模型,通常是求precision和recall指标,也就是看该用户之前买过的商品和推荐的商品有多少是重合的。那在这种情况下,就没有办法评估啦!但是交互式模型会提供一个反馈(reward),如rating,这样我们就可以知道推荐的商品用户是否满意啦~ 不过这就有了一个问题,用户没有买过这个商品,我们却需要他的评分,该怎么办呢?通常,我们会建立一个environment simulator,专门做这个事情!感兴趣的同学可以去搜搜相关论文哈
  5. 因此,将序列推荐和交互式推荐都建模为MDP后,相当于都引入了反馈机制(reward),也都需要不停推荐,因此二者这个时候就是一样的啦。

思考

读了对话推荐的综述(Advances and Challenges in Conversational Recommender Systems: A Survey)后,产生了一些问题,以下是自己的一些思考:

  1. CRSs其实并不强调“对话”的概念,dialogue只是一种形式,就像论文里写的“any form of interactions between users and systems, including written or spoken natural language, form fileds, buttons, and even gestures” (这里的form fields指的是“表单”,如筛选的小窗口等) 他的重点是能够通过多轮交互引出用户偏好“through real-time multi-turn interactions, elicit the dynamic preferences of users”。

  2. Q:CRS和 ask question的关系? A:除了问问题,CRS还可以做其他事情不是问问题的交互,比如做可解释性(以聊天的形式来解释为什么推荐这个产品,对用户而言不是黑盒的了)。并且问问题不一定是通过对话来问,有可能是给出选项让用户选。

  3. Q:综述里的“Question-based User Preference Elicitation”部分,写的是关注“问什么问题可以引出用户偏好”以及“怎么根据用户反馈调整问题”。“Multi-turn Conversational Recommendation Strategies”关注“什么时候问问题,什么时候推荐,只有在有信心的时候才做推荐” 。“Natural Language Understanding and Generation”关注“怎么像人一样交流”,需要提取语义信息,这里就涉及到NLP领域了,“利用树形结构制定模板、端到端的方法”。
    那这三部分挑战,好像都在强调对话、textual呀,没有涉及到“written or spoken natural language, form fileds, buttons, and even gestures”这些交互手段啊? A:因为NLP-based 比较新,综述中没有强调早期的东西(基于规则的)。

  4. 和IRS的区别:
    Q:IRS强调“推荐一个物品,收到反馈”这样一个循环的过程(属于早期CRSs)。综述里写“they focus on improving the recommendation strategy online by leveraging real-time user feedback on previously recommended items.”可是强调推荐策略,不是应该的嘛?难道重点在“online”和“real-time”?可是IRS很多也是离线的呀,难道只有线上的、实时的才算IRS吗?A:IRS的出发点是online,用离线的学是一种妥协;IRS就是为了在线场景打造的。
    ②二者获取/刺探用户偏好的渠道不太一样。 IRS是推荐一个item之后,才能收到反馈,即获取用户偏好。但是CRS是通过交互的形式获取用户偏好。(前者靠推荐,后者靠交互)
    ③ 推荐item的步骤不太一样。IRS是每次都要推荐;CRS是交互多轮,有信心了才推荐;综述里还提到一个critquing-based recommender system,它是问一个问题推荐一个item。

这篇关于序列推荐SRS 交互式推荐IRS 对话推荐CRS 以及建模为MDP后的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/685768

相关文章

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

C++中NULL与nullptr的区别小结

《C++中NULL与nullptr的区别小结》本文介绍了C++编程中NULL与nullptr的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编... 目录C++98空值——NULLC++11空值——nullptr区别对比示例 C++98空值——NUL

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Qt QCustomPlot库简介(最新推荐)

《QtQCustomPlot库简介(最新推荐)》QCustomPlot是一款基于Qt的高性能C++绘图库,专为二维数据可视化设计,它具有轻量级、实时处理百万级数据和多图层支持等特点,适用于科学计算、... 目录核心特性概览核心组件解析1.绘图核心 (QCustomPlot类)2.数据容器 (QCPDataC

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空