Paper : Contextual and Sequential User Embeddings for Large-Scale Music Recommendation

关键词:音乐推荐,用户嵌入,上下文,序列


摘要

推荐系统在提供在线音乐流媒体服务的引人入胜的体验方面扮演着重要的角色。然而,音乐领域对推荐系统提出了独特的挑战:音轨很短,被多次收听,通常是在与其他音轨的会话中使用,并且相关性高度依赖于上下文。

在本文中,我们认为在会话开始时对用户偏好进行建模是解决这些挑战的一种实用而有效的方法。使用从Spotify获得的数据集,是一个流行音乐流媒体服务,我们观察到:

最近的消费和会话级别的上下文变量(比如一天的时间或使用的设备类型)确实比静态的平均偏好更能预测用户将流的曲目。

在这些发现的驱动下,我们提出了CoSeRNN,一个神经网络架构,它将用户偏好建模为一个嵌入序列,每个会话一个。

在会话开始时,CoSeRNN根据过去的消费历史和当前上下文预测偏好向量。然后,通过使用近似的最近邻搜索算法,这个偏好向量可以在下游任务中使用,从而有效地生成上下文相关的即时推荐。


Motivation

我们从一个在线音乐流媒体服务的数据集开始我们的调查,该数据集包含了20万用户样本在两个月内流媒体音乐的详细信息,并将上下文定义为一天中的时间(上午、下午等)和用于访问服务的设备(移动设备、桌面设备等)。对于给定的用户,共享相同上下文的会话(例如,发生在早上的会话)彼此之间比来自不同上下文的会话更相似。我们还发现,用户在一段时间内听的歌曲越偏离他们的平均偏好,他们就越有可能点击跳过按钮——这是一个负面的满意信号。偏离用户的平均偏好可能是由于上下文的变化(比如早上和晚上),但也可能是由于最近会话中捕获的偏好漂移。

这些观察结果与我们的假设是一致的:准确地建模有顺序的和特定于上下文的意图对于确保所有会话的高用户满意度非常重要。

我们的出发点是一个音轨的向量空间嵌入。如果两条音轨有可能被接连听到,那么它们在空间上是接近的。给定这个空间,CoSeRNN将用户偏好建模为上下文相关的嵌入序列(轨迹空间中的点),每个会话一个。核心是递归神经网络的一个变体,对于每个会话,它接受当前会话上下文和用户过去消费的表示作为输入。鉴于这些,训练模型以输出最大嵌入度,使其与会话期间播放的轨道的余弦相似度最大。

有趣的是,我们发现产生这种嵌入的最有效的方法是将长期的、与上下文无关的向量(直观地捕捉用户的平均品味)与序列和上下文相关的偏移量(捕捉当前和上下文相关的偏好)相融合。

本文所探讨的问题主要有以下两点:

  • Q1:音乐消费是否依赖于上下文?
  • Q2:顺序和上下文依赖的用户嵌入能更好地预测用户的音乐消费吗?

Model

模型图如下:

该模型使用会话开始时可用的信息捕获用户依赖于序列和上下文的偏好。

这让我想起SR-GNN中所提到,他们考虑到用户在会话内的最近点击项具有更高的权重,所以对会话的最后一项给与了更多的考虑。

而本文中,从会话开始的可用信息出发,倒是让人耳目一新。这样做的目的是在会话开始时(不观察用户的任何显式操作),根据从过去消费历史和当前上下文获得的特性,预测会话期间将播放哪些曲目。

为了简便起见,我们以一个用户为例。给定一个用户会话索引

,我们表示预测的用户会话嵌入
,观察到的(ground-truth)会话嵌入
。其中,
分别表示跳过(skipped)和播放(played)动作。

模型的训练目标是最大限度地提高

两者之间的相似性,也就是真实的会话与我们要预测的会话之间的相似度。

它使用关于当前上下文的特性(例如当天的时间和设备)和关于上次会话的特性作为两个RNNs的输入,表示播放和跳过行为。这些RNNs将输入与潜在状态结合起来,捕获用户消费习惯中的顺序依赖关系。最后,将两个RNNs的输出进行合并融合,形成长期用户嵌入。


在这项工作中认为学习上下文和顺序用户嵌入的任务适合在会话开始时推荐音乐。为此,作者首先进行了多个探索性分析,以更好地理解会话如何根据上下文分布,音乐消费如何根据上下文变化,以及上下文如何与会话中的音轨关联。这几个问题的探索性分析是本文的重要组成部分。

模型并不十分复杂,使用的方法也并非是各路神奇的神经网络。但是作者对于会话推荐中的应用场景的影响因素分析写的非常清晰,解释得很详细。详情可以移步原论文:https://dl.acm.org/doi/pdf/10.1145/3383313.3412248。


