本文是对经典论文的阅读笔记,大部分为论文的中文翻译内容(笔者英语水平也就六级飘过的水准,不喜勿喷)

论文标题:Matrix factorization techniques for recommender systems

随着Netflix竞赛的结果所示,矩阵分解模型在商品推荐上的表现要优于传统的近邻技术,矩阵分解允许合并附加信息,如隐式反馈、时间效应和置信度。

现代消费者被太多的选择所困扰。电子零售商和内容提供商提供了大量的产品选择,提供了前所未有的机会来满足各种特殊需求和品味。为消费者提供最合适的产品是提高用户满意度和忠诚度的关键。因此,越来越多的零售商开始对推荐系统感兴趣。推荐系统通过分析用户对产品的兴趣模式,提供符合用户口味的个性化推荐。因为好的个性化推荐系统可以增加用户体验的另一个维度,像亚马逊和Netflix这样的电子商务行业的领导者已经将推荐系统作为网站的重要组成部分。

这种系统对娱乐产品,如电影、音乐和电视节目特别有用。许多客户将观看同一部电影,而每个客户可能会观看许多不同的电影。事实证明,客户愿意表明他们对特定电影的满意程度,因此网站可以获得关于哪些电影吸引哪些客户的大量数据。公司可以通过分析这些数据向特定的客户推荐电影。

推荐系统策略

一般来说,推荐系统基于两种策略中的一种。内容过滤方法为每个用户或产品创建一个配置文件来描述其性质。例如,一个电影配置文件可以包括关于它的类型、参与的演员、票房受欢迎程度等等的属性。用户配置文件可能包括人口统计信息或在适当的问卷上提供的答案。配置文件允许程序将用户与匹配的产品关联起来。当然,基于内容的策略需要收集可能不可用或者不易收集的外部信息。

一个著名的成功实现内容过滤的是Music Genome Project,它在http://Pandora.com中被用于互联网广播服务。一个训练好的音乐分析器根据数百种不同的音乐特征为音乐基因组计划中的每首歌曲打分。这些属性或基因,不仅捕获了一首歌的音乐同一性,而且还捕获了许多重要的品质,这些品质与理解听众的音乐喜好有关。

内容过滤的另一种方法是只依赖于过去的用户行为——例如,以前的交易记录或对产品的评分——而不需要创建明确的配置文件。这种方法称为协同过滤,这是Tapestry(第一个推荐系统)的开发人员创造的术语。协同过滤分析了用户之间的关系和产品之间的相互依赖关系,以识别新的用户-项目关联。

协同过滤的一个主要吸引力是它是使用邻域自由的,但它可以解决数据方面的问题,这些问题通常难以捉摸,很难用内容过滤来描述。虽然协同过滤通常比基于内容的技术更准确,但由于它无法解决系统的新产品和新用户,因此存在所谓的“冷启动”问题。在这方面,内容过滤是更好的。

协同过滤的两个主要领域是邻域模型和隐因子模型。邻域模型关注于计算项目之间或用户之间的关系。面向商品的方法基于同一用户对“相邻”商品的评分,评估用户对商品的偏好。一个产品的邻居指的是其他产品,这些产品在被同一用户评价时往往得到相似的评价。例如,考虑电影Saving Private Ryan。它的邻居可能包含战争电影,Spielberg的电影,和Tom Hanks的电影。为了预测特定用户对Saving Private Ryan的评分,我们将寻找该用户实际评价的影片的最近邻居。正如图1所示,以用户为导向的方法识别出志同道合的用户,他们可以互相补充评分。

图1

隐因子模型是一种替代方法,它通过根据评分模式推断出的20到100个因子来表征商品和用户,从而试图解释评分。从某种意义上说,这些因子包含了上述人为创造的歌曲基因的计算替代物。对于电影来说,发现的因子可能会衡量明显的维度,例如喜剧与戏剧,动作量或对儿童的导向;不太明确的维度例如角色发展的深度或古怪程度;或者完全无法解释的维度。对于用户来说,每个因子都衡量了用户对相应电影因子中得分高的电影的喜爱程度。

