Learning to Rank:X-wise
LTR(Learning to Rank)學習排序已經被廣泛應用到文本挖掘、搜索推薦系統的很多領域,比如IR中排序返回的相似文檔,推薦系統中的候選產品召回、用戶排序等,機器翻譯中排序候選翻譯結果等等。
排序學習是搜索推薦系統、計算廣告領域的核心方法。同時排序結果的好壞,在搜索推薦任務中很大程度直接影響用戶點擊、轉化、用戶體驗和收入等。
在《推薦系統技術演進趨勢:重排篇》一文中,作者張俊林介紹了在重排環節,推薦系統里Learning to Rank做排序,我們知道常見的有三種優化目標:Point Wise、Pair Wise和List Wise。最簡單的損失函數定義是Point-wise,就是輸入用戶特征和單個物品特征,對這個物品進行打分,物品之間的排序,就是誰應該在誰前面,不用考慮。而Pair-wise損失在訓練模型時,直接用兩個物品的順序關系來訓練模型,就是說優化目標是物品A排序要高于物品B,類似這種優化目標。 List-wise的Loss更關注整個列表中物品順序關系,會從列表整體中物品順序的角度考慮,來優化模型。
上面我們對Point-wise、Pair-wise、List-wise這三種方式,做了一個簡單的介紹。但Permutation-wise是什么呢?其實,十方同學在《排序(rank)后重排(re-rank)》一文中,為我們介紹了Permutation-wise的文章,文章中給出了一個真實的案例,如下圖。
這個圖給了個真實的案例,一個User,給他展示了A、B、C就不會買任何item,給他展示了B、A、C就后購買A。
論文《Revisit Recommender System in the Permutation Prospective》給了個例子,如果把貴的商品B放前面,用戶就會覺得A便宜,值得購買。好像很有道理,所以我們看到,如果是list-wise的模型給排好序的的B->A->C分別預估一個分(0.38, 0.40, 0.36),然后按照這個分重排序,就會得到A->B->C,用戶就不會購買了。
如果我們提供多個候選排列隊列: A->B->C和B->A->C,然后把list-wise的分加起來,得到不同排列的分,那就會得到最優解,B->A->C。但是一般情況下,需要重排序的item可能有上百個,上百個item做排列,再過list-wise模型預估,這是不現實的,于是論文提出了兩階段的重排序框架PRS(Permutation Retrieve System),分別是PMatch階段和PRank階段,整體架構如下圖所示:
關于具體PMatch和PRank的細節,感興趣的可以直接閱讀《排序(rank)后重排(re-rank)》一文。
Pair-wise的方法是將同一個查詢中兩個不同的Item作為一個樣本,主要思想是把rank問題轉換為二值分類問題。對于同一Query的相關文檔集中,對任何兩個不同label的文檔,都可以得到一個訓練實例(di,dj),如果di>dj則賦值+1,反之-1,于是我們就得到了二元分類器訓練所需的訓練樣本了。
常用Pair-wise實現有SVMRank、RankBoost、RankNet等。
- 輸出空間中樣本是 pairwise preference;
- 假設空間中樣本是二變量函數;
- 輸入空間中樣本是同一 query 對應的兩個 doc和對應 query構成的兩個特征向量;
- 損失函數評估 doc pair 的預測 preference 和真實 preference 之間差異;
- 只考慮了兩篇文檔的相對順序,沒有考慮他們出現在搜索結果列表中的位置;即:Pair-wise方法僅考慮了doc-pair的相對位置,損失函數還是沒有模型到預測排序中的位置信息;
- 對于不同的查詢相關文檔集的數量差異很大,轉換為文檔對后,有的查詢可能只有十幾個文檔對,而有的查詢可能會有數百個對應的文檔對,這對學習系統的效果評價帶來了偏置;
- Pair-wise對噪聲標注更敏感,即一個錯誤標注會引起多個doc-pair標注錯誤;
Point-wise排序是將訓練集中的每個Item看作一個樣本獲取rank函數,主要解決方法是把分類問題轉換為單個item的分類或回歸問題。就是輸入用戶特征和單個Item特征,對這個物品進行打分,物品之間的排序,就是誰應該在誰前面,不用考慮。Point-wise方法很好理解,即使用傳統的機器學習方法對給定查詢下的文檔的相關度進行學習,比如CTR就可以采用PointWise的方法學習,但是有時候排序的先后順序是很重要的,而Point-wise方法學習到全局的相關性,并不對先后順序的優劣做懲罰。
明顯這種方式無論是訓練還是在線推理,都非常簡單直接效率高,但是它的缺點是沒有考慮物品直接的關聯,而這在排序中其實是有用的。
常用Point-wise實現基于回歸的算法、基于分類的算法、基于有序回歸的算法等。
- 使用傳統的機器學習方法對給定查詢下的文檔的相關度進行學習;
- 輸入空間中樣本是單個document和對應query構成的特征向量;
- 輸出空間中樣本是單個documen和對應query的相關度;
- 假設空間中樣本是打分函數,損失函數評估單個 doc 的預測得分和真實得分之間差異。
- Point-wise類方法并沒有考慮同一個query對應的documents間的內部依賴性,完全從單文檔的分類角度計算,沒有考慮文檔之間的相對順序;
- 和Pair-wise類似,損失函數也沒有模型到預測排序中的Position位置信息;
List-wise排序是將整個item序列看作一個樣本,通過直接優化信息檢索的評價方法和定義損失函數兩種方法來實現。它是直接基于評價指標的算法非直接基于評價指標的算法。在推薦中,List-wise損失函數因為訓練數據的制作難,訓練速度慢,在線推理速度慢等多種原因,盡管用的還比較少,但是因為更注重排序結果整體的最優性,所以也是目前很多推薦系統正在做的事情。
和其他X-wise方法比較,List-wise方法往往更加直接,它專注于自己的目標和任務,直接對文檔排序結果進行優化,因此往往效果也是最好的。Listwise常用方法有AdaRank、SoftRank、LambdaMART、LambdaRank等。
- 輸入空間中樣本是同一query對應的所有documents構成的多個特征向量;
- 輸出空間中樣本是這些documents和對應query的相關度排序列表或者排列;
- 假設空間中樣本是多變量函數,對于documents得到其排列,實踐中,通常是一個打分函數,根據打分函數對所有documents的打分進行排序得到documents相關度的排列;
- listwise 類相較 pointwise、pairwise 對 ranking 的 model 更自然,解決了 ranking 應該基于 query 和 position 問題。
- 一些ranking算法需要基于排列來計算 loss,從而使得訓練復雜度較高,如 ListNet和 BoltzRank。
- 位置信息并沒有在loss中得到充分利用,可以考慮在ListNet和ListMLE loss中引入位置折扣因子。
總結
以上是生活随笔為你收集整理的Learning to Rank:X-wise的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一个端到端模型GraphDR实现多样化的
- 下一篇: 没什么是一次排序解决不了的,如果有,那就