登录
原创

谷歌推荐系统框架 (二) —— 协同过滤算法

发布于 2020-10-21 阅读 83
  • 人工智能
原创

候选集生成算法1:基于物品的协同过滤算法

基于内容的过滤使用项目功能根据其先前的操作或明确的反馈来推荐其他与用户喜欢的项目类似的项目。

为了演示基于内容的过滤,让我们为Google Play商店手动设计一些功能。 下图显示了一个功能矩阵,其中每一行代表一个应用程序,每一列代表一个功能。 功能可能包括类别(例如,教育,休闲,健康),应用程序的发布者等。 为简化起见,假设此功能矩阵是二进制的:非零值表示应用程序具有该功能。

还可以在同一要素空间中代表用户。 一些与用户相关的功能可以由用户明确提供。 例如,用户在其个人资料中选择“娱乐应用程序”。 其他功能可以根据以前安装的应用程序进行隐式设置。 例如,用户安装了由Science R Us发布的另一个应用程序。

模型应推荐与此用户有关的项目。 为此,必须首先选择一个相似性指标(例如,点积)。 然后,必须设置系统以根据此相似性指标对每个候选项目进行评分。 请注意,建议是针对该用户的,因为该模型未使用有关其他用户的任何信息。

使用点积作为相似性度量

考虑用户嵌入x和应用嵌入y均为二进制向量的情况。 由于<math><semantics><mrow><mo><</mo><mi>x</mi><mo separator="true">,</mo><mi>y</mi><mo>></mo><mo>=</mo><msubsup><mo>∑</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>d</mi></msubsup><msub><mi>x</mi><mi>i</mi></msub><msub><mi>y</mi><mi>i</mi></msub></mrow><annotation encoding="application/x-tex"><x,y> = \sum_{i=1}^dx_iy_i</annotation></semantics></math><x,y>=i=1dxiyi ,因此同时出现在x和y中的特征对总和贡献1。 换句话说,⟨x,y⟩是同时在两个向量中活动的特征数。 高点积则表示更多的共同特征,因此具有更高的相似性。

优缺点

  • 好处

    • 该模型不需要有关其他用户的任何数据,因为推荐是针对该用户的。 这使得更容易扩展到大量用户。

    • 该模型可以捕获用户的特定兴趣,并且可以推荐其他用户很少感兴趣的利基项目。

  • 缺点

    • 由于项目的特征表示在某种程度上是手工设计的,因此该技术需要大量领域知识。 因此,模型只能与手工设计的特征一样好。

    • 该模型只能根据用户的现有兴趣提出建议。 换句话说,该模型扩展用户现有兴趣的能力有限。

协同过滤和矩阵分解

为了解决基于内容的过滤的某些限制,协作过滤同时使用用户和项目之间的相似性来提供建议。 这允许偶然的建议; 也就是说,协作过滤模型可以根据相似用户B的兴趣向用户A推荐商品。此外,可以自动学习嵌入,而无需依赖功能的手工设计

矩阵分解

  • 优化
    • 最小化目标函数算法包括:

      • 随机梯度下降(SGD)是使损失函数最小化的通用方法。

      • 加权交替最小二乘(WALS)专用于此特定目标。

在两个矩阵U和V中,每个目标都是二次的。(但是,请注意,问题不是共同凸的。)WALS的工作方式是随机初始化嵌入,然后在以下条件之间交替进行:

  • 固定U并求解V。

  • 固定V并求解U。

每个阶段都可以精确地解决(通过线性系统的解决方案)并可以分配。 该技术可以保证收敛,因为可以确保每一步都可以减少损耗。

SGD

  • 非常灵活-可以使用其他损失函数。

  • 可以并行化。

  • 较慢-收敛速度不那么快。

  • 难以处理未观察到的条目(需要使用负采样或重力)。

WALS

  • 仅依赖于损失广场。

  • 可以并行化。

  • 收敛速度比SGD更快。

  • 更容易处理未观察到的条目。

WMF

协同过滤矩阵分解的优缺点

  • 好处

    • 无需领域知识

      • 我们不需要领域知识,因为嵌入是自动学习的。
    • 机缘巧合

      • 该模型可以帮助用户发现新兴趣。 孤立地,ML系统可能不知道用户对给定的项目感兴趣,但是模型可能仍会推荐它,因为相似的用户对该项目感兴趣。
    • 上手简单

      • 在某种程度上,系统仅需要反馈矩阵即可训练矩阵分解模型。 特别是,该系统不需要上下文功能。 实际上,它可以用作多个候选生成器之一。
  • 缺点

    • 无法处理新鲜物品

      • 给定的(用户,商品)对的模型预测是相应嵌入的点积。 因此,如果在训练过程中未看到任何物品,则系统将无法为其创建嵌入,也无法使用该物品查询模型。 此问题通常称为冷启动问题。 但是,以下技术可以在某种程度上解决冷启动问题:

        • WALS中的映射。 给定一个在训练中看不到的新项目<math><semantics><mrow><msub><mi>i</mi><mn>0</mn></msub></mrow><annotation encoding="application/x-tex">i_0</annotation></semantics></math>i0,如果系统与用户有一些交互,则系统可以轻松计算出该项目的嵌入<math><semantics><mrow><msub><mrow><msub><mi>v</mi><mi>i</mi></msub></mrow><mrow><mn>0</mn></mrow></msub></mrow><annotation encoding="application/x-tex">{v_i}_{0}</annotation></semantics></math>vi0,而无需重新训练整个模型。 系统只需解决以下方程式或加权形式:

前面的等式对应于WALS中的一个迭代:用户嵌入保持固定,并且系统解决项目i0的嵌入。 对于新用户也可以这样做。
- 启发式生成新项目的嵌入。 如果系统没有交互,则系统可以通过对来自同一类别,来自同一上传器(在YouTube中)的项的嵌入进行平均来近似其嵌入。

  • 难以包含查询/项目的辅助功能

辅助功能是查询或项目ID以外的任何功能。 对于电影推荐,附加功能可能包括国家或年龄。 包括可用的辅助功能可以提高模型的质量。 尽管在WALS中包括侧面特征可能并不容易,但是WALS的泛化使这成为可能。

为了概括WALS,通过定义一个块矩阵A来增加输入矩阵的特征,其中:

  • block(0,0)是原始反馈矩阵A。

  • block(0,1)是用户功能的多次编码。

  • block(1,0)是项特征的多次编码。

评论区

哎嘿

1

0

1