机器学习在高德搜索建议中的应用优化实践

导读:高德的愿景是:连接真实世界,让出行更美好。为了实现愿景,我们要处理好LBS大数据和用户之间的智能链接。信息检索是其中的关键技术,而搜索建议又是检索服务不可或缺的组成部分。

本文将主要介绍机器学习在高德搜索建议的具体应用,尤其是在模型优化方面进行的一些尝试,这些探索和实践都已历经验证,取得了不错的效果,并且为后来几年个性化、深度学习、向量索引的应用奠定了基础。

对搜索排序模块做重构

搜索建议(suggest服务)是指:用户在输入框输入query的过程中,为用户自动补全query或POI(Point of Interest,兴趣点,地理信息系统中可以是商铺、小区、公交站等地理位置标注信息),罗列出补全后的所有候选项,并进行智能排序。

我们希望通过suggest服务:智能提示,降低用户的输入成本。它的特点是:响应快、不承担复杂query的检索,可以把它理解为一个简化版的LBS领域信息检索服务。

和通用IR系统一样,suggest也分为doc(LBS中的doc即为POI)的召回和排序两个阶段。其中,排序阶段主要使用query和doc的文本相关性,以及doc本身的特征(weight、click),进行加权算分排序。

但随着业务的不断发展、特征规模越来越大,人工调参逐渐困难,基于规则的排序方式已经很难得到满意的效果。这种情况下,为了解决业务问题,将不得不打上各种补丁,导致代码难以维护。

因此,我们决定对排序模块进行重构,Learning to Rank无疑是一个好的选择。

面临的挑战:样本构造、模型调优

Learning to Rank(LTR)是用机器学习的方法来解决检索系统中的排序问题。业界比较常用的模型是gbrank,loss方案用的最多的是pair wise,这里也保持一致。一般应用LTR解决实际问题,最重要的问题之一就是如何获得样本。

首先,高德地图每天的访问量巨大,这背后隐藏的候选POI更是一个天文数字,想要使用人工标注的方法去获得样本明显不现实。

其次,如果想要使用一些样本自动构造的方法,比如基于用户对POI的点击情况构建样本pair ,也会遇到如下的问题:

•容易出现点击过拟合,以前点击什么,以后都给什么结果。
•有时,用户点击行为也无法衡量真实满意度。
•suggest前端只展示排序top10结果,更多的结果没有机会展现给用户,自然没有点击。
•部分用户习惯自己输入完整query进行搜索,而不使用搜索建议的补全结果,统计不到这部分用户的需求。

对于这几个问题总结起来就是:无点击数据时,建模很迷茫。但就算有某个POI的点击,却也无法代表用户实际是满意的。

最后,在模型学习中,也面临了特征稀疏性的挑战。统计学习的目标是全局误差的一个最小化。稀疏特征由于影响的样本较少,在全局上影响不大,常常被模型忽略。但是实际中一些中长尾case的解决却往往要依靠这些特征。因此,如何在模型学习过程中进行调优是很重要。

系统建模过程详解

上一节,我们描述了建模的两个难题,一个是样本如何构造,另一个是模型学习如何调优。 先看下怎么解决样本构造难题,我们解决方案是:

•考量用户在出行场景的行为session,不光看在suggest的某次点击行为,更重要的是,考察用户在出行场景下的行为序列。比如suggest给出搜索建议后,继续搜索的是什么词,出行的地点是去哪里,等等。

•不是统计某个query下的点击, 而是把session看作一个整体,用户在session最后的点击行为,会泛化到session中的所有query上。

详细方案
第一步,融合服务端多张日志表,包括搜索建议、搜索、导航等。接着,进行session的切分和清洗。最后,通过把输入session中,末尾query的点击计算到session中所有query上,以此满足实现用户输入session最短的优化目标。

如下图所示:

最终,抽取线上点击日志超过百万条的随机query,每条query召回前N条候选POI。利用上述样本构造方案,最终生成千万级别的有效样本作为gbrank的训练样本。

特征方面,主要考虑了4种建模需求,每种需求都有对应的特征设计方案:

•有多个召回链路,包括:不同城市、拼音召回。因此,需要一种特征设计,解决不同召回链路间的可比性。
•随着用户的不断输入,目标POI不是静态的,而是动态变化的。需要一种特征能够表示不同query下的动态需求。
•低频长尾query,无点击等后验特征,需要补充先验特征。
•LBS服务,有很强的区域个性化需求。不同区域用户的需求有很大不同。为实现区域个性化,做到千域千面,首先利用geohash算法对地理空间进行分片,每个分片都得到一串唯一的标识符。从而可以在这个标识符(分片)上分别统计特征。

详细的特征设计,如下表所示:

