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