作者: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

个人微信:加时请注明 (昵称+公司/学校+方向)

也欢迎小伙伴加入NLP交流群,刚刚创的,想和大家讨论NLP!

【算法原理篇】个性化搜索的介绍,推荐和搜索的强强结合相关推荐

  1. 微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)

    1.点评 对于IM系统来说,如何做到IM聊天消息离线差异拉取(差异拉取是为了节省流量).消息多端同步.消息顺序保证等,是典型的IM技术难点. 就像即时通讯网整理的以下IM开发干货系列一样: <I ...

  2. xgboost算法_xgboost算法原理篇

    1, 概述部分 这篇文章,主要来介绍一下xgboost的理论部分,可能会不够详细,由于xgboost算法相比较前三篇文章中提到的算法更加复杂,这里主要讲解一下损失函数正则化,切分点查找算法及其优化,叶 ...

  3. 专访头条搜索:从推荐到搜索,如何构建搜索技术的另一种可能?

    今日头条又将搜索业务往前推进了一步.4 月 30 日,今日头条宣布上线"头条百科"测试版.界面简洁,除了搜索框外,只有一个 Slogan:" 来这里,认识世界!" ...

  4. 3分钟了解今日头条推荐算法原理

    今日头条的内容分发算法一直颇神秘低调.自12年开发运营起进四次改版,从未透露核心内容. 2018年1月,今日头条资深算法架构师曹欢欢博士,终于首次公开今日头条的算法原理,以期推动整个行业问诊算法.建言 ...

  5. rbf神经网络原理_【新书推荐】【2012.12】智能优化算法原理与应用(李士勇)...

    智能优化算法是指通过计算机软件编程模拟自然界.生物界乃至人类自身的长期演化.生殖繁衍.竞争.适应.自然选择中不断进化的机制与机理,从而实现对复杂优化问题求解的一大类算法的统称.李士勇编著的<智能 ...

  6. 基于 transformers 的 generate() 方法实现多样化文本生成:参数含义和算法原理解读

    一.前言 最近在做文本生成,用到huggingface transformers库的文本生成 generate() 函数,是 GenerationMixin 类的实现(class transforme ...

  7. matlab sift乘积量化,PQ(乘积量化)应用于ANN算法原理和代码解读

    背景 PQ算法全称ProductQuantization,中文名为乘积量化.该算法来源于图像检索,本质上是对向量做压缩.该算法也可以应用于ANN,本文介绍该算法在ANN的应用以及相关代码实现.算法介绍 ...

  8. 常见的推荐算法原理介绍

    常见的推荐算法原理介绍,随着互联网的发展短视频运营越来越精准化,我们身边常见的抖音.火山小视频等软件让你刷的停不下来,这些软件会根据你的浏览行为推荐你感兴趣的相关内容,这就用到了很多推荐算法在里面. ...

  9. (只此一篇便绝b能懂的)五子棋AI算法原理,博弈树、极大极小搜索、αβ剪枝

    我在最近撰写五子棋AI程序设计报告时,翻阅了很多的资料博客,但却发现大佬们的博客,没有一篇是能让我只看它就能理解全部的AI算法.在看了众多博客后,我终于对博弈树.极大极小搜索.αβ剪枝恍然大悟,其实这 ...

最新文章

  1. /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found的解决办法
  2. 方法总比困难多_只是为了生活
  3. OPENCV裁剪图片
  4. java gz文件解压_java – 批量解压缩.gz文件
  5. 三)mybatis 二级缓存,整合ehcache
  6. Linux虚机安装配置Tomcat
  7. mie散射理论方程_A. Mie米散射理论基础
  8. Spring Boot + thymeleaf 后台与页面(二)
  9. http报文格式_(一)深入浅出TCPIP之理解TCP报文格式和交互流程
  10. passing '' as 'this' argument discards qualifiers [-fpermissive]
  11. 要学习使用 calib3D 模块在图像中创建 3D 效果-姿势估计
  12. java robust_Java的鲁棒性(Robust)
  13. 利用MC34063升压180V的心(辛)路(酸)历(经)程(历)
  14. java工程师待遇_Java程序员的薪资水平如何?
  15. C++在线编辑器:cpp.sh
  16. git 提交代码某个文件夹一直提交不上去
  17. python服务端设置心跳处理_Heartrate:看见 Python 程序运行的“心跳”
  18. centos7查看udp端口_CentOS7查看开放端口命令及开放端口号
  19. 计算机图形学——绘制钻石图案
  20. springboot2.2.X手册:基于OSS解决文件存储(一年9元^^,赚了)

热门文章

  1. 如何在Word加入图形?干货来啦!怎样在Word插入形状?
  2. (四)汇编语言——简单程序
  3. 高分辨率相机成像效果就越好吗?
  4. 余额宝业务架构 收藏备用
  5. java 日程日历_日程日历示例 - voxer的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. Visual Basic工具栏不小心关闭的解决方法
  7. [转]NOBODY 兔斯基(清晰版)
  8. css设置图片逐渐消失
  9. 基于APICloud的笑话百科APP的设计与实现
  10. 注册iTunes账号(免信用卡)