免费下载!由 O’Reilly 出版的《NGINX 完全指南》中文版已正式上线 了解详情
写点什么

认识机器学习排序 LTR

  • 2017-05-21
  • 本文字数:1761 字

    阅读完需:约 6 分钟

对工程师来说人工智能(AI)是很酷炫的,就像宇宙飞船和科幻小说也很酷一样。机器学习和人工智能吸引了非常多的关注。一些 IT 巨头如 IBM Intel ,已经实施了整套市场宣传,促使这些研究领域的实践日益增长。这继续很酷炫科幻吗?这些增长现在能合理地用于增强我们的应用吗?

学习排序技术把机器学习带进了搜索引擎的世界,这既不是魔术也不是小说。在新的较小的应用案例潮流的风口浪尖,允许一个现成的类库实现来满足用户预期。

什么是相关度工程?

搜索和探索非常适合应用机器学习技术。相关度工程是指识别文档集中针对这些文档的用户最重要的特征,并使用这些特征来优化搜索引擎,从而为每个用户的每次搜索返回最佳匹配文档的过程。简单重申下一个搜索引擎的工作过程:在索引阶段文档被解析成短语,这些短语随后会被插入到下图所示的索引中:

在搜索阶段,单个查询也被解析为短语。搜索引擎随后从倒排索引中检索这些短语,对匹配的文档做排序,抽取出跟这些文档最关联的文本,并返回排序后的结果给用户,如下所示:

根据文本短语识别最佳特征,是一个基础性难题。所有的书籍和博士生都在研究求解该问题。(厚颜推荐下我们的书《相关度搜索》 6 !)现在考虑一个销售记录:

复制代码
ID Title Price
1 Blue shoes $10
2 Dress shoes $15
3 Blue dress $20
4 Red dress $40

作为人类,我们直觉上知道在文档 2 里,‘dress’是一个描述鞋子的形容词,而在文档 3 和 4 中,‘dress’是一个名词,是类目中的一项。作为一个相关度工程师,我们可以构建一个信号量来猜测用户在搜索‘dress’时究竟希望是形容词还是名词。即使通过谨慎的手工分类,文本短语也是一个内容上的细微差别的不完美的呈现。

机器学习排序起源

来自 Wikipedia 的定义

学习排序或机器学习排序(MLR)是指应用机器学习为信息检索系统构建排序模型。通常通过一个二次排序函数实现。

这表示,并非使用一个机器学习模型替代搜索引擎,我们通过一个额外的步骤来扩展下流程。在查询到达索引后,该查询的最佳结果会被导入模型,并在返回用户前重新排序,如下图示:

为什么要分两部分完成?为什么不能使用模型完全替代搜索引擎?

搜索引擎通常有两个评价标准:召回率,即相关文档在结果集中返回的比例;精准率,即结果集中相关文档的比例。作为相关度工程师,为文档构建信号量,让搜素引擎返回所有重要结果,与优先返回最佳文档相比通常没那么难。直觉上,通常可能会通过简单地返回更多文档来提升召回率。但是对于一个普通用户,如果更好的结果不在列表的最开头,那就并没有什么提升。

机器学习如何介入到这个过程?回到我们的 Wikipedia 定义

机器学习是计算机科学的一个分支领域,让计算机能够在未明确编程的前提下学习。源于模式识别研究和人工智能方面的计算学习理论的发展,机器学习重在挖掘研究和构建能从数据中学习并作出决策的算法。

机器学习不是魔法,相比于人类理解词汇也并不智能。对于实践中的工程问题,需要提供一个训练数据集:我们想让机器去学习的数值模式的数值得分。事实证明,构建一个精确的训练数据集并不容易,并且对于很多现实中的应用,构建训练数据成本极高,即使使用优化算法。因此,如果搜索引擎在召回率方面已经挺好的了,就无需再收集数据来训练模型了;只需要在排序方面训练模型,或者在结果集中对文档重排序即可。

