候选集生成是推荐流程的第一阶段。对于给定的查询, 生成一组相关的候选字词。下表显示了 常见的候选生成方法:
类型 | 定义 | 示例 |
---|---|---|
基于内容的过滤 | 使用推荐项之间相似度来推荐与用户兴趣相似的内容。 | 如果用户 A 观看了两个可爱猫咪的视频,则系统可以向该用户推荐可爱动物的视频。 |
协同过滤 | 同时使用查询和推荐项之间的相似度来提供推荐。 | 如果用户 A 与用户 B 相似,并且用户 B 喜欢视频 1,则 系统就可以向用户 A 推荐视频 1(即使用户 A 未 观看过与视频 1 类似的任何视频)。 |
嵌入空间
基于内容的过滤和协作过滤都会映射每个项目和每个查询 映射到通用嵌入空间中的嵌入向量 \(E = \mathbb R^d\)。通常,嵌入空间是低维的 (即, \(d\) 远小于语料库的大小), 项或查询集的某种潜在结构。类似商品,例如 YouTube 同一位用户通常会同时观看多个视频,在观看时 嵌入空间。“紧密”的概念由相似度度量定义。
相似性度量
相似度度量是 \(s : E \times E \to \mathbb R\) 一种函数, 接受一对嵌入,并返回一个衡量它们相似性的标量。 这些嵌入可用于生成候选,如下所示: 查询嵌入 \(q \in E\),系统会查找项嵌入 接近 \(q\)的\(x \in E\) 即, 相似度 \(s(q, x)\)。
为了确定相似程度,大多数推荐系统都依赖于 针对以下一项或多项问题:
- 余弦
- 点积
- 欧几里得距离
余弦
这只是两点之间角度的余弦 矢量、 \(s(q, x) = \cos(q, x)\)
点积
两个向量的点积为 \(s(q, x) = \langle q, x \rangle = \sum_{i = 1}^d q_i x_i\)。 它的计算公式也为: \(s(q, x) = \|x\| \|q\| \cos(q, x)\) ( 角度乘以范数的乘积)。因此,如果嵌入 归一化,则点积和余弦重合。
欧几里得距离
这是通常的欧几里得距离 空格, \(s(q, x) = \|q - x\| = \left[ \sum_{i = 1}^d (q_i - x_i)^2\right]^{\frac{1}{2}}\)。 距离越短,相似度越高。请注意, 归一化后,欧几里得距离的平方与点积重合 (和余弦)最高到一个常数,因为在该示例中, 支持请求 \(\frac{1}{2}\|q - x\|^2 = 1 - \langle q, x \rangle\)。
比较相似性度量
请思考右图中的示例。黑色矢量表示 查询嵌入。其他三个嵌入向量(项 A、项 B、项 C) 代表候选字词。根据所使用的相似性度量, 项的排名可能有所不同。
使用该图片,尝试使用全部三个条件来确定项目排名, 相似度度量:余弦、点积和欧几里得距离。
哪种相似度衡量指标?
与余弦相比,点积相似度对 嵌入的范数。也就是说, 相似度越高(对于具有锐角的项) 商品被推荐的可能性就越大这会影响 建议如下:
训练集中频繁出现的项(例如, 热门 YouTube 视频)的嵌入往往具有大规范的嵌入。 如果您希望捕获热门程度信息,则应 偏好点积。不过,如果您不够谨慎,就会发现, 最终可能会成为推荐的主要内容。在实践中, 可以使用相似性度量的其他变体,这些变体的强调程度较低 概率。例如,定义 \(s(q, x) = \|q\|^\alpha \|x\|^\alpha \cos(q, x)\) : 一些 \(\alpha \in (0, 1)\)。
极少显示的项目在运行期间可能不会经常更新 训练。因此,如果以较大范数初始化它们, 系统可能会推荐稀有商品,而不是更相关的商品。为了避免这种情况 注意嵌入初始化,并使用适当的 正则化。我们将在第一个练习中详细介绍这个问题。