Learning to rank在淘宝的应用
Learning to rank在淘寶的應用
作者:仁重?(一淘及搜索事業部-搜索技術-算法技術-主搜索與商城)
????
前言
????排序中我們需要解決的是什么樣的問題?怎么樣把用戶想要的,好的商品排到前面;怎樣調節不同賣家的流量;給質量好,但價格不便宜的商品更多的流量,來引導市場更加規范。需要解決的問題很復雜,但是排序結果好壞難以評判。
????對于搜索結果好不好的問題,通常的做法是把搜索結果的每一條分為5類:
????bad(差)
????fair(一般)
????good(好)
????excellent(非常好)
????perfect(完美)。
????對搜索的結果進行人工評價,并且對這5類計算ndcg,來判斷排序結果的好壞。
????這是非常粗放的一個評判標準,并且需要大量的人工對排序結果進行標注。這種方法費時費力并且人對搜索結果的評價很難標準化。所以對于新加入的特征做一個新的排序,在實際應用中,我們通常會采用AB test的方法在線上進行對比測試。這樣繞開的對搜索結果的直接判斷,間接的通過用戶反饋來評價新排序的好壞。
????回到問題的本質,我們需要知道排序結果的好壞,整體的好壞,是很難得到的,但是對于一對(pair)商品的好壞,即一個寶貝是否比另外一個寶貝好,我們是比較容易判斷的。如果構造出和線上分布基本一致的寶貝對集合,只要在這些集合上的商品對排序和我們期望的是一致的,就可以認為排序是較好的,這樣把商品的好壞和排序的好壞定義更加明確,更有利于我們去優化排序。有了商品對的好壞,我們在淘寶的搜索上使用learning to rank技術來實現了對商品對(pairwise)優化來優化排序。
????Learning to rank(ltr)中文翻譯為排序學習,用機器學習的方法來解決檢索系統中的排序問題。當特征大到一定的規模,或排序的分類到了一定的規模,再使用人工規則就很難達到一個較好的狀況,這種情況就需要使用機器學習的方法來幫助我們優化排序模型。
?
為什么要在淘寶使用learning to rank。
?
????首先得簡單介紹一下淘寶搜索的的發展歷史,從數據庫到搜索引擎,解決了商品量較大的問題;那時商品排序完全依靠下降時間來排序,隨著商品量的不斷增加,排序后的效果越來越差,就先后加入了類目相關性與文本相關性,商品人氣分;再后來為了平衡賣家流量,加入了賣家分;再后來為了更好的用戶體驗,加入了個性化,圖像質量等因素。
?
????類似類目相關性,文本相關性在搜索排序模型中都稱之為特征,每個特征會根據不同的模型或者規則生產一個0~1的分數,這些分數通過線性加權的方式對最終的排序進行作用,這些特征的權重通過不斷的進行AB test的方法找到較優的一組。
?
????一步一步走來,現在淘寶搜索的排序模型有他一定的必然性。但是,每次模型的修改權重參數都需要進行較長時間的調整,需要結合人工的經驗預估出一些比較合理的參數,再不斷的通過用戶反饋進行測試,找到較優的一組參數。這樣做有以下缺點:
????1.測試時間較長。
????2.測試有效,一般可能不能達到一個最優化的效果。
????3.在不斷的優化過程中,對已有特征參數的調整常常被遺漏。
????所以,我們通過learning to rank的方法,通過機器學習模型來自動調整這些參數。項目命名為Jazz,定位是自動調整特征權重參數,但不產生新特征。之后新加入的特征,都通過這個模型來確定它最優的參數。
?
優點,缺點,難點
?
淘寶的ltr
????淘寶的ltr主要有以下幾個特殊之處,
?
????一、一般來說,ltr的特征都是很基礎的特征,例如一個網頁排序中經常會被提到的特征有:
?
????與一般意義上的ltr不同,在淘寶已經積累了不少較強的統計意義的特征。這些用到的特征經過不斷優化,在淘寶已有的排序上表現的已經較好。我們再對齊進行優化,就不需要像網頁排序那樣從頭開始發掘特征,我們在這個基礎上來做ltr,使用的特征自然而然是原來使用的這些特征,對他們在加權參數上進行調整。更像是對排序參數的優化。(當然這只是第一步,之后會根據效果來新增特征。)
????
????二、使用統計的用戶反饋的行為來代替人工標注。很多ltr的論文都提到需要人工將排序的相關性分為bad, fair, good,excellent, perfect五檔,這個是耗時耗力的工作,并且由人工來標注,標準很難以統一,所以選用用戶的點擊與購買等行為來代替對商品的相關性及商品優劣的判斷。
?
對特征參數的優化,從原始的手工調整,到了自動化的學習。這個變化如下圖所示,
?
????原有的商品排序系統參數產生流程如下圖中綠色箭頭所示,新的流程如紅色所示。減少人為的因素,并且可以在線下評估效果,節省了線上ABtest的反復測試的時間,并且是可以達到最優化參數的目的。
?
總體的架構如下:
使用pairwise的方法來生產訓練數據
????搜索的目標是相對比較多的,既需要考慮商品購買轉化率,又需要兼顧商品點擊率等,不適用pointwise這樣目標單一的方法,所以我們選擇了pairwise來做訓練數據。Pairwise的難點在于訓練數據的構建,當然后續也在實驗listwise的一些方法,以及pairwise和listwise結合的方法,以及boost的方法。
?
大多數論文上都會提到幾種pairwise的方法,
????1.Click> Skip Above
????2.LastClick > Skip Above
????3.Click> Earlier Click
????4.LastClick > Skip Previous
????5.Click> No-Click Next
?
????Click>SkipAbove是指,在搜索結果頁點擊的商品,好于在點這個商品之前瀏覽過的商品,即排序排在這個商品前面的并且未被點擊的商品。前4個方法都是類似的思想,不過對于像淘寶這樣相對成熟的排序系統來說,這些方法并不適用,因為這樣選出的pair樣本與排序的分數恰好相反,原始的排序順序,將各個特征分數較高的排在前面,而通過Click > SkipAbove選出的pair集合,都是表述分數低的比分數高的好,可以說都是反例,這樣會導致模型訓練結果所有的特征權重都為負。
????
????所以我們選擇pair的方法是通過用戶的點擊與購買反饋來生產表示商品好壞的pair對。
?
使用點擊反饋來形成pair
????統計同query下,每個商品的點擊率,將點擊率平滑后,將點擊率相差一定以上的商品形成pair。
?
使用無點擊的數據來形成pair
????在樣本中加入一部分通過原始排序來生成的pair,這樣的目的是使排序的參數變化不至于太劇烈,形成一些意想不到的badcase。
這部分的樣本根據展示日志中原始商品的排序,第1個商品好于第20個商品,第2個商品好于第21個商品,以此類推。
?
樣本的混合與分層抽樣
?
?
?
樣本產生之后
?
1.?按照線上參數進行排序計算NDCG。
????a)??NDCG計算有點擊的商品相關性是1,有成交的商品相關性為2
????b)??對pvlog進行重排時,重排范圍只在當前頁面內,不考慮重排后,第2頁的商品排到第一頁的情況。
????c)??DCG[i] = DCG[i-1] + G[i]/log_2?〖(i+1)〗,i是排序的位置,G[i]是在第i個位置上商品的相關性。IDCG為按相關性排序后的DCG
????d)??NDCG=DCG/IDCG
?
2.?調整樣本混合比例,或者樣本選擇策略。并且重新進行訓練。
3.?按訓練好的模型的參數對pvlog進行重新排序。計算NDCG
4.?和按照線上參數排序的NDCG進行比較,看是否有增加或者減少,和增加的程度,來判斷這次調整的收益。
5.?并且通過找到ndcg下降的query,分析下降的原因。
總結
以上是生活随笔為你收集整理的Learning to rank在淘宝的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 京东DNN Lab首席科学家:用深度学习
- 下一篇: eclipse 快捷键大全,eclips