作者:Pavel Kord ík

编译:ronghuaiyang

英文原文: https://medium.com/recombee-blog/introduction-to-personalized-search-2b70eb5fa5ae

导读: 一般来说,搜索是非个性化的,不过如果和推荐系统组合起来,也会有意想不到的效果。

寻找正确的信息总是很困难的。在不久之前,文档还是存放在实际的物理仓库中,要找到相关的文档是非常困难的。

当文档可以通过在线存储库访问时,索引文档的数量开始超出物理存储的限制。 电子商务网站提供的产品数量或通过在线流媒体服务提供的内容数量亦是如此。

用户倾向于在一个地方找到所有东西,他们中的大多数人喜欢从更相关的选择中进行挑选,所以服务提供商需要适应这种需求。一些全球性的服务(如谷歌、亚马逊、Netflix、Spotify),在飞快的增长,用户几乎在上面可以找到任何东西。推动它们在全球占据主导地位的最强大工具之一,是它们以机器学习技术为动力的高度先进的 个性化 技术。这些技术就是 推荐系统个性化搜索

推荐系统使用用户与物品的交互的历史来为用户生成最相关物品的排序列表。搜索引擎根据与给定查询的相似度对内容进行排序,而不考虑用户的历史记录。

推荐系统使用户能够在线发现相关文档、产品或内容。通常,用户可能最喜欢的物品隐藏在数百万个其他物品中。用户无法通过搜索引擎直接找到这些商品,因为他们很少知道它们的标签,甚至可能不知道它们的存在。

另一方面,有时用户需要 寻找一个特定的 物品,并愿意通过表达他们的需求来帮助在线系统,以减少可能被推荐的物品的数量。

有几种方法可以帮助用户表达他们的需求。用户体验在这里扮演着非常重要的角色。很多用户通过他们的手机访问在线服务,但显示兴趣的能力有限。在线服务应该专注于利用所有可用信息过滤可能的搜索结果。

用户地理位置可以显著缩小可能的搜索和推荐结果。例如,在 Recombee 中,您可以选择推荐只包含距离用户位置一定范围内的物品。另一种方法是,当某个物品在地理位置上更接近某个用户时,你可以提高该物品被推荐的可能性。

用户希望使用特定的标签或类别过滤掉可能的搜索结果。它通常只需要一次点击就可以过滤除特定类别之外的所有物品(例如,除了科幻小说之外的所有文章)。应该让用户尽可能轻松地表达他们的兴趣。

一定比例的用户希望可以使用一个查询文本(即使只是几个字符)的方式来缩小搜索范围。他们的目的可能是找到一个特定类别的商品,或者通过他们知道的正在寻找的商品的标签直接来搜索一个特定的商品。他们输入的文本被称为 a user query,这篇博客文章讨论了如何利用一个 query 来帮助用户找到她/他要找的东西。这篇博客文章从理论部分开始,然后是实践部分。

信息检索

为给定文本 query 寻找合适物品的问题作为信息检索(information retrieval, IR)已经研究了几十年。当用户向系统输入一个 query 时,信息检索过程就开始了。query 是信息需求的正式形式,例如 Web 搜索引擎中的搜索字符串。在信息检索中,query 不能唯一地标识集合中的单个物品(文档)。相反,有几个物品能与 query 匹配,可能具有不同程度的相关性。

传统的方法试图将 query 与文档匹配,并根据相似度获得相关性。机器学习方法通过从训练数据构建一个排序模型来解决 IR 问题。这样的训练数据(对于搜索引擎来说)是什么样的呢?通常,它是对每个 query 进行“适当”排序的文档的集合。

以下是在相关博客中描述的 IR 系统方案:

经典的 IR 系统不是个性化的,它只是为一个 query 返回大部分相关的文档。机器学习通常是不需要的,因为系统遵循预定义的过程(如 TF-IDF 相似性查找)。

该系统通过匹配 query 和文档并计算它们的相似度来工作。大多数相似的文档都是按照与 query 的相似度排序返回的。相似度是计算出来的,比如 TF-IDF 向量的余弦相似度。

通过重新排序(使用机器学习模型)可以改进搜索结果。在本例中,还使用搜索引擎来减少机器学习模型的候选项的数量,从而使评分更快。

Learning to rank(LTR)是机器学习的一种应用,它根据人的期望对物品进行排序。LTR 模型通常使用人类标记的数据进行训练。

在召回阶段,LTR 模型获取由搜索引擎生成的一个 query 和返回的文档(项)的子集,作为每个物品的输入和输出相关性。最后,它可以输出一个经过排序的文档列表(k-最相关的文档)。请注意,现代系统还可以将用户属性文件作为输入,并执行个性化学习来对机器学习任务进行排序。

