推荐系统中的矩阵分解技术

推荐系统中的矩阵分解技术

本文翻译自Koren Y, Bell R, Volinsky C. Matrix Factorization Techniques for Recommender
Systems[J]. Computer, 2009, 42(8) : 30 – 37.

现代消费者被大量的选择所淹没。电子零售商和内容提供商提供了大量的产品选择,以前所未有的机会来满足各种特殊的需求和口味。给用户推荐最合适的产品是提高用户满意度和忠诚度的关键。因此,越来越多的零售商开始对推荐系统感兴趣,这些推荐系统分析用户对产品的兴趣模式,提供适合用户喜好的个性化推荐。由于良好的个性化建议可以为用户体验增添另一个层面,电子商务领袖如Amazon.com和Netflix已经将推荐系统作为其网站的一个显著部分。

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

推荐系统策略

​ 广义而言,推荐系统基于两种策略之一。内容过滤方法为每个用户或产品创建一个配置文件(profile)来描述其特性。 例如,电影配置文件可以包括关于其流派的属性,参与的演员,其票房流行度等等。 用户配置文件可能包括人口统计信息或适当调查问卷上提供的答案。 配置文件允许程序将用户与匹配的产品相关联。 当然,基于内容的策略需要收集外部信息,这些信息可能不可用或不易收集。

​ 内容过滤的一个已知的成功的实现是音乐基因组项目,用于互联网无线电服务Pandora.com。训练有素的音乐分析师们根据数百个不同的音乐特点为“音乐基因组计划”中的每首歌打分。这些属性或基因不仅捕捉到歌曲的音乐身份,还捕捉与理解听众的音乐偏好相关的许多重要的素质。

​ 内容过滤的替代方案仅依赖于过去的用户行为,例如以前的交易或产品评级,而不需要创建明确的配置文件。 这种方法被称为协同过滤,这是由世界上第一个推荐系统Tapestry的开发者创造的一个术语。协作过滤分析用户之间的关系和产品之间的相互依赖关系,以识别新的用户 - 项目关联。

​ 协同过滤的主要吸引力在于它域无关的,但是它可以解决通常难以使用内容过滤进行概要分析的数据方面。尽管通常比基于内容的技术更精确,但由于协作过滤无法处理系统的新产品和新用户,所以存在所谓的冷启动问题。 在这方面,内容过滤是优越的。

​ 协同过滤的两个主要领域是邻域方法和潜在因子模型。 邻域方法的核心是计算项目之间或用户之间的关系。 项目导向的方法根据同一用户对“邻近”项目的评分来评估用户对项目的偏好。 一个产品的邻居是其他产品,当被同一用户评价时,往往会得到相似的评价。 例如,考虑电影《拯救大兵瑞恩》。 它的邻居可能包括战争电影,斯皮尔伯格电影和汤姆·汉克斯电影等等。 为了预测特定用户对《拯救大兵瑞恩》的评价,我们会查找该用户实际评价的、《拯救大兵瑞恩》的最近的邻居。 如图1所示,面向用户的方法确定了能够相互补充评价的志趣相投的用户。

推荐系统中的矩阵分解技术

​ 潜在因素模型是另一种尝试解释评级的方法,通过对评分模式推断出的20到100个因素进行特征描述。 从某种意义上说,这些因素包括一个电脑化的替代上述人类创造的歌曲基因。对于电影,发现的因素可能会测量显着的维度,如喜剧与戏剧,行动的数量或对儿童的定位; 不太明确的维度,如性格发展的深度或怪癖; 或完全不可解释的尺寸。对于用户来说,每个因素都衡量了用户喜欢相应电影因素得分高的电影的程度。

