推荐系统如何选择反例?

数据挖掘 机器学习 深度学习 推荐系统
2021-09-30 19:26:05

我正在为电子商务构建一个搜索推荐系统,它会在给定输入查询的情况下生成最相关的结果。我将其定义为一个分类问题(学习排名)并使用逐点排名来计算相关性分数。

假设对于每个输入查询 Q1,我们必须生成 30 个最相关的结果。假设,用户发起搜索查询并选择第三个结果作为相关结果。我的问题是如何使用这种交互来为模型生成训练数据集:

  1. Q1 - 结果 3:正面标签
  2. Q1 - 结果 1,2:负标签(用户显然看到了结果 1,2 并且不喜欢它。在一些论文/博客中也被称为跳高)。
  3. Q1 - 随机:负标签(只需添加一些随机结果以将随机负数添加到数据集)。

4-30级怎么样。用户可能看到排名 4-8,但在这些排名之后用户甚至没有看到结果。是否应该使用这些较低的等级来生成隐含的负数以提供给模型?

优点

  • 从较低等级的隐式负值中随机抽样将确保模型在预测期间必须得分的整个特征分布上进行训练。如果我们只使用步骤 1/2 中明确的正/负,模型将只在非常相关的结果上进行训练。从较低级别进行抽样将确保模型也将在整个相关结果范围内进行训练。

缺点

  • 我们正在向训练数据集添加噪声,因为用户甚至没有与这些结果进行交互。

所以,主要的问题是我们是否应该将排名 4-30 的结果包括在内,这些结果可能甚至没有被用户视为训练数据集中的负面示例?

1个回答

是的,我们应该包括负样本,更重要的是纠正选择或抽样偏差。

用户将只看到由另一个算法或规则选择的子集,该算法或规则决定该子集与用户最相关。其中,位置偏差开始出现,用户可能看不到所有内容。因此,查询中的选择或查询中的文档可能彼此非常相似(可能存在细微差异)。这使得算法学习参数变得不同。

而在生产中评分时,几乎所有的选择/文档都必须为每个查询评分。除非首先使用旧模型来选择酒店的子集,并且如果学习排名模型在子集中重新排名。

根据我的经验,添加负样本(我们可以安全地告诉用户即使他/她看到该项目也不会选择/单击该项目)会有所帮助。但是很难为所有用例定义这样的基础。

我们仍在对此进行试验。