1. 程式人生 > >機器學習之排序學習

機器學習之排序學習

# Learn to Rank 排序學習主要用於搜尋引擎,推薦系統等領域。 對於傳統的排序演算法,一般只能根據少量特徵,然後通過人為設定的規則,來進行文件的全量排序。 然而對於排序涉及大量的特徵,而且這些特徵難以人為的編輯規則來進行文件和文件之間的比較,這就出現了排序學習。 排序學習通過以特徵和文件為輸入,通過機器學習或者神經網路的方法,最終輸出對於某個查詢,每個文件的相關度分數,進而實現可以進行對文件的排序。 ## 正規化 - 查詢集合Q = {q1, q2 .... qn} - 文件集合D - 與第 i 個查詢 qi 相關的文件Di = {d1 .... dm} - 得到結果:相關性分數 y = {y1 ... ym} ![l2r-model](http://upload-images.jianshu.io/upload_images/24077087-40b6147e6d8bcddf.PNG) ## 類別 ### PointWise ![l2r-pointwise](http://upload-images.jianshu.io/upload_images/24077087-d4ab1dde783018c9.PNG) ![L2R-pointwise-rank](http://upload-images.jianshu.io/upload_images/24077087-a5af8be1d46542cd.PNG) #### 優點 - 可以直接利用現有的迴歸和分類的理論和演算法 #### 缺點 - 對於同一label級別的文件,無法進行排序,導致某些不重要的文件排在前面 - 訓練的時候僅考慮了當前文件的特徵,忽略了本文件與其他文件的差別訓練 ### PairWise ![l2r-pairwise-model](http://upload-images.jianshu.io/upload_images/24077087-5e81b4df7bf52aab.PNG) **輸出的0/1代表doc1是否大於doc2** #### 優點 可以直接應用以後的分類演算法 #### 缺點 - 僅考慮了文件對的相對次序,很難推出列表的全序 - 如果前面的文件對判斷錯誤,會直接導致後面的文件對判斷錯誤 #### RankNet ![L2R-pairwise](http://upload-images.jianshu.io/upload_images/24077087-c51a1c7085e75fdd.PNG) ### ListWise ![i2r-listwise](http://upload-images.jianshu.io/upload_images/24077087-b722cb28bb55aaad.PNG) #### NDCG理解 - rel:查詢q與文件的相關度 - CG:了耳機增益,在top-n下,rel的累加 - DCG:折損累計增益,在top-n下,rel乘以一個隨位置的衰減值,表示越靠前的,權重越大,越靠後的,影響越小 - IDCG:理想的DCG值,一般為訓練預期結果的DCG值 - NDCG:預測的DCG/IDCG ##### 模型輸出的DCG值 | i | reli | log2(i+1) | reli /log2(i+1) | | ---- | ---- | --------- | --------------- | | 1 | 3 | 1 | 3 | | 2 | 2 | 1.58 | 1.26 | | 3 | 3 | 2 | 1.5 | | 4 | 0 | 2.32 | 0 | | 5 | 1 | 2.58 | 0.38 | | 6 | 2 | 2.8 | 0.71 | ##### IDCG:(通過排名rel值得到) | i | reli | log2(i+1) | reli /log2(i+1) | | ---- | ---- | --------- | --------------- | | 1 | 3 | 1 | 3 | | 2 | 3 | 1.58 | 1.89 | | 3 | 3 | 2 | 1.5 | | 4 | 2 | 2.32 | 0.86 | | 5 | 2 | 2.58 | 0.77 | | 6 | 1 | 2.8 | 0.35 | ##### 非連續性 可以看出,IDCG是固定的,對DCG的優化過程,DCG的值呈現跳躍性改變,因此DCG是非連續函式,這導致以NDCG為代表的損失函式,很難使用現代的優化演算法來優化。 ##### lambda梯度 由於NDCG的非連續性,這就引入了lambda為梯度的損失函式 #### lambda損失 - 通過定義loss的梯度,不需要通過求導,而是直接求得lambda的梯度,然後通過反向傳播到上層的model,優化模型的引數,這樣就避免了最後的loss是非連續函式不可導的缺點 - 最後梯度=lambda(i) - lambda>0,則趨於上升 - lambda<0,則趨於下降 ##### lambda計算 - 計算DCG - 計算IDCG - 計算deltaNDCG = |NDCG - NDCG(swap(i, j))| - lambda(i) = deltaNDCG(i>j) - deltaN