​ 图2以二维的形式说明了这个简化的例子。 考虑两个假设的维度,其特征是女性对男性,严重对逃避现实。该图显示了几个著名的电影和几个虚构的用户可能落在这两个方面。 对于此模型,用户对电影的预测评级(相对于电影的平均评级)将等于电影和用户在图表上的位置的点积。 例如,我们预测Gus喜欢Dumb和Dumber,讨厌The Purple Purple,并且把Braveheart评为平均水平。 请注意,某些电影(例如Ocean’s 11)和用户(例如Dave)在这两个维度的特点是相当中性。

推荐系统中的矩阵分解技术

矩阵因式分解方法

​ 一些最成功的潜在因子模型的实现是基于矩阵分解的。 在其基本形式中,矩阵分解通过从项目评分模式推断的因素(factor)向量来表征项目和用户。 项目与用户因素之间的高度对应导致推荐。 近几年来,这些方法通过结合良好的可扩展性和预测准确性而变得流行起来。 另外,它们为建模各种现实生活情况提供了很大的灵活性。

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

​ 矩阵分解的一个优点是它允许并入额外的信息。 当显式反馈不可用时,推荐系统可以使用隐式反馈来推断用户偏好,其通过观察用户行为(包括购买历史,浏览历史,搜索模式甚至鼠标移动)来间接反映意见。 隐式反馈通常表示事件的存在或不存在,所以它通常由密集填充的矩阵表示。

一个基本的矩阵分解模型

​ 矩阵分解模型将用户和项目映射到维度f的联合潜在因子空间(latent factor space),使得用户项目交互被建模为该空间中的内部产品。于是,每个item i和向量qiRf关联;每个user u和向量puRf相关联。对于一个给定的item i,向量qi的每个元素衡量了该项目拥有factor的程度,正的或负的。对于给定的用户u,pu的元素衡量用户对相应factor较高的项目的兴趣程度,同理,也是正的或负的。二者结果的点积qTipu 捕获了用户u和项目i之间的交互——用户对项目特征的总体兴趣。这是用户u对物品i的近似评分,评分用rui来表示。所以有:

r^ui=qTipu(1)

主要的难点在于如何把用户和物品映射到向量空间。当映射完成后,显然可以很容易的用公式(1)估计用户对任何物品的评分。

​ 这种模型与奇异值分解 (SVD) 密切相关, 是识别信息检索中潜在语义因素的一种行之有效的方法。在协同过滤域中应用 SVD 需要分解用户——物品的评分矩阵。由于大量的的数据缺失,即稀疏性,这通常很困难。当关于矩阵的知识不完备时, 传统的 SVD 是未定义的。而且,不经意地只处理相对较少的已知条目是非常容易过度拟合(overfitting)的。

​ 较早的系统依靠填补缺失的评分并使得评级矩阵密集。然而,填补可能非常昂贵,因为它显着增加了数据量。此外,不准确的填补可能会大大扭曲数据。 因此,最近的工作建议直接对观察到的评分进行建模,同时通过正规化模型避免过度拟合。为了学习因子向量puqi,系统在已知评分数据集上最小化了正规化的平方误差:

minq,p(u,i)κ(ruiqTipu)2+λ(qi2+pu2)(2)

这里,κ是对于任何已知的rui(u,i)对的集合。

​ 系统通过拟合先前观察到的评分来学习模型。 然而,我们的目标是以预测未来,未知评分的方式推广以前的评分。因此,系统应该通过正规化学习的参数来避免过度拟合观察到的数据,这些参数的大小受到惩罚。常量λ控制了正规化的程度,它通常通过交叉验证(cross-validation)确定。Ruslan Salakhutdinov和Andriy Mnih的“概率矩阵分解”为正则化提供了概率基础。

学习算法

两个最小化公式(2)的方法是随机梯度下降交替最小二乘(ALS)。

随机梯度下降

​ Simon Funk普及了随机梯度下降公式(2)优化,其中该算法循环遍历训练集合中的所有评级。对于每个给定的训练样本,系统预测rui以及计算相关的预测误差eui

eui=ruiqTipu

