往期回顧:
學習排序,英文是learning to rank,縮寫LTR,最近我之所以要看這塊內容,主要是因為無論是搜索系統還是推薦系統,都是分為「召回」和「排序」兩個階段,而排序階段作為其中一個重要的階段一致被人們關注,但是很多視角其實只是關注在CTR預估等口徑比較小的方面,私以為不夠,所以就稍微探了一下更大口徑的問題——學習排序,經過一些初步的學習,感覺有了一定的理解,此處給大家簡單科普一波,讓大家對這個領域有一定的了解,同時,也希望和大家交流~
什麼是LTR此處的排序,不是數據結構與算法之中的排序,實質上是在探索一種在特定問題下,尤其是特徵或者因素複雜的情況下,最合適的一種排序標準,這個標準是基於模型計算的。
來看個例子,電影推薦系統中,我們已經為用戶A召回了10部電影,這10部召回的渠道不同,有的是基於協同過濾得到的,也有近期的熱門電影等等,不論是召回渠道,此時都面臨一個問題,就是把召回池中的內容,根據特定的順序排列展示在用戶面前,這裡涉及了用戶體驗、商家體驗等多角度因素,而這些因素也要從很多特徵體現。再舉個例子,對於用戶輸入的一個query,系統召回了很多不同的內容,可以是直接匹配得到的,可以是同義詞轉換得到的等等,召回得到的內容很多,我們該如何進行排序,這裡要考慮query的匹配度,要考慮用戶的實際深層需求等。
在上述兩個例子下,我們都要尋求合適的方法來完成這個排序,那麼學習排序其實給了我們很大的空間。現在給出一個比較可靠的學習排序定義:
Methods that use machine learning technologies to solve the problem of ranking.
這樣,把推薦系統中提到的CTR、CVR包含進來,甚至還能夠把搜索領域的排序之類的都涵蓋進來,甚至包括可能要做成類似推薦的模式的問題,例如在翻譯軟體中會給出的幾個翻譯備選方案、搜索預想等等。
當然的,說一個未來會有點擔心的點,什麼問題都用機器學習其實會為未來的進步設限,希望新的研究能多出點新的方法而不要受到現行機器學習方法的限制,不過就結果來看,目前機器學習確實處於統治地位。
LTR模型的核心思路LTR模型的核心思路其實就要歸結到LTR的核心了——機器學習,如上述定義所示,因此實質上就是抽象好問題然後套用到機器學習模型中即可。下面是概括的比較好的一個LTR框架。
這個圖是不是覺得在哪裡見過?我來告訴你在哪裡見過吧。《統計學習方法》,第一版19頁,第二版第7頁。
其實就能看到LTR的本質其實就是機器學習,用訓練數據進行訓練,得到模型後作用有具體的排序系統中,對每個新來的數據進行預測排序。
既然機器學習大家都已經知道了(默認大家就是知道怎麼回事哈,不知道的後臺回復「深度學習入門」,告訴你入門路線),那麼現在的問題就是怎麼定義這個排序問題,使得我們能夠使用機器學習,定義這個排序問題,如果把目光放在輸入端,即x的內容,是重在研究單個點的重要性,還是研究兩者的對比優劣,還是對整個列表(召回池)的排序情況,這就引出了3大學習排序模型派系。
LTR的三大方法思路可以分為pointwise、pairwise和listwise。
pointwise這是目前最為流行的,代表方法就是現在比較常見的一系列CTR模型,對於一堆待排序的item,每個分別將其特徵輸入,會得到一個打分,這個打分代表著這個東西的重要程度,最後根據每個item的得分進行排序,那麼這個y其實就被定義為諸如點擊率之類的值,那麼最後的排序結果,其實就是根據用戶的點擊率來排序,當然在搜索領域,可以用相關性的標註來代替,即query和doc之間的相關性。
說的有點玄乎,我們來看一個基於回歸的pointwise損失函數,大家就能理解了。
說白了,就是構造一個模型,使得他儘可能去接近這個標籤,而這個標籤其實就是體現相似度、用戶是否點擊之類的問題。
但是,這種直接的方法,其實會有一些缺點:
pairwisepairwise顧名思義,其實就是考慮兩者的相對關係了,也就是在構造機器學習模型時,輸入應該是兩個item的特徵,最終的輸出應該是兩個item的大小關係,來看公式可能更加抽象清楚。
對於兩個item,u和v,其實兩者的排序只有兩種,u>v和v>u(不會平行,排序必有高下!),因此我們去預測實質上就是預測這兩個值:P(Xu>Xv)和P(Xu<Xv),那麼現在我們來看看這個損失函數:
h是我們構建的機器學習模型,y是標籤,兩個P是概率,但是在機器學習模型下,就是預測的概率結果了,即h(u,v)=P(Xu>Xv),h(v,u)=P(Xv>Xu),雖然從直觀的概率角度Xu>Xv和Xu<Xv是對立事件,但是在機器學習的預測中,到了預估值層面,這個計算可就不敢保證了,因此在損失函數計算的時候我們要預估雙向,這樣就能夠體現u和v的雙向關係,從而體現pairwise。
listwiselistwise在pairwise的基礎上,不僅要考慮兩者之間的關係,而是嘗試去考慮整個列表之間的關係,即輸入端,我們放入的是所有待排序的item,而在輸出端,實質上的輸出是其最後的排序,而這個排序實質上是基於內部模型的一個打分系統得到的,有意思的是,這個打分系統裡面,不僅會考慮單個被打分item,還會考慮所有輸入item的綜合信息,這樣這個排序就能夠體現整個列表下的特性。
有關損失函數這塊,我真沒有看到非常好的總結起來的方法思路,各個模型都有自己的損失和方法,此處暫時不展開說,有興趣的可以進一步了解。
來兩個簡單的例子講解都是我之前講過的吧,這次歸結到LTR裡面來談,大家更好的理解,這兩個都是pointwise的例子,這裡只談他在LTR中的意義,對具體原理不再贅述。
電影推薦之前手把手搞推薦一連幾篇和大家講過一個評分預估模型是怎麼從無到有做起來的,想想還有點小刺激,錯過的同學可以直接傳送過去看看這個系列哈。
R&S[11] | 手把手搞推薦[0]:我的推薦入門小結
R&S[12] | 手把手搞推薦[1]:數據探索
R&S[13] | 手把手搞推薦[2]:特徵工程指南
R&S[14] | 手把手搞推薦[3]:數據集存取思路
R&S[15] | 手把手搞推薦[4]:打分預估模型
R&S[16] | 手把手搞推薦[5]:評價指標設計
R&S[17] | 手把手搞推薦[6]:回顧整體建模過程
最後這裡我是利用了很多特徵,做了一個打分預估模型,判斷用戶對該電影的喜愛程度,最後是希望用這個打分情況來為用戶進行推薦排序,沒錯,排序的標準是我用LR模型預估的這個打分,越高分,我會把這個放在越前面,所有抽象來看,這就是一個典型的pointwise思路的模型,每個模型判斷一個item,經過預測後得到最終結果,根據每個item的結果從而完成排序。
query-doc相似度這個其實前面我也有文章提到,傳送門在這裡。
R&S[18] | SIGIR2018:深度學習匹配在搜索與推薦中的應用NLP.TM[15] | 短文本相似度-CNN_SIM
搜索中非常要考慮的一個問題就是query要和你給出的doc要儘可能匹配甚至一致,query是用戶表達當前搜索需求的重要接口,因此我們就是需要考慮兩者是否相關匹配,才能給出我們的搜索排序結果。
在我之前這篇文章的一系列闡述中,其實就在考慮「何為匹配」,那麼我們對于越「匹配」的doc,其實就應該擺在前面,數據的標籤只有0和1,但是預測肯定就是一個[0,1]閉區間的結果,根據這個預測,我們也可以進行排序,和上面的電影排序類似,實質上就是一種基於某種標準設置的學習排序模型,能夠為一個複雜問題提供一種排序方案。
小結這就是LTR,學習排序,這實質上是一個非常抽象,不為大家所知,但卻時常用到的點,希望做推薦、搜索的同學有時間還是可以多少了解一下~