另一个缩小重排序范围的原因是性能问题。构建和评估模型都是计算密集型的。因为训练模型时要求每个特征都是一个文档或者文档和用户关系的数值表示,它必须每次都能用于计算。因为用户期望搜索结果在秒级或毫秒级返回,对1000 到2000 个文档同时做二次排序,要比对每次搜索的数万甚至数百万文档二次排序代价低。

后续内容

本文是机器学习排序系列文章的第二篇,如果想亲自动手尝试,可以试试我们开发的 Elasticsearch 的 LTR 插件!敬请关注本系列的更多文章:

  • 模型:何谓相关度模型?选择模型时如何考量?
  • 应用:将 LTR 应用到搜索、推荐系统、个性化及更多场景
  • 思考:应用 LTR 时有哪些技术和非技术因素需要考量?

查看英文原文: http://opensourceconnections.com/blog/2017/02/24/what-is-learning-to-rank/


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-05-21 17:554178

评论

发布
暂无评论
发现更多内容

NIO看破也说破(四)—— Java的NIO

小眼睛聊技术

Java 学习 开源 架构 后端

项目提升服务过程与总结稿

Geek_bc0aff

谁能让你安稳

Neco.W

工作 稳定性 努力工作

看完这篇 HTTPS,和面试官扯皮就没问题了

cxuan

https

中小型城市商业银行数字化转型实践(三)数据中台建设思路和路径

泡菜小仙

数据中台 数字化转型 数据架构

Kubernetes时代的云容器平台:各家云产品模式逐渐丰富

韩超

腾讯云 阿里云 Kubernetes IaaS PaaS

Android | Tangram动态页面之路(四)vlayout原理

哈利迪

android

520 我用算法帮女朋友的闺蜜选男友

cherubines

Python 算法 数据分析 蒙特卡洛 最优解

Spring Security 中的授权操作原来这么简单

江南一点雨

Java spring Spring Boot spring security

识别代码中的坏味道(三)

Page

敏捷开发 面向对象 重构 代码质量 代码坏味道

设计模式前传——为什么要学设计模式

大头星

Java 面试 设计模式

重新强调完成的定义

Bob Jiang

Scrum 完成的定义 DoD definition of done

中小型城市商业银行数字化转型实践(二)集成关系ESB APIGateway ServiceMesh

泡菜小仙

架构设计 集成架构 ESB

东哥和刘亦菲的故事

张利东

R

MacOS 下使用VSCode进行GoLang Test报错

北纬32°

macos vscode Unit Test debug Go 语言

我的读书笔记-樊登读书法

lmymirror

学习 读书笔记 方法论 读书方式

看得懂的区块链及智能合约概念

石君

区块链 智能合约

奇怪知识点系列:Office 365 CDN 揭秘

手艺人杨柳

Office 365 Microsoft 365 SharePoint Online

linux文件系统-inode学习整理

戈坞昂

Linux inode

《零基础学 Java》 FAQ 之 9-Java里的各种数据类型占用多少内存空间

臧萌

Java

产品周刊 | 第 15 期(20200517)

Herbert

产品 设计 产品经理 产品设计

中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)

泡菜小仙

数字化转型 架构设计 技术架构

在Gitlab-ce的Docker中使用自定义端口

天飞

Docker gitlab

MyBatis支持的jdbcType 枚举类型

Kevin Liao

部门最漂亮的妹子离职了

无箭的丘比特

团队管理 生涯规划 企业文化 职场

生活就是这么讽刺,有时候你嘲笑他,有时候你想成为他......

代码诗人

中年危机 文艺 短片小说

给苹果提醒APP配个助手

BabyKing

提醒助手 TODO 奇妙清单 Reminders Helper

ZooKeeper,到底如何选主?

奈学教育

Vue+SpringBoot+SpreadJS 实现的在线文档

葡萄城技术团队

Spring Boot Vue SpreadJS

单核小鸡上的Minikube实践(一)

摩登土狗

Docker Linux DevOps k8s minikube

换脸新潮流:BIGO风靡全球的人脸风格迁移技术

DT极客

认识机器学习排序LTR_语言 & 开发_Elizabeth Haubert_InfoQ精选文章