图2展示了一个二维简化示例的这种思想。考虑两个假设的维度,即女性主导与男性主导,严肃的人与逃避现实者。该图显示了这两个维度上可能有几部著名电影和一些虚构用户。对于此模型,相对于电影的平均评分,用户对电影的预测评分将等于该电影和用户在图表上的位置的点积。例如,我们认为Gus喜欢Dumb and Dumber,讨厌The Color Purple,把Braveheart设为平均水平。值得注意的是一些电影例如Ocean's 11和用户例如Dave在这两方面都是中立的。

图2

矩阵分解模型

一些最成功的隐因子模型的实现是基于矩阵分解的。矩阵因子分解的基本形式是通过从项目评分推断出的因子向量来表征项目和用户。对项目因子和用户因子的高相关性促成了推荐。这些方法结合了良好的可扩展性和预测精度,近年来变得流行起来。此外,它们为建模各种现实情况提供了很大的灵活性。

推荐系统依赖于不同类型的输入数据,这些数据通常放在一个矩阵中,一个维度表示用户,另一个维度表示感兴趣的项目。最方便的数据是高质量的显式反馈,包括用户对项目感兴趣的显式输入。例如,Netflix收集了电影的星级评分数据,而TiVo用户通过按下大拇指向上和向下按钮来显示他们对电视节目的喜好。我们将明确的用户反馈称为评分。通常,明确的反馈包含一个稀疏矩阵,因为任何一个用户可能只对可能的项目的一小部分进行了评价。

矩阵因子分解的一个优点是它允许合并额外的信息。在没有显式反馈的情况下,推荐系统可以通过隐式反馈推断用户的偏好,通过观察用户的购买历史、浏览历史、搜索模式甚至鼠标移动等行为,间接反映用户的意见。隐式反馈通常表示事件的存在或不存在,因此通常用密集填充的矩阵表示。

基本的矩阵分解模型

矩阵分解模型将用户和物品映射到一个维数为f的联合隐因子空间,用户与物品的交互被建模为该空间的内积。因此,每个项目i与一个向量

对应,每个用户u与一个向量
对应。对于一个给定的项目i,
的的元素是衡量项目拥有这些因子的程度,积极的或消极的。对于一个给定的用户u,
的元素可以衡量用户对项目的兴趣程度,这些项目的相关因素偏高,无论是正面的还是负面的。点乘 的结果
获得了每个用户u和项目i的交互---用户对项目特征的总体兴趣。这近似于用户u对项目i的评分,用
表示,从而得到估计评分如下:
(1)

主要的挑战是计算每个项目和用户映射的因子向量

。推荐系统完成这个映射后,可以很容易地根据公式1估计用户对任何物品的评价。

这种模型与奇异值分解(SVD)密切相关,奇异值分解是一种用于在信息检索中识别潜在语义因子的成熟技术。在协同过滤域中应用SVD需要考虑用户项目评分矩阵。由于用户项目评分矩阵的稀疏性导致矩阵中的缺失值占了很大一部分,这常常会带来困难。当有关矩阵的知识不完全时,传统的奇异值分解是无定义的。此外,如果只对相对较少的已知项目进行处理,就很容易出现过拟合。

较早的系统依靠估算来填补缺失的评分并使评分矩阵密集。但是,由于这样进行估算会大大增加数据量,因此代价可能非常昂贵。此外,不准确的估计可能使数据失真很大。因此,最近的工作建议仅直接对观察的评分建模,同时通过正则化模型来避免过度拟合。为了学习因子向量(

),系统将已知评分的正则化平方误差最小化:
(2)

这里,K是已知评分

的用户u与项目i的集合(u,i)。

系统通过拟合先前观察到的评分来学习模型。然而,我们的目标是用一种预测未来未知评分的方式来概括之前的评分。因此,系统通过对学习参数进行正则化来避免对观测数据的过拟合,学习参数要受到惩罚。常数

控制了正则化的程度,通常由交叉验证来确定。Ruslan Salakhutdinov 和 Andriy Mnih的“Probabilistic Matrix Factorization”为正则化提供了一个概率基础。