完成特征设计后,为了更好发挥特征的作用,进行必要的特征工程,包括尺度缩放、特征平滑、去position bias、归一化等。这里不做过多解释。

初版模型,下掉所有规则,在测试集上MRR 有5个点左右的提升,但模型学习也存在一些问题,gbrank特征学习的非常不均匀。树节点分裂时只选择了少数特征,其他特征没有发挥作用。

以上就是前面提到的,建模的第二个难题:模型学习的调优问题。具体来说就是如何解决gbrank特征选择不均匀的问题。接下来,我们详细解释下。

先看下,模型的特征重要度。如下图所示:

经过分析,造成特征学习不均衡的原因主要有:

•交叉特征query-click的缺失程度较高,60%的样本该特征值为0。该特征的树节点分裂收益较小,特征无法被选择。然而,事实上,在点击充分的情况下,query-click的点击比city-click更接近用户的真实意图。
•对于文本相似特征,虽然不会缺失,但是它的正逆序比较低,因此节点分裂收益也比city-click低,同样无法被选择。

综上,由于各种原因,导致树模型学习过程中,特征选择时,不停选择同一个特征(city-click)作为树节点,使得其他特征未起到应有的作用。解决这个问题,方案有两种:

•方法一:对稀疏特征的样本、低频query的样本进行过采样,从而增大分裂收益。优点是实现简单,但缺点也很明显:改变了样本的真实分布,并且过采样对所有特征生效,无法灵活的实现调整目标。我们选择了方法二来解决。
•方法二: 调loss function。按两个样本的特征差值,修改负梯度(残差),从而修改该特征的下一轮分裂收益。例如,对于query-click特征非缺失的样本,学习错误时会产生loss,调loss就是给这个loss增加惩罚项loss_diff。随着loss的增加,下一棵树的分裂收益随之增加,这时query-click特征被选作分裂节点的概率就增加了。

具体的计算公式如下式:

以上公式是交叉熵损失函数的负梯度,loss_diff 相当于对sigmod函数的一个平移。

8

差值越大,loss_diff越大,惩罚力度越大,相应的下一轮迭代该特征的分裂收益也就越大。

调loss后,重新训练模型,测试集MRR在初版模型的基础又提升了2个点。同时历史排序case的解决比例从40%提升到70%,效果明显。

写在最后
Learning to Rank技术在高德搜索建议应用后,使系统摆脱了策略耦合、依靠补丁的规则排序方式,取得了明显的效果收益。gbrank模型上线后,效果基本覆盖了各频次query的排序需求。

目前,我们已经完成了人群个性化、个体个性化的建模上线,并且正在积极推进深度学习、向量索引、用户行为序列预测在高德搜索建议上的应用。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA 2020.x 入门到爱不释手

文章目录一、默认快捷键二、案例演示2.1. 查看最近浏览过的文件 | ctrle2.2. 根据行号定位代码 | ctrlg2.3. 导航栏快速切换2.4. 按照文本的内容替换-整个项目 |CtrlShiftr2.5. 按照文本的内容查找-整个项目 | CtrlShiftF2.6. 快速生成|ALTENTER2.7. 生成try..catch..等方法块 …

【IPF2020】浪潮集团副总裁、渠道管理部总经理王峰:赋能智慧生态 筑基新基建

目前关键计算的传统数据中心和科学计算的超算中心已经发展多年,而未来作为核心生产力的智慧计算的基础设施就是智算中心,这也是国家提出的新基建最重要的基础设施之一。 智慧生态作为智算中心建设的核心力量,浪潮将继续强化智慧生态的基础策…

html-媒体元素

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>媒体元素学习</title> </head> <body><!-- 音频和视频 src 资源路径 必填 不写 controls 视频不显示 &#xff0c; 控制条 autop…

如何在云上使用confd+ACM管理敏感数据

在前面的一些文章中&#xff0c;我们介绍了如何在云上安全的存放配置数据&#xff0c;但是上面的方法都是有代码侵入性的&#xff0c;也就是说需要修改应用程序&#xff0c;本文会讲解如何使用 confdACM 在不修改代码的情况下动态修改应用所需的配置&#xff0c;并且可以重新启…

windows下RocketMQ下载、安装、部署、控制台

linux 环境 RocketMQ 4.8.0 安装、部署控制台 https://gblfy.blog.csdn.net/article/details/116269833 文章目录一、软件下载二、安装、启动、配置2.1. 安装jdk1.8及maven2.2. 解压2.3. 配置环境变量2.4. 启动三、安装可视化插件3.1. github下载3.2. 解压3.3. 修改配置文件3.4…

阿里云InfluxDB® Raft HybridStorage实现方案

背景 阿里云InfluxDB是阿里云基于开源版InfluxDB打造的一款时序数据库产品&#xff0c;提供更稳定的持续运行状态、更丰富强大的时序数据计算能力。在现有的单节点版本之外&#xff0c;阿里云InfluxDB团队还将推出多节点的高可用版本。 我们知道现有的开源版InfluxDB只提供单…

