Learn to Rank
排序學習主要用於搜索引擎,推薦系統等領域。算法
對於傳統的排序算法,通常只能根據少許特徵,而後經過人爲設定的規則,來進行文檔的全量排序。網絡
然而對於排序涉及大量的特徵,並且這些特徵難以人爲的編輯規則來進行文檔和文檔之間的比較,這就出現了排序學習。機器學習
排序學習經過以特徵和文檔爲輸入,經過機器學習或者神經網絡的方法,最終輸出對於某個查詢,每一個文檔的相關度分數,進而實現能夠進行對文檔的排序。函數
範式
- 查詢集合Q = {q1, q2 .... qn}
- 文檔集合D
- 與第 i 個查詢 qi 相關的文檔Di = {d1 .... dm}
- 獲得結果:相關性分數 y = {y1 ... ym}
類別
PointWise
優勢
缺點
- 對於同一label級別的文檔,沒法進行排序,致使某些不重要的文檔排在前面
- 訓練的時候僅考慮了當前文檔的特徵,忽略了本文檔與其餘文檔的差異訓練
PairWise
輸出的0/1表明doc1是否大於doc2學習
優勢
能夠直接應用之後的分類算法優化
缺點
- 僅考慮了文檔對的相對次序,很難推出列表的全序
- 若是前面的文檔對判斷錯誤,會直接致使後面的文檔對判斷錯誤
RankNet
ListWise
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爲梯度的損失函數3d
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) - deltaNDCG(i<j)