主动排名学习

通过这篇文章,我将打开一个系列,我的同事和我将告诉您在Mail.ru搜索中如何使用ML。 今天,我将解释排名的安排方式,以及我们如何使用有关用户与搜索引擎互动的信息来改善搜索引擎。

排名任务


排名任务是什么意思? 想象一下,在训练样本中,存在一些查询,这些查询的关联性是已知的。 例如,您知道哪个文档最相关,哪个文档第二相关等等。 并且您需要为整个人口恢复此顺序。 也就是说,对于一般人群的所有请求,最重要的文档放在第一位,而最不相关的放在最后。

让我们看看如何在大型搜索引擎中解决此类问题。


我们有一个搜索索引-这是一个包含数十亿个文档的数据库。 当请求到达时,我们首先使用简单的文本模型生成候选列表以进行最终排名。 最简单的选择是拾取原则上包含请求中单词的文档。 为什么需要此步骤? 事实是,所有可用文档都不可能建立最终模型的标志和形式预测。 在我们已经计算出符号之后。 我们可以采取什么迹象? 例如,来自文档中查询的​​单词出现次数或给定文档上的点击次数。 您可以使用复杂的机器训练因素:我们在“使用神经网络进行搜索”中预测按需文档的相关性,并将此预测在我们的特征空间中插入新列。

我们为什么要做这一切? 我们希望最大化用户指标,以便用户尽可能轻松地在我们的结果中找到相关结果,并尽可能多地返回给我们。

我们的最终模型使用了一系列使用梯度提升构建的决策树。 有两种方法可以建立培训目标指标:

  • 我们正在建立一个评估人员部门,即经过专门培训的人员,我们向他们进行询问并说:“伙计们,评估我们发行的相关性。” 他们将以衡量相关性的数字作为回应。 为什么这种方法不好? 在这种情况下,我们将根据非用户的意见最大化模型。 我们不会针对我们真正想要优化的指标进行优化。
  • 因此,我们对目标变量使用第二种方法:向用户显示结果,查看他们传递给哪些文档,跳过哪些文档。 然后,我们使用这些数据来训练最终模型。

排名问题如何解决?


有三种方法可以解决排名问题:

  • 点对点 ,它是点对点的。 我们将关联性视为绝对度量,并将模型精简为预测的关联性与我们从训练样本中知道的关联性之间的绝对差异。 例如,评估者给文档打了3级,可以说是2级,因此我们对模型进行1级细化。
  • 成对 ,成对。 我们将相互比较文件。 例如,在训练样本中有两个文档,我们知道哪个文档与该请求更相关。 然后,如果该模型将预测值置于相关性较低的预测之下,即该对的排列不正确,则会对其进行调整。
  • Listwise 。 它也基于相对相关性,但不是基于成对的:我们通过模型对整个问题进行排名并评估结果-如果最相关的文档不在第一位,则会被罚款。

哪种方法更适合用于我们的目标变量? 为此,值得讨论一个重要的问题:“可以使用点击来衡量文档的绝对相关性吗?” 这是不可能的,因为它们取决于问题中文档的位置。 收到问题后,您很有可能单击会更高的文档,因为您似乎认为第一个文档更相关。

如何验证这一假设? 我们将两个文档放在问题的顶部,然后交换它们。 如果单击是绝对相关性的量度,则它们的数量将仅取决于文档本身,而不取决于位置。 但是事实并非如此。 上面的文档总是获得更多点击。 因此,点击绝对不能用作衡量绝对相关性的指标。 因此,您可以成对使用或成对使用。

我们收集一个数据集


现在我们提取训练集的数据。 我们参加了这次会议:


在这四个文档中,单击了第二个和第四个。 通常,人们从上到下观察结果。 您查看了第一个文档,您不喜欢它,然后单击了第二个。 然后,他们返回搜索,查看了第三个并单击了第四个。 显然,您喜欢第二个而不是第一个,并且喜欢第四个而不是第一个和第三个。 这些是我们为所有请求生成的对,我们使用模型进行训练。

一切似乎都很好,但是有一个问题:人们仅从问题的最顶部单击文档。 因此,如果仅以这种方式制作训练样本,则其中的分布将与测试样本中的分布完全相同。 有必要以某种方式对齐分布。 为此,我们添加了负面示例:这些文档排在最后,用户绝对没有看到它们,但是我们知道它们很糟糕。


