Press "Enter" to skip to content

个性化搜索的介绍,推荐和搜索的强强结合

作者: Pavel Kordík

 

编译:ronghuaiyang

 

导读

 

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

 

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

 

 

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

 

用户倾向于在一个地方找到所有东西,他们中的大多数人喜欢从更相关的选择中进行挑选,所以服务提供商需要适应这种需求。一些全球性的服务(如谷歌、亚马逊、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、…,排序,根据它们的相关性。(对listwise来说很完美,但很耗时)

 

很明显,人工标注非常贵,而且它们的标签也不是很可靠。因此,应该从用户在网站上的行为来获得排名和训练系统。

 

更好的方法是用推荐系统代替上述的LTR算法。

 

个性化搜索回顾

 

当根据用户的偏好对搜索结果进行排序时,用户对搜索功能的总体满意度会显着提高。

 

 

个性化搜索还应该考虑用户偏好、历史交互和相似用户的交互。为什幺不利用推荐系统呢?对于相同的搜索查询,两个用户可以期望非常不同的推荐。

 

解决方案是将搜索引擎与强大的推荐系统相结合,而不是像上面描述的那样将经典学习应用到机器学习(LTR)模型中。这种方法有几个优点,我们将在后续的博客文章中分析它们。

 

 

我们的个性化搜索方法结合了搜索引擎和推荐系统。首先,搜索引擎对推荐物品(与查询无关)进行重新排序,以过滤掉不相关的推荐,并推送与query匹配的物品及其描述。其次,搜索引擎返回最佳匹配的候选项,而不管用户属性文件或交互历史记录。然后,这些商品由推荐系统重新排序,以更好地适应每个特定用户的口味。最终结果由上游的 排名投票 产生。

 

— END —

 

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

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注