学习算法

两个方法可以来最小化(2)式,分别是随即梯度下降和交替最小二乘法(ALS)。

随机梯度下降

Simon Funk推广了对(2)式的随机梯度下降,其中,算法循环遍历训练集中的所有评分。对于每个给定的训练案例,系统都会预测

并计算相关的预测误差。

然后,它在梯度的相反方向上按与r成比例的量级修改参数,从而得出:

这种流行的方法易于实现并且获得了相对快速的运行时间。然而,在某些情况下,使用ALS优化是更好的。

交替最小二乘法

因为

是未知的,2式是非凸的。然而,如果我们固定一个未知项,则优化问题将变成二次问题,并且可以得到最优解。因此,ALS技术在固定
和固定
之间转化。当所有的
固定时,系统通过解决最小二乘问题重新计算
,反之亦然。这保证了2式每一步都在减少,直到收敛。

一般来说,随机梯度下降比ALS更简单、更快,但ALS至少在两种情况下是有利的。首先是系统可以使用并行化的时间。在ALS中,系统独立于其他项目因子计算每个

,独立于其他用户因素计算每个
。这可能会导致算法的大量并行化。第二种情况是针对以隐式数据为中心的系统。因为不能将训练集视为稀疏的,所以像梯度下降那样遍历每个单个训练案例将是不切实际的。ALS可以有效解决这种情况。

添加偏置

矩阵分解协同过滤方法的一个优点是它在处理各种数据的灵活性和其他具体应用的要求。这就要求在保持相同学习框架来计算式1。式1试图获取用户和产生不同评分值的项目之间的交互。然而,许多观察到的评分值的变化是由于与用户或项目相关的影响,即偏差或截距(intercepts),与任何交互无关。例如,典型的协同过滤数据表现出较大的系统趋势,即某些用户给予的评价要高于其他用户,而某些项目所获得的评价要高于其他项目。毕竟,有些项目被普遍认为比其他项目更好(或更差)。

因此,通过

来解释全部评分值是不明智的。取而代之的是,系统尝试识别这些值中各个用户或项目偏见可以解释的部分,仅对数据的真实交互部分进行因子建模。一个一阶的将偏置包含的评分预测模型
如下式所示:
(3)

包含偏置项的评分

进行表示并且由用户影响和项目影响所导致。总体平均评分由μ表示,参数
分别表示用户u和项目i与平均值的观察偏差。例如,假设你要对用户Joe对电影《泰坦尼克号》的评分进行一次估算。现在,假设所有电影的平均评分µ为3.7分。此外,泰坦尼克号比平均的电影要好,所以它的评分倾向于比平均评分高0.5分。另一方面,Joe是个挑剔的用户,打分倾向于比平均分低0.3分。因此,Joe对《泰坦尼克号》电影的评分预估为3.9分,(3.7+0.5-0.3)。式1的偏差扩展式如下:
(4)

在这里,观察到的评分被分解为四个部分:总体平均评分,项目偏置分,用户偏置分,和用户-项目交互项。这使得每个部分只能解释与之相关的信号部分。系统通过最小化平方误差函数来学习:

(5)

由于偏差往往会捕获很多观察到的信号,因此准确的建模至关重要。因此,其他的论文有提供了更详尽的偏差模型。

额外的输入源

通常一个系统必须处理冷启动问题,其中许多用户提供很少的评分,使它很难就他们的口味得出一般结论。缓解这个问题的一种方法是合并关于用户的其他信息源。推荐系统可以使用隐式反馈来深入了解用户的偏好。实际上,无论用户是否愿意提供明确的评分,他们都可以收集行为信息。零售商可以利用客户的购买记录或浏览历史来了解他们的倾向,以及这些客户可能提供的评级。

为简单起见,考虑使用布尔类型隐式反馈的情况。N(u)代表用户u表示隐式偏好的项目集。这样,系统就通过用户隐式首选的项目对用户进行了描述。在这里,需要一组新的项目因子,其中项目i与

相关联。因此,在N(u)中表示项目偏好的用户由下式向量进行特征化:

对求和正规化通常是有效的,例如

另一个信息源是已知的用户属性,例如,人口统计信息。再次,为简单起见,考虑布尔属性,其中用户u对应于属性A(u)的集合,该集合可以描述性别,年龄组,邮政编码,收入水平等。一个独立的因子向量

对应于每个属性,通过一组用户关联的属性来描述用户:

矩阵分解模型应集成所有信号源,并增强用户表示能力:

尽管前面的示例处理的是增强用户表示能力(在这种情况下,缺少数据更为常见),但在必要时可以对项目进行类似的处理。

时间动态

到目前为止,所提出的模型都是静态的。实际上,随着新选择的出现,产品的感知度和受欢迎度会不断变化。同样,客户的偏好也会发生变化,从而导致他们重新定义自己的口味。因此,系统应考虑到反映用户项交互的动态,时间漂移性质的时间效应。

矩阵分解方法可以很好地模拟时间效应,具有很好的实时性来改善准确性。将评级分解为不同的项可以使系统分别处理不同的时间方面。具体而言,以下的项会随时间变化:项目偏置

;用户偏置
以及用户偏好设置

第一个时间效应解决了一个事实,即商品的受欢迎程度可能会随着时间而改变。例如,电影可能会受到外部事件(例如演员在新电影中的露面)的触发而变得流行或者变得不流行。因此,这些模型处理项目偏置

可以当作是时间的函数。第二种时间效应使用户可以随时间更改其基线评级。例如,倾向于将平均电影评级为“ 4星”的用户现在可以将此类电影评级为“ 3星”。这可能反映了几个因素,包括用户评分尺度的自然漂移,用户分配评分相对于其他近期评分的事实,以及评分者在家庭中的身份可能随时间而改变的事实。因此,在这些模型中,参数
是时间的函数。

时间动态超越了这一点。它们还会影响用户的偏好,从而影响用户与项目之间的交互。用户会随着时间改变其偏好。例如,喜欢心理刺激类型电影的粉丝可能会在一年后成为犯罪剧的粉丝。同样,人类会改变他们对某些演员和导演的看法。该模型采用用户因素(向量

)来解释这种影响作为时间的函数。另一方面,它指定静态项目特征
,因为与人类不同,项目本质上是静态的。

加入时间因素后评分预测规则如下所示:

(7)

具有不同置信水平的输入

在一些设置中,并不是所有观察到的评分都具有相同的权重或可信度。例如,大量的广告可能会影响对某些商品的投票,而这些商品并不能恰当地反映长期特征。类似地,系统可能会遇到试图倾斜某些物品的评分的敌对用户。

另一个例子是建立在隐式反馈基础上的系统。在这种解释正在进行的用户行为的系统中,用户的确切偏好分数很难量化。因此,该系统使用粗略的二进制表示形式工作,指出“可能喜欢该产品”或“可能对该产品不感兴趣”。在这种情况下,将置信度得分与估计的偏好附加在一起很有价值。置信可以来自于可用的描述动作频率的数值,例如,用户观看某个节目的时间,或者用户购买某个商品的频率。这些数值表示每次观察的置信度。各种与用户无关的因素偏好可能导致一次性事件;然而,重复发生的事件更有可能反映用户的意见。

矩阵分解模型可以很容易地接受不同的置信水平,这让它给予较少有意义的观察较少的权重。若对观察的评分

的置信度记为
,则模型对成本函数(方程5)进行增强,以说明置信度如下:

