从 [PML 6] 直接跳到本章, 主要是2,3 的内容过于基础。等以后有时间再做那个部分的笔记吧,序号先留着。
在第 2 章和第 3 章中,讨论回归和分类时,我们提供个性化预测的唯一方法是提取与用户特征(例如年龄、位置、性别)相关的特征。这种模型的成功很大程度上取决于提取特征的能力,这些特征足以解释我们试图预测的标签的变化。虽然在许多回归或分类场景中有效,但在对推荐场景中的交互进行建模时,很难搞清楚哪些特征可以预测用户的行为,而且也不可能一开始就收集上来这些特征。考虑例如:
- 给观众推荐电影的时候, 人口统计特征只能解释一部分的用户间差异, 其他特征是什么, 一开始很难弄明白。
- 有些领域你也不太懂, 这个啥时候特征工程就比较难了。比如吐司机,纹身贴。
- 用户会随着时间变化。
- 如果 Featrue 无法获取, 我们还能做推荐么?
在以上场景中, 推荐系统是一个基础工具。 总的来说, 推荐系统的工作原理是找到用户和物品联系的共同模式(common patterns)。 因此, 我们可以根据用户相似度来进行推荐。
本章, 我们讨论的方法里,基本思路是:根据物品和用户之间的相似度。 我们从简单的算法开始, 最后会讨论比较复杂的基于随机游走的方法。 本章从High level 讨论推荐问题和工作 pipeline。在第五章, 才会讨论算法本身。
基本步骤和问题定义
在推荐系统,我们常用的数据形状如下, 包括了用户和物品的历史交互。
一般我们都会进行进一步处理, 对用户, 物品, 时间戳进行编码,比如:
这是大部分推荐系统数据的模式, 有时候, 还有会一些 metadata 比如人口信息, 电影信息。 但是有的数据也会特别简陋, 连时间戳和评价都没有。
总之, 我们打交道的数据一般都会描述用户和物品的交互。 这些交互可能包括:点击,购买, 评价, 点赞。 基于上面例子的数据,我们可以问这些问题:
- Laura 会如何评价 Pulp Fiction?
- Laura 喜欢 The Godfather, 那她还会喜欢其他那些电影?
- Laura 下一个评价的电影会是那个?
推荐系统的主要任务,就是回答这些问题。
推荐系统和 回归/分类 任务的不同点:
拿电影推荐来举例, 如果可以提取出来用户和电影的特征, 那么一个对用户评分的回归模型可以表示成:
如果用户和电影可以独立的获取, 那么对于一个线性模型, 上面的式子可以写成:
也就是说, 评分结果可以分为用户评分 和 物品评分
, 那么用户对于一个没看过的电影评分应该是:
那么对于任意一个观众来说, 因为他自己的 是固定的, 不会随着电影不同而变化; 那么,预测的用户评分完全取决于电影自身的特征
。 所以,对所有人的推荐都将是相同的。 这就不是个性化算法了。
为了克服这个问题,模型必须以某种方式捕捉用户和物品之间的交互,例如。用户与特定电影的兼容性如何。显式的建模用户和项目之间的交互是推荐系统的主要目标,也是将它与其他类型的机器学习区分开来的主要特征。
交互数据的表征
对于用户物品交互数据,有好几种表示方法, 其中常用的一种是 或者
, 它表示用户
在
时刻为 物品
的评价为
。
但从概念上讲,根据集合或矩阵来考虑这些数据更容易。
- 集合更好: 建立用户之间根据他们消费过的物品集的相似性(或者类似地根据消费过的用户集建立物品之间的相似性)
- 矩阵更好 :开发基于矩阵分解(或降维)概念的模型时
用集合表示活动:
在简单的推荐模型中,我们可以用用户购买的商品集合来描述用户和物品的联系。
这种模式下, 用户的表示:
物品的表示:
用矩阵表示活动:
可以用行,列分别表示用户和物品:
每一行代表一个单独的用户, 每一列代表一个物品。 代表用户
和 物品
的交互,
代表该用户和物品没有交互数据。
集合表示与矩阵表示其实都很简单, 不能表示复杂的信息。 比如, 矩阵表示无法存储时间信息, 以及其他metadata, 而集合表示连评分信息都表示不了。 但是它们可以作为我们的起点, 也是未来进行更复杂分析的基石。