推荐系列(七):召回器,排序器,重排及总结

简介: 简单总结推荐系统的召回器,排序器,重排序

召回|Retrieval

假设你有一个嵌入模型。给定用户,该如何决定推荐哪些项目?

在服务时,给定查询,可以从执行以下操作之一开始:

  • 对于矩阵分解模型,查询(或用户)嵌入是静态已知的,并且系统可以简单地从用户嵌入矩阵中查找到它;
  • 对于DNN模型,系统在服务时,需要运行网络计算查询特征向量的嵌入 。

一旦获得了查询嵌入q ,只需要在嵌入空间搜索距离接近的项目——这是最近邻问题(nearest neighbor problem)。例如,可以根据相似度得分返回前k个项目。二维频谱的图像与几个电影和用户安排从儿童到成人的电影,艺术家到重磅炸弹。 突出显示一个用户以及附近的两部电影。可以在相关项目建议中使用类似的方法。例如,当用户观看YouTube视频时,系统可以先查找该项目的嵌入,然后查找在嵌入空间中嵌入距离相近的其他项目。

大规模召回|Large-Scale Retrival

为了计算嵌入空间中的最近邻居,系统可以穷尽地对每个潜在候选者进行评分。但是,这对于非常大的语料库来说,为每一个项目评分大代价很昂贵,因此可以用以下任一策略来提高效率:

  • 如果查询嵌入是静态已知的,则系统可以离线执行穷举评分,预先计算并存储每个查询的最佳候选者列表,这是相关项目推荐的常见做法;
  • 使用近似最近邻KNN算法;

评分|score

在候选者生成之后,另一个模型对生成的候选者进行评分和排序,以选择要显示的项目集。推荐系统可能有多个使用不同来源的候选生成器,例如:

  • 矩阵分解模型中的相关项;
  • 用户个性化的用户特征;
  • “本地”与“遥远”项目, 考虑到地理信息;
  • 流行或趋势项目;
  • 社交图,即朋友喜欢或推荐的项目;

该系统将这些不同的来源组合成一个共同的候选人群,然后由单个模型评分并根据该分数进行排序。例如,系统可以训练模型以预测用户在YouTube上观看视频的概率,具体如下:

  • 查询特征(例如,用户观看历史记录,语言,国家/地区,时间)
  • 视频特征(例如,标题,标签,视频嵌入)

然后,系统可以根据模型的预测对候选池中的视频进行排序。

为什么不让候选生成器评分呢?

由于候选生成器也会计算得分(例如嵌入空间中的相似性度量),我们可能也想尝试使用它们进行排序。但是,在实际应用中应该避免这种做法,原因如下:

  • 一些系统依赖于多个候选生成器。这些不同生成器的得分可能是无法比较的;
  • 通过较小的候选者池,系统可以使用更多特征和更复杂的模型,可以更好地捕获上下文;

选择合适的目标函数评分

之前介绍过机器学习的问题框架,ML可以表现得像一个淘气的精灵:非常乐意学习你提供的目标,但在实际操作中必须小心设置这些目标,不同的目标函数会导致不同的学习结果,这种特性也适用于推荐系统。评分函数的选择可以极大地影响项目的排序,并最终影响建议的质量。

例如:

  • 最大化点击率:如果评分函数是优化点击,系统可能会推荐点击标题党视频。此评分函数可生成单击,但不能提供良好的用户体验,用户的兴趣可能会很快消失;
  • 最大化观看时间:如果评分函数是优化观看时间,系统可能会推荐非常长的视频,这可能导致用户体验不佳。注意,多个短视频可以和一个长视频一样好;
  • 增加多样性并最大化会话观看时间:推荐较短的视频,但更可能让用户保持参与;

评分中的位置偏差

Google Play商店主页的图片,其中显示了新的和更新的游戏以及突出显示底部项目的推荐应用。

屏幕上显示较低的项目比屏幕上显示较高的项目更不可能被点击。但是,在对视频进行评分时,系统通常不知道屏幕上的哪个位置最终会显示该视频的链接。查询具有所有可能位置的模型这个代价太昂贵了,即使查询多个位置是可行的,系统仍然可能找不到多个排序分数一致的排序。

方法

  • 创建与位置无关的排序;
  • 对所有候选人进行排序,假设其都在屏幕上的最高位置;

重排序|Rerank