​ 然后它在与梯度相反的方向上以与γ成比例的大小修改参数。
qiqi+γ(euipuλqi)pupu+γ(euiqiλpu)

​ 这种流行的方法结合了实现的简单性和相对较快的运行时间。然而,在某些情况下,使用ALS优化是有益的。

交叉最小二乘

​ 因为qipu都是未知的,所以公式(2)不是凸的。 但是,如果我们固定其中一个未知数,则优化问题变为二次,并且可以最优地解决。 因此,ALS技术在固定qi和固定pu之间轮换。 当所有的pu都固定时,系统通过求解最小二乘问题来重新计算qi,反之亦然。 这确保每个步骤减少公式(2)直到收敛。

​ 虽然随机梯度下降比ALS更容易和更快,但ALS至少有两种情况是有利的。 首先是系统可以使用并行化。 在ALS中,系统独立于其他项目因素计算每个qi,并独立于其他用户因素计算每个pu。 这导致了算法的潜在的大规模并行化。第二种情况是以隐式数据为中心的系统。 由于训练集不能被认为是稀疏的,因此循环遍历每个单独的训练案例(如梯度下降)并不实际。 ALS可以有效地处理这种情况。

增加偏置

​ 矩阵分解方法对于协同过滤的一个好处是它在处理各种数据方面和其他应用特定需求方面的灵活性。这需要在公式(1)中适应,同时保持在相同的学习框架内。 公式(1)尝试捕获产生不同评级值的用户和项目之间的交互。 然而,观察到的评分值的变化大部分是由于与用户或项目相关的影响,称为偏差或截距,与任何相互作用无关。 例如,典型的协作过滤数据对于一些用户来说显示出较大的系统倾向,以给予比其他用户更高的评价,并且对于一些项目来说,获得比其他评价更高的评价 毕竟,有些产品被普遍认为比其他产品更好(或更差)。

​ 因此,直接用qTipu计算评分是极不明智的。相反,系统试图识别单个用户或项目偏差可以解释的这些值的部分,仅将数据的真实交互部分进行因子建模。偏置的一阶近似为:

bui=μ+bi+bu(3)

这个偏置bui包含在rui中,被解释为用户和物品的影响。μ表示总体评分的平均值,参数bi,bu分别表示对于物品和用户来说,观察到的偏差平均值。例如,假设您想要对用户Joe对电影《泰坦尼克号》的评价进行一阶估计。 现在,所有电影的平均评分μ是3.7星。此外,《泰坦尼克号》比普通电影要好,所以它的评分往往比平均值高出0.5星。 另一方面,Joe是一个关键用户,他倾向于评价比平均值低0.3颗星。 因此,乔对泰坦尼克号的评价估计是3.9星(3.7 + 0.5 - 0.3)。

​ 偏置拓展了公式(1),得到公式(4):

r^ui=μ+bi+bu+qTipu(4)

在这里,观察到的评分被分解为四个部分:总分平均,项目偏差,用户偏好和用户项目交互。 这允许每个组件仅解释与其相关的信息的一部分。系统通过最小化平方误差来学习:
minp,q,b(u,i)κ(ruiμbubipTuqi)2+λ(pu2+qi2+b2u+b2i)(5)

由于偏差倾向于捕获大部分观测信号,所以它们的准确建模是至关重要的。 因此,其他文献提供更精细的偏见模型。

额外的输入源

​ 通常系统都会面临冷启动的问题,用户提供很少的信息,很难了解用户口味来给他推荐。解决这个问题的一个办法是整合更多关于用户的信息来源。 推荐系统可以使用隐式反馈来深入了解用户的偏好。事实上,无论用户是否提供明确的评级,他们都可以收集行为信息。 零售商可以使用客户的购买或浏览历史来了解他们的趋势,以及客户可能提供的评级。

