推荐系统简明教程-排序

本文为《推荐系统简明教程》的第三篇,为便于全面了解推荐系统,推荐阅读前两篇内容

检索

假设已经有了一个Embedding模型。 给定用户,该如何决定推荐哪些item呢?

在服务时,给定查询,首先要执行以下操作之一:

  • 对于矩阵分解模型,query(或user)Embedding是静态已知的,并且系统可以简单地从Embedding矩阵中查找到。
  • 对于DNN模型,系统将在服务时间内计算特征向量 x 通过网络后对应的Embedding \psi(x)

有了query Embedding q 后,在Embedding空间中搜索最接近 q 的item Embedding V_j 。 这是一个最近邻问题。 例如,可以根据相似度 s(q,V_j) 得分返回前k个item。

该方法同样可以用于相关item推荐。 例如,当用户观看视频时,系统可以先查找该item对应的Embedding,然后在Embedding空间中查找距离最近的item V_j

大规模检索

为了计算Embedding空间中最接近的top-K个item,系统可以详尽地对计算每个潜在候选者的评分。 但对于大的语料库,详尽的评分可能会很耗时,可以使用以下两种策略之一来提高其效率:

  • 如果query Embedding是静态已知的,则系统可以脱机计算详尽的评分,预先计算并存储每个query的最佳候选item列表。 这是相关item推荐的常见做法。
  • 使用近似最近邻。

排序

在生成候选对象之后,另一个模型会对生成的候选对象进行打分和排序,得到最后要推送的item列表。 推荐系统可能具有使用不同来源的多个召回队列,例如:

  • 矩阵分解模型的相关item。
  • 个性化的用户item。
  • “本地”与“非本地”项目; 也就是说,要考虑地理信息。
  • 热门或流行item。
  • 社交网络; 也就是朋友喜欢或推荐的item。

系统将这些不同的来源组合成一个通用的候选库,然后由单个模型对其进行打分并根据该分数进行排名。 例如,系统可以根据以下特征训练模型以预测用户观看视频的概率:

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

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

为什么不使用召回阶段的得分进行排序,而要重新计算分数?

由于召回阶段会计算分数(例如Embedding空间中的相似性得分),因此您可能会尝试使用此得分进行排序。 但是,出于以下原因,应避免这种做法:

  • 一些系统依赖多个召回队列。 这些不同召回队列的得分不具有可比性。
  • 由于候选池较小,因此系统可以负担得起更多特征和更复杂的精排模型(可以更好地捕获上下文)。

选择排序模型的目标函数

目标函数的选择会极大地影响item的排序结果,并最终影响推荐的质量。

常用的优化目标有以下几种:

最大化点击率:如果目标函数只针对点击进行优化,则系统可能会推荐诱导用户点击的视频。 该目标函数可以提高用户点击,但不能带来良好的用户体验。 用户的兴趣可能会很快消失。

延长观看时间:如果目标函数针对观看时间进行优化,则系统可能会推荐较长的视频,这可能会导致不良的用户体验。 多个短视频的观看时长和一个长视频的观看时长一样是一样的。

增加多样性并最大化观看时间:推荐较短的,但更可能吸引用户的视频。

打分的位置偏差

与在屏幕上方显示的item相比,在屏幕下方显示的item被点击的可能性较小。 但是,在对视频打分时,系统通常不知道最终将显示该视频的链接在屏幕上的哪个位置。 对所有可能的位置进行打分太耗时了。 即使对多个位置打分是可行的,系统仍可能无法在多个排序得分中保持一致性。

解决方案

  • 创建与位置无关的排序。
  • 对所有候选item进行排序,假设他们都在屏幕的顶部。

针对位置偏差也可使用相应的点击模型对排序结果进行调权纠正,详细的点击模型可查看下文:

重排

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

示例:可以通过执行以下操作来对视频推荐结果进行重新排名:
  1. 训练一个单独的模型来检测视频是否为诱惑点击的钓鱼视频。
  2. 在候选集上运行此模型。
  3. 在候选集中删除模型判断结果为诱惑点击的视频。

另一种重排方法是转换排序阶段返回的分数。

示例:系统根据以下函数修改得分来重新对视频进行排序:
  • 影片出品时间(也许是在宣传新内容)
  • 影片长度

下面简单介绍下时效性,多样性和公平性。 这些都是可以帮助改善推荐系统的重要因素。 其中一些因素通常需要修改流程的不同阶段。 每个部分均提供您可以单独或共同应用的解决方案。

时效性

大多数推荐系统旨在融合最新的使用信息,例如当前用户历史记录和最新item。使模型保持最新状态有助于模型给出更好的推荐。

解决方案:

  • 尽可能频繁地重新训练模型以学习最新的训练数据。建议使用在线学习或增量学习等相关技术,以便模型不必从头开始重新学习。增量学习可以大大减少训练时间。例如,在矩阵分解中,加载先前计算出的item Embedding进行更新计算。
  • 创建一个“平均”用户来代表矩阵分解模型中的新用户。不需要为每个用户使用相同的Embedding,可以根据用户特征对用户进行聚类。
  • 使用诸如DNN模型或双塔模型。由于该模型将特征向量作为输入,因此可以在执行在训练数据中未出现的query或item。
  • 添加item年龄相关信息作为特征。例如,可以将视频发布了多长时间或上次观看的时间添加为特征。

多样性

如果系统始终推荐与query Embedding “最接近”的item,则候选item往往彼此非常相似。 多样性的缺乏会导致无聊的用户体验。 例如,如果仅推荐与用户当前正在观看的视频非常相似的视频,那么用户可能会很快失去兴趣。

解决方案

  • 使用不同的来源训练多个召回队列。
  • 使用不同的目标函数训练多个排序模型。
  • 根据类别或其他元数据对item重新排序,以确保多样性。

公平性

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

解决方案

  • 在设计和开发中融入不同的角度。
  • 在综合数据集上训练ML模型。 当数据太稀疏时(例如,某些类别的代表性不足时),添加辅助数据。
  • 跟踪每个用户统计指标(例如,准确性和绝对误差)以观察偏差。
  • 为特定群体训练单独的模型。
编辑于 2019-10-21 23:52