因此,我们得到了这样一种用于排名训练的方案:他们向用户显示结果,从中收集点击次数,添加否定示例以调整分布,并重新训练排名模型。 因此,我们会考虑用户对您当前排名的反应,将错误纳入考虑并改善排名。 我们重复这些过程很多次,直到收敛为止。 重要的是要注意,我们不仅通过网络搜索,而且还通过视频,图片搜索,并且所描述的方案在任何类型的搜索中都可以完美地工作。 结果,行为指标增长很多。 在第二次迭代中,它稍小,在第三次迭代中,它甚至更小,结果收敛到局部最优。

让我们考虑一下为什么我们收敛于局部最优而不是全局最优。

假设您是一名足球迷,并且晚上没有时间观看您最喜欢的球队的比赛。 早上醒来,在搜索栏中输入球队名称,以查找比赛结果。 请参阅前三个文件-这些是有关俱乐部的官方页面,没有有用的信息。 您不会浏览整个问题,也不会接听另一个请求。 也许您甚至单击一些不相关的文档。 但是结果是,不高兴了,关闭了SERP并打开了另一个搜索引擎。



尽管不仅在搜索中发现了此问题,但在这里尤其重要。 想象一下一个在线商店,这是一个很大的磁带,却无法说出您要看哪个特定类别的产品。 搜索结果就是这样:发送请求后,您将无法再解释您真正需要的是:有关橄榄球队的信息或上一场比赛的得分。

想象一下,一个残酷的男人去了一个如此奇怪的在线商店,里面有一条推荐带,而在他的推荐中,他通常只看到女性商品。 也许他甚至点击了一些裙子,因为它穿在一个漂亮的女孩身上。 我们将把此点击发送到训练集中,并确定该男人比海绵更喜欢这件衣服。 当他回到我们的系统中时,他将已经看到一些连衣裙。 最初,我们没有对用户有效的产品,因此这种方法将不允许我们修复此错误。 我们处于一个局部最优状态,穷人无法再告诉我们他不喜欢海绵或衣服。 通常将此问题称为正反馈问题。

进一步改善


如何使搜索引擎更好? 如何摆脱局部最优? 需要添加新因素。 假设我们提出了一个非常好的因素,即应要求以足球队的名字提出相关文件,即最后一场比赛的结果。 这可能是什么问题? 如果您在旧数据或离线数据上训练模型,则单击获取旧数据集,并在此添加该属性。 它可能是相关的,但是您之前没有在排名中使用它,因此人们没有单击该属性对其有利的文档。 它与目标变量不相关,因此模型将不会使用它。

在这种情况下,我们经常使用此解决方案:绕过最终模型,我们强制排名使用此功能。 我们会根据要求强行显示最后一场比赛的结果,并标明球队名称,如果用户点击了该名称,那么对于我们来说,这就是使我们能够理解该标志良好的信息。

让我们来看一个例子。 最近,我们为Instagram文档制作了精美图片:



如此精美的图片似乎应该尽可能让我们的用户满意。 显然,我们需要标明文件中有这样的图片。 我们添加到数据集中,重新训练排名模型,并查看如何使用此功能。 然后,我们分析行为指标的变化。 他们有所改进,但这是最好的解决方案吗?

不可以,因为对于许多请求,您不会显示出精美的图片。 您没有给用户机会展示他如何喜欢他们。 为了解决这个问题,对于涉及显示Instagram文档的某些请求,强行绕开了模型,我们显示了精美的图片,并查看是否单击了它们。 一旦用户赞赏了这项创新,他们便开始在数据集上重新训练模型,从而使用户有机会证明这一因素的重要性。 此过程之后,在新的数据集上,该因子开始被更频繁地使用多次,并显着增加了用户指标。



因此,我们研究了排名问题的陈述,并讨论了从用户那里获得反馈时等待您注意的陷阱。 您应该从本文中摘录的主要内容:使用反馈作为培训目标,请记住,用户只能在当前模型允许的地方保留此反馈。 在尝试建立新的机器学习模型时,此类反馈可能会给您带来麻烦。

Source: https://habr.com/ru/post/zh-CN461927/


All Articles