​ 为了简单起见,考虑具有布尔隐式反馈的情况。N(u)表示用户u隐式偏好的项目集合。通过这种方式,系统可以通过他们隐式的偏好对用户进行刻画。这里,引出物品特征因子的一个新集合,其中,物品i关联到向量xiRf。因此,对N(u)中的项目表现出偏好的用户的特征被矢量iN(u)xi描述。

​ 归一化通常是有利的,即

|N(u)|0.5iN(u)xi

​ 另一个信息源是已知的用户属性,例如人口统计。同样,为了简单考虑布尔属性,其中用户u对应于属性集合A(u),其可以描述性别,年龄组,邮编,收入水平等等。唯一的因子向量yαRf元素对应了每个属性,通过一个用户相关的属性集合刻画了用户特征:
αA(u)yα

​ 矩阵分解模型应整合所有信息源,并增强用户表示:
r^ui=μ+bi+bu+qTi[pu+|N(u)|0.5iN(u)xi+αA(u)yα](6)

​ 虽然前面的例子涉及增强用户表示(缺少数据很常见),但在必要时,物品可以得到类似的处理。

时间动态

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

​ 矩阵分解方法非常适合对时间效应进行建模,这可以显着提高准确性。 将评分分解为不同的术语允许系统分别处理不同的时间方面。 具体而言,下列术语随时间变化:项目偏差bi(t); 用户偏差bu(t); 和用户偏好pu(t)

​ 首先,时间效应表明了了一个项目的受欢迎程度可能随时间而变化的事实。 例如,电影可以由外部事件(例如演员在新电影中出现)触发而进入受欢迎程度。 因此,这些模型将项目偏差bi作为时间的函数。 其次,时间效应允许用户随着时间改变他们的基准评级。 例如,倾向于评价平均电影“4星”的用户现在可以评价这样的电影“3星”。这可能反映了几个因素,包括用户评分等级中的自然漂移,用户相对于其他最近的评分分配评分以及评估者在家庭中的身份可能随时间改变的事实。因此,在这些模型中,参数bu是时间的函数

​ 时间动态超越了这个; 它们也影响用户的喜好,从而影响用户和项目之间的交互。 用户随着时间改变他们的偏好。例如,心理惊悚片的粉丝可能会在一年后成为犯罪剧的粉丝。 同样,人类改变了他们对某些演员和导演的看法。 该模型通过将用户因素(矢量pu)作为时间的函数来解释这种影响。 另一方面,它指定了静态项目特征qi,因为与人类不同,项目本质上是静态的。

r^ui=μ+bi(t)+bu(t)+qTipu(t)(7)

输入具有不同的置信度

​ 在几个设置中,并非所有观察到的评级都应该具有相同的权重或置信度。 例如,大量广告可能会影响某些项目的投票,而这些投票并不能恰当地反映较长期的特征。 同样,一个系统可能会面对对手的用户,试图倾斜某些项目的评级。

​ 另一个例子是围绕隐式反馈建立的系统。 在这种解释正在进行的用户行为的系统中,用户的确切偏好水平难以量化。 因此,该系统使用粗糙的二进制表示法,或者“可能喜欢产品”或“可能对产品不感兴趣”。在这种情况下,将置信度分数与估计的偏好相结合是有价值的。 置信度可能源于描述动作频率的可用数值,例如,用户观看某个节目的时间或用户购买某个项目的频率。 这些数值表示每个观察的置信度。与用户偏好无关的各种因素可能会导致一次性事件; 然而,经常性事件更可能反映用户的意见。

​ 矩阵分解模型可以容易地接受不同的置信水平,从而使其对较少意义的观测值给予较少的权重。 如果对rui的置信度表示为cui,则该模型修改了了代价函数(等式5)以说明置信度如下:

minp,q,b(u,i)κcui(ruiμbubipTuqi)2+λ(pu2+qi2+b2u+b2i)(8)

有关涉及此类方案的实际应用程序的信息,请参阅“隐式反馈数据集的协作过滤”。