在推荐系统的最后阶段,系统可以对候选者重新排序以考虑其他标准或约束。一种重新排序的方法是使用过滤器来删除一些候选人。

示例: 可以通过执行以下操作对视频推荐器实施重新排序:

  • 训练一个单独的模型,检测视频是否是标题党视频;
  • 在候选列表上运行此模型;
  • 删除模型归类为标题党的视频;

另一种重新排序方法是手动转换排序器返回的分数。

示例: 系统通过将分数修改为以下函数来重新对视频进行排序:

  • 视频时代(新鲜度);
  • 视频长度;

本节简要讨论新鲜度,多样性和公平性。这些因素可以帮助改善推荐系统。其中一些因素通常在不同的阶段需要修改。每个部分都提供可以单独或共同应用的解决方案。

新鲜度|Freshness

大多数推荐系统旨在合并最新的信息,例如当前用户浏览历史和最新的项目。保持模型新鲜度有助于模型提出良好的建议。

方法

  • 尽可能经常重新开展训练,以学习最新的训练数据。建议热启动训练,以便模型不必从头开始重新学习。热启动可以显着缩短训练时间。例如,在矩阵分解中,热启动先前模型实例中存在项的嵌入。
  • 创建一个“平均”用户以在矩阵分解模型中表示新用户。此外,不需要为每个用户使用相同的嵌入 ,可以根据用户特征创建用户群。
  • 使用DNN,例如softmax模型或 two-tower模型。由于模型将特征向量作为输入,因此模型可以预测训练期间未使用的查询或项目。
  • 添加文档年龄作为特征。例如,YouTube可以将视频的年龄或上次查看的时间添加为特征。

关于猫头鹰的四个推荐视频的图像。

多样性|Diversity

如果系统总是推荐与查询嵌入“最接近”的项目,则候选者往往彼此都非常相似。缺乏多样性可能会导致糟糕或无聊的用户体验。例如,如果YouTube仅推荐与用户当前正在观看的视频非常相似的视频,例如猫头鹰视频(如上图所示),则用户可能会很快失去兴趣。

方法

  • 使用不同来源训练多个候选生成器;
  • 使用不同的目标函数训练多个排序器;
  • 根据流派或其他元数据重新排序项目以确保多样性;

公平性|Fairness

推荐模型应该公平对待所有用户。因此,请确保模型没有从训练数据中学习到无意识的偏见(bias)。

方法

  • 在设计和开发中包含不同的观点;
  • 在综合数据集上训练机器学习模型。当数据太稀疏时(例如,当某些类别代表性不足时)添加辅助数据;
  • 跟踪每个人口统计数据的指标(例如,准确性和绝对错误)以观察偏差;
  • 为服务欠缺的群体制作单独的模型;

总结

整个系列主要介绍了以下内容,主要作为一个入门了解吧:

  • 描述推荐系统的目的;
  • 了解推荐系统的组件,包括候选生成器,评分和重排序;
  • 使用嵌入来表示项目和查询;
  • 对候选生成中使用的常用技术进行更深入的技术理解;
  • 介绍两个推荐模型:矩阵分解和softmax;
目录
相关文章
|
1月前
|
决策智能
【LeetCode 50】77.组合(优化、剪枝操作)
【LeetCode 50】77.组合(优化、剪枝操作)
15 2
|
6月前
|
算法
常见的算法排序(2)
常见的算法排序(2)
46 3
|
6月前
|
搜索推荐
排序算法小结
排序算法小结
28 0
|
存储 算法 PHP
PHPHashtable 如何优化数组查找和排序
PHP 是一种高度流行的编程语言,被广泛用于web开发。它有很多的优点,例如易于学习、跨平台、简单易用的语法等等。而在 PHP 中,数组是一种非常常用的数据结构,它可以存储一组有序的数据,方便我们进行各种操作。
65 0
|
存储
集合的操作(交并差)
集合的操作(交并差)
77 0
|
算法 搜索推荐 Java
算法之冒牌排序
冒泡排序算法及其优化算法
算法之冒牌排序
二分法检索
二分法检索
97 0
二分法检索
|
SQL 算法 关系型数据库
MySQL索引优化(为排序)
MySQL索引优化(为排序)
89 0
MySQL索引优化(为排序)
|
自然语言处理 搜索推荐 算法
相关度排序 | 学习笔记
快速学习相关度排序。