学校网站建设目的是什么,跨境电商培训哪家最好,石泉县城乡建设局网站,巴音郭楞蒙古自治州建设局网站导读#xff1a;高德的愿景是#xff1a;连接真实世界#xff0c;让出行更美好。为了实现愿景#xff0c;我们要处理好LBS大数据和用户之间的智能链接。信息检索是其中的关键技术#xff0c;而搜索建议又是检索服务不可或缺的组成部分。
本文将主要介绍机器学习在高德搜索…导读高德的愿景是连接真实世界让出行更美好。为了实现愿景我们要处理好LBS大数据和用户之间的智能链接。信息检索是其中的关键技术而搜索建议又是检索服务不可或缺的组成部分。
本文将主要介绍机器学习在高德搜索建议的具体应用尤其是在模型优化方面进行的一些尝试这些探索和实践都已历经验证取得了不错的效果并且为后来几年个性化、深度学习、向量索引的应用奠定了基础。
对搜索排序模块做重构
搜索建议suggest服务是指用户在输入框输入query的过程中为用户自动补全query或POIPoint of Interest兴趣点地理信息系统中可以是商铺、小区、公交站等地理位置标注信息罗列出补全后的所有候选项并进行智能排序。 我们希望通过suggest服务智能提示降低用户的输入成本。它的特点是响应快、不承担复杂query的检索可以把它理解为一个简化版的LBS领域信息检索服务。
和通用IR系统一样suggest也分为doc(LBS中的doc即为POI)的召回和排序两个阶段。其中排序阶段主要使用query和doc的文本相关性以及doc本身的特征weight、click进行加权算分排序。
但随着业务的不断发展、特征规模越来越大人工调参逐渐困难基于规则的排序方式已经很难得到满意的效果。这种情况下为了解决业务问题将不得不打上各种补丁导致代码难以维护。 因此我们决定对排序模块进行重构Learning to Rank无疑是一个好的选择。
面临的挑战样本构造、模型调优
Learning to RankLTR是用机器学习的方法来解决检索系统中的排序问题。业界比较常用的模型是gbrankloss方案用的最多的是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函数的一个平移。 差值越大loss_diff越大惩罚力度越大相应的下一轮迭代该特征的分裂收益也就越大。
调loss后重新训练模型测试集MRR在初版模型的基础又提升了2个点。同时历史排序case的解决比例从40%提升到70%效果明显。
写在最后 Learning to Rank技术在高德搜索建议应用后使系统摆脱了策略耦合、依靠补丁的规则排序方式取得了明显的效果收益。gbrank模型上线后效果基本覆盖了各频次query的排序需求。
目前我们已经完成了人群个性化、个体个性化的建模上线并且正在积极推进深度学习、向量索引、用户行为序列预测在高德搜索建议上的应用。
原文链接 本文为云栖社区原创内容未经允许不得转载。