经典预测模型, learning to rank 模型和推荐系统之间的区别是什么?

  • 预测模型/分类器通常只有几个输出属性,它们的设计目的不是为及百万用户进行几百万物品的排序。
  • Learning to Rank 系统,对于给定的 query,返回的结果是相同的列表,不涉及个性化。
  • 推荐系统 不使用 query,它们根据用户历史和用户之间的相似性生成相关物品。相关物品的计算方法是在评分矩阵中预测它们的评分,或者根据它们的属性推荐类似的物品。

下一节对 LTR 和推荐系统都很有用,因为模型的评估与机器学习中的经典预测模型是相似的。

评估 LTR 和推荐系统

累积收益 度量通过 learning to rank 系统或推荐系统返回的前 k 项的相关性。

例如,我们可以把 6 个返回物品的相关性加起来(注意,第 4 项是不相关的)。

显示给用户的物品很少有统一的可见性方式。例如,在电子商务中,由于大多数用户不想向下滚动列表,所推荐的商品的可见性急剧下降。在媒体领域,一个内容经常被高亮显示,而其他内容则很难被发现。

CG 的问题是它没有考虑到物品的位置。例如,第一个推荐可能有比其他五个大得多的图像显示。此外,用户倾向于浏览列表顶部的几个物品,而他们看到列表更下方的物品的可能性要小得多。基于这个原因,discounted cumulative gain(DCG)比简单的 CG 更受欢迎。

在 DCG 中,相关性值与结果的位置成对数比例递减。

DCG 可以很容易地计算,如上例所示。

有些变体甚至更加强调检索列表顶部的相关物品。

假设一个数据集包含 N 个 query。通常的做法是对每个 query 的 DCG 分数进行归一化,并得到所有 query 的平均 DCG(“NDCG”)分数。有这样一个评价指标是很好的,但请记住现实世界是残酷的。

传统的 LTR 算法

  • Pointwise 方法 将排序转化为单个物品的回归或分类。然后,该模型一次只获取一个物品,它要么预测其相关性得分,要么将该物品归类到一个相关性类中。
  • Pairwise 方法 将问题处理为物品对的分类,即确定在第一个位置上的物品是不是具有更高的相关性,反之亦然。
  • Listwise 方法 把整个物品列表作为一个学习样本。例如,使用属于一个特定 query 的所有物品的得分,而不是仅通过比较成对或单个样本。

以下是一些 LTR 算法的例子:

PRank 算法,使用感知器(线性函数)从文档的特征向量中估计文档的得分。query 被附加到文档嵌入的特征向量中。我们还可以将文档分类为相关类(例如相关/不相关)。这个函数几乎可以用任何机器学习方法来建模。大多数算法使用决策树和森林。现代方法利用深度学习网络。

最终的排名列表是通过对所有文档进行评分并根据预测的相关性进行排序得到的。显然,当对模型进行输入嵌入和相应输出相关性的训练时,我们并没有直接最小化 NDCG 或其他上述评价标准。与 Pointwise 方法相一致,Pairwise 方法也使用代理可微损失函数。

为了更好地理解 pairwise 方法,我们应该记住在二元分类中使用的交叉熵损失,它惩罚了模型的高置信度的错误的预测。

对数损失可以通过对 0,1 标签的损失求和来计算:−(y log(p) +(1−y) log(1−p))

正如你所看到的,错误的高置信度的答案得到很高的损失。

更多关于 LTR 系统的梯度训练算法可以在这里找到: https://medium.com/recombee-blog/ // www.microsoft.com/en-us/research/wp-content/uploads/2005/08/icml_ranking.pdf

Rankboost 直接优化分类错误。它源自 Adaboost,在文档对上进行训练。它训练弱分类器,将更多的权重赋给在前面步骤中没有正确分类的对。

RankSVM 是第一批采用 pairwise 方法解决问题的算法之一。它以序数回归的方式进行排序,并对类的阈值进行训练。RankSVM 采用 hinge 损耗函数最小化。它还允许直接使用 kernel 进行非线性处理。

listwise 方法的动机

pairwise 的方法很好,但也有缺点。训练过程是昂贵的,并且存在固有的训练偏差,在不同的 query 中差异很大。也只有 pairwise 的关系被考虑在内。我们想使用一个评价指标,能让我们优化完整的 list,同时考虑到所有物品的相关性。

指数排序的优势在于,即使当模型 f 给所有文档分配相似的分数时,它们的最高概率也会非常不同 —— 最好的文档接近 1,相关性较低的文档接近 0。

这里,损失是针对一个文档列表计算的。我们不太关心不相关的文档 Py(x)=0,最大的损失是由相关文档造成的。

如何得到 LTR 系统的训练数据?

获取 LTR 系统的训练数据可能是一个漫长而昂贵的过程。你通常需要一群人,人工来输入查询并判断搜索结果。关联判断也比较困难。评估人评估下列分数之一:

相关度 —— 二值:相关与不相关(适合 pointwise)

pairwise 偏好 —— 文件 A 比文件 B 更相关。

总的顺序 —— 文件按 A、B、C、…,排序,根据它们