推荐系列(二):生成候选者概述

简介: 生成候选者概述在上一节介绍了推荐系统的基本框架:可以看到,生成候选人(generate candidate)是推荐的第一阶段,也被称作retrieve。给定查询,系统生成一组相关候选者。下表显示了两种常见的候选生成方法:类型定义实例基于内容的过滤使用项目之间的相似性来推荐与...

生成候选者概述

在上一节介绍了推荐系统的基本框架:
在这里插入图片描述

可以看到,生成候选人(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在距离上最接近查询,因此使用欧几里德距离排名最高:

Image showing the differences in the ranking induced by each similarity measure.


如何选择相似度量方法?

与余弦相比,点积相似性对embedding向量的范数更加敏感。也就是说,embedding向量的范数越大,相似性越高并且项目被推荐的可能性越大,因此给出的建议如下:

  • 在训练集中经常出现的项目(例如,热门流行的视频)往往具有大范数的嵌入向量。如果需要捕获流行度信息,那么更应该选择点积这种方法。但是,这种方法将导致流行的item最终可能会主导推荐。在实践中,可以使用其他变体的相似性度量,而不太强调项目的范数。例如,定义

$$ s(q, x) = \|q\|^\alpha \|x\|^\alpha \cos(q, x) $$

  • 在训练期间很少出现的项目,可能不会经常被更新。因此,如果它们以大规范初始化,则系统可以推荐出稀有项目而不是更相关的项目。为了避免此问题,需要注意embedding向量的初始化,并使用适当的正则化。

总结

  • 候选者的生成对于推荐系统是第一步,也是最关键的一部分,召回的事物好坏之间影响后续的推荐进程;
  • 如何获得候选者,一般是根据embedding向量的相似度来得到,相似度量方法常见的有三种:余弦距离,点积,以及欧式距离;
  • 根据具体的推荐业务及侧重点,选择合适的相似度量方法;
目录
相关文章
|
搜索推荐 机器学习/深度学习 算法
如何增加用户的参与感?交互式推荐来了!
一方面,互动能让用户感受到更多的参与感,并能一定程度上干预推荐结果,而不只是被动接受推荐结果;另一方面,系统通过与用户的互动能更加了解用户的偏好,从而提升推荐效果。那么,我们是如何让用户和推荐系统互动起来的呢?且看下文。
4070 0
|
JSON API 开发工具
API参考—实例管理—CreateDBInstance
API参考—实例管理—CreateDBInstance
150 0
|
XML JSON API
API参考—实例管理—ModifyDBInstanceDescription
调用ModifyDBInstanceDescription接口修改实例描述。
|
XML JSON API
API参考—实例管理—DeleteDBInstance
调用DeleteDBInstance接口释放实例。
|
XML JSON API
API参考—实例管理—DescribeDBInstances
调用DescribeDBInstances接口查看实例列表详情。
|
XML JSON API
API参考—实例管理—RestartDBInstance
调用RestartDBInstance接口重启实例。
121 0
|
XML JSON API
API参考—实例管理—ModifyDBInstanceMaintainTime
调用ModifyDBInstanceMaintainTime接口修改实例可维护时间。
|
XML Java 数据库连接
MyBatis参数映射问题解决教程: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 wit
MyBatis参数映射问题解决教程: org.apache.ibatis.type.TypeException: Error setting non null for parameter #1 wit
866 1
|
11月前
|
Java
深入探讨java -jar命令:详解及代码演示
深入探讨java -jar命令:详解及代码演示
|
SQL 安全 前端开发
2023年最受欢迎的10个技术岗位及职位要求
2023年最受欢迎的10个技术岗位及职位要求
1152 0