基于hadoop的商品推荐系统_【论文笔记】基于矩阵分解的推荐系统相关推荐

  1. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  2. 推荐系统--联邦学习下的矩阵分解(6)

    推荐系统–矩阵分解(1) 推荐系统–矩阵分解(2) 推荐系统–矩阵分解(3) 推荐系统–矩阵分解(4) 推荐系统–矩阵分解(5) 推荐系统–矩阵分解(6) 9 应用于联邦学习的矩阵分解 这个部分主要参 ...

  3. 基于hadoop的商品推荐系统_[零基础入门推荐系统(1)]基于用户和基于物品的协同过滤方法(python代码实现)...

    1. 前言: 为什么会有该系列? 最近,打算写<零基础入门推荐系统>系列,为了系统地介绍推荐系统知识,以及加强基础的实践能力. 该系列将结合一些书籍,比如项亮的<推荐系统实践> ...

  4. 综述:基于图学习的推荐系统;论文笔记

    文章目录 摘要 1. 介绍 1.1 图如何表达推荐任务? 1.2 图学习对推荐系统有效吗? 1.3 基于图学习的推荐系统符号化(Formalization) 2. 数据特征和挑战 2.1 一般交互数据 ...

  5. 基于特征的对抗迁移学习论文_[论文笔记] 对抗样本不是bugs,而是特征

    [论文笔记] Adversarial Examples Are Not Bugs, They Are Features 说在前面 个人心得: 这是关于对抗样本可解释性的工作 理论部分看不懂,看懂了再来 ...

  6. 推荐系统笔记:矩阵分解+基于邻居的模型

    由于其启发式性质,基于邻域的方法通常被认为与其他优化模型具有内在的不同. 尽管如此,结果表明基于邻域的方法也可以嵌入在其他优化模型的上下文中. 这是一个相当方便的框架,因为它为邻域模型与其他优化模型( ...

  7. 光流 速度_[论文笔记] FlowNet 光流估计

    [论文笔记] FlowNet: Learning Optical Flow with Convolutional Networks 说在前面 个人心得: 1. CNN的光流估计主要是速度上快,之后的v ...

  8. 基于python的系统构建_利用python构建一个简单的推荐系统

    摘要: 快利用python构建一个属于你自己的推荐系统吧,手把手教学,够简单够酷炫. 本文将利用python构建一个简单的推荐系统,在此之前读者需要对pandas和numpy等数据分析包有所了解. 什 ...

  9. 关系查询处理 查询优化 论文_论文导读基于查询负载的分布式RDF图分割和分配...

    Adaptive Distributed RDF Graph Fragmentation and Allocation based on Query Workload PengPeng, Lei Zo ...

最新文章

  1. SpringBoot+SpringSecurity前后端分离+Jwt的权限认证(改造记录)
  2. c语言哪个编译软件能够将整个工程自动生成调用图_这10个C语言技巧让初学者少走180天弯路!...
  3. python远程主机强迫关闭了_Python 远程主机强迫关闭了一个现有的连接
  4. 1. JDK版本变迁和各版本新特性
  5. 如何在家优雅地使用 Sci-Hub 免费下载外文文献
  6. SASS-HRM-Day04
  7. Golang + selenium 设置无头浏览器模式
  8. rpi4b引导ubuntu分析------distro_bootcmd
  9. 印象团队EverTeam for Mac(团队协作工具)
  10. 5.2 创建个人中心页面-前端部分
  11. Dubbo(一):Dubbo 3.0
  12. 什么是内存对齐,为什么要内存对齐?
  13. mybatis 多参数中有一个list 使用方法
  14. 工控机常见问题与解决方法
  15. Excel柱状图一个系列中各个值如何单独设置误差线
  16. 计算机专业考MBA有优势吗,工作后考mba有什么好处
  17. 2019TLC大会精彩回顾—大前端·信息流
  18. 检测浏览器版本(综合整理)
  19. 使用国密函数读取金税盘信息-Delphi 版
  20. RaiDrive NonProfit 非盈利版

热门文章

  1. C++拾遗(四)——顺序容器
  2. PHP中的中文截取乱码问题_gb2312_utf-8
  3. MySQL Cluster 4个数据节点压力测试--mysqlslap工具压400W写
  4. m3u:直播流的html接近下载
  5. 获取Flex SDK加载进度的方法
  6. 对 带头结点的单链表 的操作
  7. 2.2.2.进程调度的时机切换与过程、方式
  8. 数据库高级知识——索引优化分析(一)
  9. 图计算-Pregel-Hama
  10. java comparator内部类_java - Java Comparator使用.reverseOrder()但内部类 - 堆栈内存溢出...