灰度测试试验流量“洗牌”

什么是灰度测试 A/B测试系统的一个常用场景是App/小程序/后端服务精细化运营过程中的上线迭代管理&#xff0c;通常被称为灰度测试或者灰度上线。 详细来说&#xff0c;如果软件产品要在不久的将来推出一个全新的功能&#xff0c;或者做一次比较重大的改版的话&#xff0c;要…

html-页面结构分析

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>页面结构分析</title> </head> <body><header><h2>网页头部</h2></header><sectiokn><h2>网页…

阿里资深技术专家的10年感悟

阿里妹导读&#xff1a;阿里有许多土话&#xff0c;比如“方法总比困难多”、“不淘汰自己就会被别人淘汰”、“你感觉不舒服的时候&#xff0c;就是成长的时候”。每一句都在激励我们向前。生活总不缺困难和磨练&#xff0c;痛苦的时候&#xff0c;只有转变思维&#xff0c;才…

AnalyticDB for MySQL 3.0基础版重磅发布

随着大数据技术的迅速发展以及对数据价值的认识逐渐加深&#xff0c;大数据已经融合到各行各业。据可靠权威数据显示&#xff0c;超过39.6%的企业正在应用数据并从中获益&#xff0c;超过89.6%的企业已经成立或计划成立相关的大数据分析部&#xff0c;超过六成的企业在扩大数据…

主键索引 or 辅助索引?一文告诉你 Mysql limit 优化时的索引选择!

作者 | 吴海存责编 | 徐威龙封图| CSDN下载于视觉中国导读&#xff1a;本文主要针对limit分页时&#xff0c;是优先基于主键索引还是辅助索引等层面展开分析&#xff0c;对limit及offset的用法以及是否该用索引不会过多赘述。我们知道&#xff0c;在Mysql中可以通过limit实现快…

html-iframe内联框架

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>内联框架学习</title> </head> <body><!-- iframe内联框架 src : 地址 w-h : 宽度高度 --><iframe src"https://www.…

一个阿里产品经理眼中的“垃圾分类”

我叫切斯&#xff0c;是阿里巴巴的一名产品经理。今天和大家说说一个上线刚刚6天&#xff0c;已被500多万网友疯玩的AI——垃圾图像识别&#xff0c;可见垃圾分类苦天下网友久矣。 以下是一个产品经理的碎碎念~ 有人说它是“国内首款真正的垃圾图像识别产品”&#xff0c;对着…

html-初识表单post和get提交

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录注册</title> </head> <body> <h1>注册</h1> <!-- 表单formaction: 表单提交的位置&#xff0c;可以是网站&…

数据仓库架构以及多维数据模型的设计

作者 | 云祁封图| CSDN下载于视觉中国一、前言作者最近看了《Hadoop构建数据仓库实践》这本书&#xff0c;收获很多&#xff0c;把一些关于数仓实践的心得整理出来&#xff0c;方便大家共同学习。注&#xff1a;本文内容由作者摘自《Hadoop构建数据仓库实践》与其他相关参考资料…

html-文本框和单选框

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>登录注册</title> </head> <body> <h1>注册</h1> <!-- 表单form action: 表单提交的位置&#xff0c;可以是网站&am…

如何使用 Mybatis 实现数据库 CURD 操作?

作者 | 阿文&#xff0c;责编 | 郭芮头图 | CSDN 下载自东方IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的…

如何使用confd+ACM管理Nginx配置

Nginx 作为优秀的开源软件&#xff0c;凭借其高性能高并发等特点&#xff0c;常常作为web和反向代理服务部署在生产环境中。但是当 Nginx 的规模较大时&#xff0c; Nginx 的运维成本也是不断上升。本文介绍如何通过confdACM来管理 Nginx 配置&#xff0c;通过集中式的配置管理…

Soloπ:支付宝开源的Android专项测试工具

1.前言 近年来&#xff0c;随着移动互联网的蓬勃发展&#xff0c;移动测试技术也取得了长足的进步&#xff0c;从早期基于测试脚本的单机自动化&#xff0c;到录制回放、图像识别、云测平台等测试技术贴合实际业务需求深度应用和创新&#xff0c;测试效率从而一次又一次被提升…

详析 Kubernetes 在边缘计算领域的发展

作者 | 张杰来源 | 分布式实验室现在开源边缘计算正在经历其业界最具活力的发展阶段。如此多的开源平台&#xff0c;如此多的整合以及如此多的标准化举措&#xff01;这显示了构建更好平台的强大动力&#xff0c;以便将云计算带到边缘以满足不断增长的需求。同时Kubernetes现在…