xx是一个类型 这在给定的上下文_#PaperCarrier | CoSeRNN :为你解释序列化与上下文在会话推荐中的作用...相关推荐

  1. xx是一个类型 这在给定的上下文_基于上下文的派发:挂起临时变量内存

    最近做一些蒙卡相关的东西,然后遇到有一个可能很多人都会遇到的问题: 把所有的步骤都手写成原地(in-place)操作由于需要自己来保管各种中间变量会很麻烦(增加心智负担),但是用比较正常的方式去写又由 ...

  2. xx是一个类型 这在给定的上下文_BERT, ELMo, amp; GPT-2: 这些上下文相关的表示到底有多上下文化?...

    作者:Kawin Ethayarajh 编译:ronghuaiyang (AI公园) 具有上下文信息的词表示到底有多大程度的上下文化?这里给出了定量的分析. 将上下文信息放到词嵌入中 - 就像BERT ...

  3. 一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队

    任何时候,一个进程仅存在给定类型的一个挂起信号,同一进程同样类型的其他信号不被排队,只被简单的丢弃:理解--即使连续发送SIGQUIT信号,进程也只有处理一个SIGQUIT信号. Please rea ...

  4. 给定一个字符串str,给定一个字符串类型的数组arr,/出现的字符都是小写英文arr每一个字符串,/代表一张贴纸,你可以把单个字符剪开使用

    package 左神题目.dp; import java.util.*; //给定一个字符串str,给定一个字符串类型的数组arr, // 出现的字符都是小写英文arr每一个字符串, // 代表一张贴 ...

  5. ACMNO.24 C语言-转置矩阵 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。 输入 一个3x3的矩阵 输出 转置后的矩阵 样例

    题目描述 写一个函数,使给定的一个二维数组(3×3)转置,即行列互换. 输入 一个3x3的矩阵 输出 转置后的矩阵 样例输入 1 2 3 4 5 6 7 8 9 样例输出 1 4 7 2 5 8 3 ...

  6. struct 模块 把一个类型,如数字,转成固定长度的bytes

    该模块可以把一个类型,如数字,转成固定长度的bytes import structheaders=struct.pack('i',132333) print(headers,len(headers)) ...

  7. 怎么获取一个类型的所有字段的名字 和获取给予数据相应的值

    下面的代码你只要注意  怎么样获取字段名和相应数据的值就OK了其它的就不要管 View Code public FlexiGridData GetFlexiGridData<T>(Page ...

  8. boost::type_index模块实现一个类型中获得简短的和人类可读的类型名称

    boost::type_index模块实现一个类型中获得简短的和人类可读的类型名称 实现功能 C++实现代码 实现功能 boost::type_index模块实现一个类型中获得简短的和人类可读的类型名 ...

  9. Java黑皮书课后题第6章:*6.14(估算π)π可以使用下面的数列进行计算。编写一个方法,对于给定的i返回m(i),并编写一个测试程序,显示如下表格

    6.14(估算π)π可以使用下面的数列进行计算.编写一个方法,对于给定的i返回m,并编写一个测试程序,显示如下表格 题目 题目描述与运行示例 破题 代码 题目 题目描述与运行示例 6.14(估算π)π ...

最新文章

  1. 企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析--云平台技术栈08...
  2. 罗辑思维年终4小时演讲《时间的朋友》1000字浓缩版
  3. 【Linux】一步一步学Linux——bg命令(131)
  4. 数据库中触发器、事务
  5. Linxu的常用命令
  6. softmax函数与交叉熵损失函数
  7. win10无法连接到这个网络_电脑无法连接网络怎么办?(有线网络篇)
  8. 正则表达式 re模块
  9. 微软收购AI创业公司Bonsai,机械臂效率比DeepMind高45倍
  10. 适合程序员的健身方法(转)
  11. php类型cms,自定义存储类型
  12. xendesktop更新计算机,XenApp / XenDesktop 7.6 初体验二 配置计算机目录和交付组
  13. 【IoT】创业指南:智能硬件产品原型设计指南
  14. Mac/Linux/Ubuntu下 视频 显示双语/中英字幕 的方法
  15. Ubuntu kylin优麒麟下配置Hadoop环境
  16. Axure 9 收录不同效果的制作过程
  17. 软件设计实验(一)完成UML设计:类图、用例图、时序图
  18. python 战舰_Python战舰随机数发生器
  19. MS COCO数据集人体关键点评估(Keypoint Evaluation)(来自官网)
  20. 长春哪个学校可以学习计算机编程的,长春编程学习,长春学编程的学校,长春学编程自学好还是报班好 - IT教育频道...

热门文章

  1. Two Bases CodeForces - 602A (BigInteger c++long long也可以)
  2. MVC中使用T4模板
  3. 2016.3 idea 注册码
  4. jQuery 的 ajax
  5. MyEclipse添加Mybatis generator插件
  6. (Oracle)rownum用法详解 转载的
  7. Ubuntu18.04开机后图像界面消失解决(千万不要使用autoremove卸载软件!!!)
  8. 调试系列2:bugreport实战篇
  9. Android对话框_详解
  10. 人脸方向学习(三):人脸质量评价-人脸模糊检测总结二