XGBoost在携程搜索排序中的应用
一、前言
?
?
在互聯(lián)網(wǎng)高速發(fā)展的今天,越來越復(fù)雜的特征被應(yīng)用到搜索中,對于檢索模型的排序,基本的業(yè)務(wù)規(guī)則排序或者人工調(diào)參的方式已經(jīng)不能滿足需求了,此時(shí)由于大數(shù)據(jù)的加持,機(jī)器學(xué)習(xí)、深度學(xué)習(xí)成為了一項(xiàng)可以選擇的方式。
?
攜程主站搜索作為主要的流量入口之一,是用戶瀏覽信息的重要方式。用戶搜索方式多樣、對接業(yè)務(wù)多樣給攜程主站搜索(下文簡稱大搜)帶來了許多挑戰(zhàn),如:
?
-
搜索方式多樣化
-
場景多樣化
-
業(yè)務(wù)多樣化
-
意圖多樣化
-
用戶多樣化
?
為了更好滿足搜索的多樣化,大搜團(tuán)隊(duì)對傳統(tǒng)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)方向進(jìn)行探索。
?
說起機(jī)器學(xué)習(xí)和深度學(xué)習(xí),是個(gè)很大的話題,今天我們只來一起聊聊傳統(tǒng)機(jī)器學(xué)習(xí)中XGBoost在大搜中的排序?qū)嵺`。
?
二、XGBoost探索與實(shí)踐
?
聊起搜索排序,那肯定離不開L2R。Learning to Rank,簡稱(L2R),是一個(gè)監(jiān)督學(xué)習(xí)的過程,需要提前做特征選取、訓(xùn)練數(shù)據(jù)的獲取然后再做模型訓(xùn)練。
?
L2R可以分為:
?
-
PointWise
-
PairWise
-
ListWise
?
PointWise方法只考慮給定查詢下單個(gè)文檔的絕對相關(guān)度,不考慮其他文檔和給定查詢的相關(guān)度。
?
PairWise方法考慮給定查詢下兩個(gè)文檔直接的相對相關(guān)度。比如給定查詢query的一個(gè)真實(shí)文檔序列,我們只需要考慮任意兩個(gè)相關(guān)度不同的文檔直接的相對相關(guān)度。相比PointWise,PairWise方法通過考慮任意兩個(gè)文檔直接的相關(guān)度進(jìn)行排序,有一定的優(yōu)勢。
?
ListWise直接考慮給定查詢下的文檔集合的整體序列,直接優(yōu)化模型輸出的文檔序列,使得盡可能接近真實(shí)文檔序列。
?
下面先簡單介紹XGBoost的應(yīng)用流程:
?
?
XGBoost是一個(gè)優(yōu)化的分布式梯度增強(qiáng)庫,增強(qiáng)樹模型,靈活便捷。但對高維度的稀疏矩陣支持不是很好,另外調(diào)參確實(shí)有點(diǎn)麻煩。
?
三、特征工程實(shí)踐
?
?
在傳統(tǒng)機(jī)器學(xué)習(xí)下,特征工程顯的尤為重要,不論后續(xù)模型工程做的多好,如果前期的特征工程沒有做好,那么訓(xùn)練的結(jié)果不會(huì)有多好。所以對特征處理的總體邏輯如下:
?
?
3.1 前期數(shù)據(jù)準(zhǔn)備
?
首先,我們需要進(jìn)行需求分析,就是在什么場景下排序。假設(shè)我們需要針對搜索召回的POI場景進(jìn)行排序,那么需要確定幾件事情:
?
-
數(shù)據(jù)來源:搜索的數(shù)據(jù)就是各種POI,然后需要確定我們有哪些數(shù)據(jù)可以用來排序,比如最近半年的搜索POI的曝光點(diǎn)擊數(shù)據(jù)等;
-
特征梳理:需要梳理影響POI排序的因子,例如查詢相關(guān)特征、POI相關(guān)特征、用戶相關(guān)特征等;
-
標(biāo)注規(guī)則制定:每次搜索召回的每個(gè)POI,會(huì)有曝光和點(diǎn)擊數(shù)據(jù),簡單點(diǎn),比如:我們可以將曝光位置作為默認(rèn)標(biāo)注分,當(dāng)有點(diǎn)擊,就將標(biāo)注分在原來的基礎(chǔ)上加一;
-
數(shù)據(jù)埋點(diǎn)/數(shù)據(jù)抽取:這是兩種方式,可以根據(jù)實(shí)際需求進(jìn)行選擇;
?
-
-
數(shù)據(jù)埋點(diǎn):可以在線上實(shí)時(shí)生成特征,然后進(jìn)行日志埋點(diǎn),離線分析的時(shí)候可以直接從日志中拉取即可,這種方式,需要提前進(jìn)行埋點(diǎn)。
-
數(shù)據(jù)抽取:可以通過大數(shù)據(jù)平臺(tái)拉取歷史數(shù)據(jù),然后進(jìn)行離線計(jì)算抽取所需特征,這種方式雖然慢點(diǎn),但是可以拉取歷史數(shù)據(jù)進(jìn)行分析。
-
?
3.2 特征處理
?
前期的數(shù)據(jù)準(zhǔn)備工作完成了,接下來可以開始看看數(shù)據(jù)質(zhì)量了。
?
-
查看缺失值:絕大多數(shù)情況下,我們都需要對缺失值進(jìn)行處理;
-
特征歸一化處理:監(jiān)督學(xué)習(xí)對特征的尺度非常敏感,因此,需要對特征歸一化用來促進(jìn)模型更好的收斂;
-
噪聲點(diǎn)處理:異常的數(shù)據(jù)會(huì)影響模型預(yù)測的正確性;
-
特征連續(xù)值分析:分析特征的值分布范圍是否均勻;
-
特征之間的相關(guān)性分析;
?
?
通過連續(xù)值特征可以分析每個(gè)特征值的大致分布范圍,有利于對相關(guān)特征進(jìn)行數(shù)據(jù)補(bǔ)充或者重新篩選。
?
?
通過特征相關(guān)性的分析,如上我們看到幾個(gè)特征之間有很高的相關(guān)性,那么可以幫助我們做特征組合或者特征篩選等等方面決策。
?
四、模型工程實(shí)踐
?
?
4.1 評(píng)估指標(biāo)制定
?
在搜索業(yè)務(wù)中,考慮的有以下兩種情況:
?
-
看重用戶搜索的成功率,即有沒有點(diǎn)擊;
-
看重頁面第一屏的曝光點(diǎn)擊率;
?
在文章開頭提到的L2R的三種分類中,我們在XGBoost參數(shù)objective配置“rank:pairwise”,同時(shí)使用搜索系統(tǒng)常用的評(píng)估指標(biāo)NDCG (Normalized Discounted Cumulative Gain) 。
?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
4.2 初始模型訓(xùn)練
?
前期通過基礎(chǔ)的模型訓(xùn)練,可以初步得出一些初始參數(shù)和相關(guān)特征的重要度等相關(guān)信息。
?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
- ?
?
- ?
- ?
- ?
- ?
- ?
?
?
4.3 模型調(diào)優(yōu)五部曲
?
通過上述基礎(chǔ)的模型訓(xùn)練,我們可以得出相關(guān)的初始參數(shù),進(jìn)入到五部曲環(huán)節(jié),XGBoost參數(shù)調(diào)節(jié)基本為五個(gè)環(huán)節(jié):
?
-
Step 1:選擇一組初始參數(shù);
-
Step 2:改變 max_depth 和 min_child_weight;
-
Step 3:調(diào)節(jié) gamma 降低模型過擬合風(fēng)險(xiǎn);
-
Step 4:調(diào)節(jié) subsample 和 colsample_bytree 改變數(shù)據(jù)采樣策略;
-
Step 5:調(diào)節(jié)學(xué)習(xí)率 eta;
?
例如我們在通過step1,可以觀察弱分類數(shù)目的大致范圍,看看模型是過擬合還是欠擬合。
?
?
通過step2調(diào)整樹的深度和節(jié)點(diǎn)權(quán)重,這些參數(shù)對XGBoost性能影響最大,我們簡要概述他們:
?
-
max_depth:樹的最大深度。增加這個(gè)值會(huì)使模型更加復(fù)雜,也容易出現(xiàn)過擬合,深度3-10是合理的;
-
min_child_weight:正則化參數(shù)。如果樹分區(qū)中的實(shí)例權(quán)重小于定義的總和,則停止樹構(gòu)建過程。
?
可以通過網(wǎng)格搜索發(fā)現(xiàn)最佳結(jié)果,當(dāng)然也可以通過其他方式。
?
?
我們看到,從網(wǎng)格搜索的結(jié)果,分?jǐn)?shù)的提高主要是基于max_depth增加。min_child_weight稍有影響的成績,但是min_child_weight = 6會(huì)更好一些。
?
4.4 模型離線評(píng)估
?
通過調(diào)優(yōu)五部曲,訓(xùn)練,生成最終的模型之后,就要進(jìn)入離線評(píng)估階段。離線拉取線上生產(chǎn)用戶的請求,模擬生產(chǎn),對模型預(yù)測的結(jié)果進(jìn)行檢驗(yàn),根據(jù)在之前評(píng)估指標(biāo)制定環(huán)節(jié)所提到的用戶點(diǎn)擊率和第一屏曝光點(diǎn)擊率,比對線上用戶點(diǎn)擊產(chǎn)品的位置和模型預(yù)測的位置,同時(shí)對比兩者之間的第一屏曝光點(diǎn)擊率。
?
4.5 模型預(yù)測
?
通過AB實(shí)驗(yàn),對模型進(jìn)行線上預(yù)測,實(shí)時(shí)監(jiān)測效果評(píng)估,方便之后的迭代和優(yōu)化。
?
五、總結(jié)與展望
?
?
-
對于傳統(tǒng)的機(jī)器學(xué)習(xí),最重要的一步是要做好需求分析,評(píng)估這種算法是否能有效解決該問題,否則得不償失;
?
-
前期的特征工程非常關(guān)鍵。通過多次的摸索發(fā)現(xiàn),特征沒有選取好,或者數(shù)據(jù)覆蓋不全,標(biāo)注沒做好,導(dǎo)致后續(xù)模型不論怎么調(diào)優(yōu),都無法達(dá)到預(yù)定的效果;
?
-
選定目標(biāo)后,可以先嘗試一些優(yōu)秀的開源工具、優(yōu)秀的數(shù)據(jù)分析工具。直觀的圖表能幫助你做更好的決策,優(yōu)秀的算法庫,能避免重復(fù)造輪子;
?
-
單一的算法無法滿足搜索排序應(yīng)用場景,多模型融合以及深度學(xué)習(xí)方向需要做更深入的探索與實(shí)踐;
總結(jié)
以上是生活随笔為你收集整理的XGBoost在携程搜索排序中的应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里 Goldeneye 四个环节落地智
- 下一篇: kafka读写速度快的原因