生成候选者概述
在上一节介绍了推荐系统的基本框架:
可以看到,生成候选人(generate candidate)是推荐的第一阶段,也被称作retrieve。给定查询,系统生成一组相关候选者。下表显示了两种常见的候选生成方法:
类型 | 定义 | 实例 |
---|---|---|
基于内容的过滤 | 使用项目之间的相似性来推荐与用户喜欢的项目类似的项目 | 如果用户A观看过两个可爱的猫视频,则系统可以向该用户推荐可爱的动物视频 |
协同过滤 | 同时使用查询和项目之间的相似性 来提供推荐 | 如果用户A类似于用户B,并且用户B喜欢视频1,则系统可以向用户A推荐视频1(即使用户A没有看到任何类似于视频1的视频) |
Embedding Space
基于内容和协作过滤都将每个项目和每个查询(或上下文)映射到公共嵌入空间中的嵌入向量
$$ E = R^d $$
。通常,嵌入空间是低维的(d远小于语料库的大小),并且捕获事物或查询集的一些潜在结构。类似的项目(例如通常由同一用户观看的YouTube视频)最终会在嵌入空间中靠近在一起。“亲密度”的概念由相似性度量定义。
额外资源: projector.tensorflow.org是一个可视化嵌入的交互式工具。
相似度量
相似性度量是一种函数
$$ s: E×E→R $$
,输入一对embedding 向量并返回一个标量来衡量它们的相似性。embedding 向量可以用于候选生成,如下所示:给定查询嵌入
$$ q∈E $$
,系统查找项目嵌入
$$ x∈E $$
接近 q,即具有高相似性的向量对
$$ s(x, q) $$
。
为了确定相似程度,大多数推荐系统依赖于以下一个或多个相似度量方法:
- 余弦(cosine);
- 点积(dot product);
- 欧氏距离(Euclidean distance);
余弦|Cosine
衡量两个向量之间角度的余弦,
$$ s(q, x)= cos(q, x) $$
点积|Dot product
两个向量的点积是
$$ s(q, x) = \langle q, x \rangle = \sum_{i = 1}^d q_i x_i $$
。它也是由
$$ s(q, x) = \|x\| \|q\| \cos(q, x) $$
(角度的余弦乘以规范的乘积)。因此,如果embedding向量被标准化后,则点积和余弦这两种方法等价。
欧氏距离|Euclidean distance
这是欧几里得空间的通常距离,
$$ s(q, x) = \|q - x\| = \left[ \sum_{i = 1}^d (q_i - x_i)^2\right]^{\frac{1}{2}} $$
。距离越小意味着相似性越高。注意,当embedding向量被归一化时,平方欧几里德距离与点积(和余弦)一致,因为在这种情况下
$$ \frac{1}{2}\|q - x\|^2 = 1 - \langle q, x \rangle $$
。
比较相似度量
考虑上图中的示例。黑色矢量表示查询embedding向量。其他三个embedding向量(项目A,项目B,项目C)表示候选项目。使用不同的相似性度量方法,得到的项目排序有不同的结果。
使用三个相似性度量来确定项目顺序:余弦,点积和欧几里德距离,答案如下:
答案
项目A长度最长,其标量最大,使用点积方法排名最高。项目C与查询向量具有最小角度,因此根据余弦相似性排名最高。物品B在距离上最接近查询,因此使用欧几里德距离排名最高:
如何选择相似度量方法?
与余弦相比,点积相似性对embedding向量的范数更加敏感。也就是说,embedding向量的范数越大,相似性越高并且项目被推荐的可能性越大,因此给出的建议如下:
- 在训练集中经常出现的项目(例如,热门流行的视频)往往具有大范数的嵌入向量。如果需要捕获流行度信息,那么更应该选择点积这种方法。但是,这种方法将导致流行的item最终可能会主导推荐。在实践中,可以使用其他变体的相似性度量,而不太强调项目的范数。例如,定义
$$ s(q, x) = \|q\|^\alpha \|x\|^\alpha \cos(q, x) $$
- 在训练期间很少出现的项目,可能不会经常被更新。因此,如果它们以大规范初始化,则系统可以推荐出稀有项目而不是更相关的项目。为了避免此问题,需要注意embedding向量的初始化,并使用适当的正则化。
总结
- 候选者的生成对于推荐系统是第一步,也是最关键的一部分,召回的事物好坏之间影响后续的推荐进程;
- 如何获得候选者,一般是根据embedding向量的相似度来得到,相似度量方法常见的有三种:余弦距离,点积,以及欧式距离;
- 根据具体的推荐业务及侧重点,选择合适的相似度量方法;