召回策略(生成候选集)
== 假设您有一个嵌入模型。 给定用户,您将如何决定推荐哪些项目?==
在服务时,给定查询,首先需要执行以下一项操作:
-
对于矩阵分解模型,查询(或用户)嵌入是静态已知的,并且系统可以简单地从用户嵌入矩阵中查找查询。
-
对于DNN模型,系统通过在特征向量x上运行网络来计算服务时间的查询嵌入ψ(x)。
查询嵌入q后,在嵌入空间中搜索与q接近的项嵌入<math><semantics><mrow><msub><mi>V</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">V_j</annotation></semantics></math>Vj。 这是最近的邻居问题。 例如,您可以根据相似性得分s(q,Vj)返回前k个项目。
可以在相关项目建议中使用类似的方法。 例如,当用户正在观看YouTube视频时,系统可以首先查找该项目的嵌入,然后查找嵌入空间中接近的其他项目<math><semantics><mrow><msub><mi>V</mi><mi>j</mi></msub></mrow><annotation encoding="application/x-tex">V_j</annotation></semantics></math>Vj的嵌入。
大规模检索
为了计算嵌入空间中最接近的邻居,系统可以详尽地对每个潜在候选者评分。 对于很大的语料库,详尽的评分可能会很昂贵,但是您可以使用以下两种策略之一来提高其效率:
-
如果查询嵌入是静态已知的,则系统可以脱机执行详尽的评分,预先计算并存储每个查询的最佳候选者列表。 这是相关项目推荐的常见做法。
-
使用近似最近的邻居。
Scoring 策略
在生成候选对象之后,另一个模型会对生成的候选对象进行评分和排名,以选择要显示的项目集。 推荐系统可能具有使用不同来源的多个候选生成器,例如:
例子
-
矩阵分解模型生成的候选。
-
个性化的用户功能。
-
“本地”与“远程”项目; 也就是说,要考虑地理信息。
-
热门或热门商品。
-
社交图; 也就是朋友喜欢或推荐的项目。
系统将这些不同的来源组合到一个通用的候选库中,然后由单个模型对其进行评分并根据该评分进行排名。 例如,在以下情况下,系统可以训练模型以预测用户在YouTube上观看视频的概率:
-
查询功能(例如,用户观看记录,语言,国家/地区,时间)
-
视频功能(例如标题,标签,视频嵌入)
然后,系统可以根据模型的预测对候选库中的视频进行排名。
为什么不让候选生成器算出得分?
由于候选生成器会计算分数(例如嵌入空间中的相似性度量),因此您可能也会想使用它们来进行排名。 但是,由于以下原因,您应避免这种做法:
-
一些系统依赖多个候选生成器。 这些不同生成器的分数可能不具有可比性。
-
使用较小的候选者池,系统可以负担使用更多功能和更复杂的模型(可以更好地捕获上下文)的能力。
得分目标函数选择
评分功能的选择会极大地影响项目的排名,并最终影响建议的质量。
例如:
-
最大化点击率
- 如果计分功能针对点击进行优化,则系统可能会推荐点击诱饵视频。 此评分功能会产生点击,但不能带来良好的用户体验。 用户的兴趣可能会很快消失。
-
延长观看时间
- 如果计分功能针对观看时间进行优化,则系统可能会推荐很长的视频,这可能会导致不良的用户体验。 请注意,多只短手表可以和一只长手表一样好。
-
增加多样性并最大化会话观看时间
- 推荐较短的视频,但更可能吸引用户的视频。
计分中的位置偏差
与在屏幕上方显示的项目相比,在屏幕下方显示的项目被点击的可能性较小。 但是,在对视频评分时,系统通常不知道最终将显示该视频的链接在屏幕上的哪个位置。 用所有可能的位置查询模型太昂贵了。 即使查询多个职位是可行的,系统仍可能无法在多个排名分数中找到一致的排名。
解决方案
-
创建与位置无关的排名。
-
对所有候选进行排名,就好像他们在屏幕上的顶部。
重排序
在推荐系统的最后阶段,系统可以对候选人重新排序,以考虑其他标准或约束。 一种重新排序的方法是使用过滤器来删除一些候选者。
示例:您可以通过执行以下操作来对视频推荐器实施重新排名:
-
训练一个单独的模型来检测视频是否为点击诱饵。
-
在候选列表上运行此模型。
-
删除模型分类为点击诱饵的视频
另一种重新排序方法是手动转换排名者返回的分数。
示例:系统通过根据以下功能修改得分来重新排名视频:
-
视频时代(也许是为了推广新鲜的内容)
-
影片长度
本节简要讨论新鲜度,多样性和公平性。 这些因素是可以帮助您改善推荐系统的众多因素。 其中一些因素通常需要修改流程的不同阶段。 每个部分均提供您可以单独或共同应用的解决方案。
新鲜度
大多数推荐系统旨在合并最新的使用信息,例如当前用户历史记录和最新项。 保持模型新鲜有助于模型提出良好的建议。
解决方案
-
尽可能频繁地重新运行培训以学习最新的培训数据。 我们建议热启动训练,以便模型不必从头开始重新学习。 热启动可以大大减少训练时间。 例如,在矩阵分解中,热启动模型先前实例中存在的项的嵌入。
-
创建一个“平均”用户来代表矩阵分解模型中的新用户。 您不需要为每个用户进行相同的嵌入-您可以根据用户功能创建用户集群。
-
使用诸如softmax模型或两塔模型的DNN。 由于该模型将特征向量作为输入,因此可以在训练期间未看到的查询或项目上运行它。
-
添加文档年龄作为功能。 例如,YouTube可以将视频的年龄或上次观看的时间添加为功能。
多元性
如果系统始终推荐与查询嵌入“最接近”的项目,则候选者往往会非常相似。 多样性的缺乏会导致不良或无聊的用户体验。 例如,如果YouTube仅推荐与用户当前正在观看的视频非常相似的视频,例如猫头鹰视频(如图所示),则用户可能会很快失去兴趣。
解决方案
-
使用不同的来源训练多个候选生成器。
-
使用不同的目标函数训练多个等级。
-
根据体裁或其他元数据重新排列项目,以确保多样性。
公平度
您的模型应公平对待所有用户。 因此,请确保您的模型没有从训练数据中学习无意识的偏见。
解决方案
-
在设计和开发中包括不同的观点。
-
在综合数据集上训练ML模型。 当数据太稀疏时(例如,某些类别的代表性不足时),添加辅助数据。
-
跟踪每个人口统计指标(例如,准确性和绝对误差)以观察偏差。
-
为服务不足的群体制作单独的模型。