协同过滤 (collaborative filtering)

为了解决基于内容的过滤方面的一些限制 协同过滤使用与用户和 项以提供建议。这样, 获得意外建议;即协同过滤 模型可以根据 相似用户 B。此外,嵌入可以 自动构建,无需手动处理特征。

电影推荐示例

假设有一个影片推荐系统,训练数据包括 其中:

  • 每一行代表一位用户。
  • 每一列代表一项内容(一部电影)。

有关电影的反馈可分为以下两类:

  • 露骨内容 - 用户指明他们对某部电影的赞 以数字评分。
  • 隐式 - 如果用户观看电影,系统会推断出 用户感兴趣的内容。

为简单起见,我们假设反馈矩阵是二进制的;也就是 的值为 1 表示对该电影感兴趣。

当用户访问首页时,系统应推荐电影 基于以下两个方面:

  • 与用户以前喜欢的电影的相似度
  • 同类用户喜欢的电影

为了便于说明,我们来手动设计一些电影特征 如下表所示:

电影 评分 说明
《黑暗骑士崛起》 PG-13 蝙蝠侠竭尽全力拯救哥谭市免遭核毁灭 黑暗骑士 设在 DC 漫画世界,
《哈利波特与魔法石》 PG 一个孤立男孩发现自己是一名巫师,于是报名加入 霍格沃茨学校 巫术和巫术,他在这里第一次对战 他就是邪恶的伏地魔。
《怪物史莱克》 PG 一个可爱的食人魔和他的驴友一起发起任务 去营救菲奥娜公主, 被一条龙关押在她的城堡里。
《疯狂约会美丽都》 PG-13 职业自行车选手 Champion 遭遇绑架 环法自行车赛 他的祖母和超重狗狗出海拯救他, 三位老年爵士乐歌手的帮助。
记忆碎片 R 一位记忆丧失症患者急切地寻找解决他妻子谋杀案的问题 将线索纹在身上。

一维嵌入

假设我们在 \([-1, 1]\) 中为每个电影分配一个标量,描述 电影是适合儿童(负值)还是成人(正值)。 假设我们还为 \([-1, 1]\) 中的每个用户分配了一个标量,用于描述 用户对儿童电影(近似 -1)或的兴趣 电影(更接近 +1)。电影嵌入和用户 对于我们预计用户能观看的影片, 来点赞。

显示多部影片和用户沿一维嵌入空间排列的图片。每部影片沿此轴的位置即表明这是儿童影片(左)还是成人影片(右)。用户的位置描述了对儿童或的兴趣。

在下图中,每个勾号都标识出 名用户观看了此视频。第三和第四位用户的偏好 这很好地解释了:第三位用户更喜欢适合儿童的电影 第四个用户更喜欢面向成人的电影。不过,第一个和第二个 用户的而无法通过这一功能很好地解释用户偏好。

反馈矩阵的图片,其中一行对应一个用户,一列对应一部电影。每个用户和每部电影都会映射到一个一维嵌入(如上图所述),这样两个嵌入的乘积近似于反馈矩阵中的标准答案值。

2D 嵌入

有一项功能不足以解释所有用户的偏好。为了克服 这个问题,我们来添加第二个特征:每部电影的 卖座电影或艺术电影。我们现在使用第二个特征来表示 具有以下二维嵌入的每部电影:

显示多部电影和用户排列在二维嵌入空间中的图像。每部电影沿横轴的位置说明了该电影是儿童电影(左侧)还是(右侧);它在纵轴上的位置用于说明该电影是大片(顶部)还是艺术片(底部)。用户的排名反映其在每个类别中的兴趣。

我们再次将用户放在同一个嵌入空间中,以获得最佳解释 反馈矩阵:对于每一对(用户、项目)对,我们希望 要相近的项嵌入的点积 如果用户观看电影,则为 1,否则为 0。

同一反馈矩阵的图片。这一次,每个用户和每部电影都会映射到一个二维嵌入(如上图所述),使得两个嵌入的点积近似于反馈矩阵中的标准答案值。

在此示例中,我们人工设计了嵌入。在实践中, 可以自动学习,这是协同过滤的强大功能。 模型。在接下来的两部分中,我们将讨论用于学习的 以及如何训练这些嵌入。

当模型学习训练时,该方法的协作性质 嵌入。假设影片的嵌入向量是固定的。然后, 模型可以学习嵌入向量,以便用户更好地解释 偏好因此,具有相似偏好的用户嵌入 相距很近同样,如果用户的嵌入是固定的, 那么我们可以学习电影嵌入,以最好地解释反馈矩阵。 因此,类似用户喜欢的电影的嵌入位置在 嵌入空间。

检查您的理解情况

该模型向用户推荐一款购物应用,因为用户最近 安装了类似的应用。这是一个什么样的过滤示例?
基于内容的过滤
太棒了!基于内容的过滤功能不会考虑其他用户的情况。
协同过滤 (collaborative filtering)
协同过滤会将其他用户纳入考量。在 我们只关心一个用户。