没什么是一次排序解决不了的,如果有,那就One more time
Personalized Re-ranking for Recommendation(ResSys'19)
說起排序,對排序的認知還停留在召回階段召回的item經過粗排過濾,剩下較少的item在精排中打分,按epcm或者其他策略挑選出最終要曝光的item。重排是一種考慮到推薦items之間關系和影響的排序模式,常規的推薦系統僅僅考慮<user, item>對的角度,并不會考慮items間作為一個list進行推薦之后的互相影響。
舉個例子,排序模型往往都是point-wise的,一個DNN加豐富的user/item/上下文特征預估點擊率,在召回的100個item候選集中排序取出Top10的item進行推薦展示。但是,在實際情況里,這10個item展示給用戶時是會相互影響的,這樣就導致排序模型線下預估與線上實際點擊情況之間是有偏差的。
那么,產生這種情況的原因是什么呢?
首先是我們在排序階段并沒有考慮到item之間的影響,其次用戶對不同場景(或者邏輯)下看到的item list的反饋是不同的。比如,在信息流場景中,如果展示的20個內容中有同一主題(理財科普),對于有點擊意圖的用戶,類似的內容排在一起時,用戶點擊顏值較高或者知名大V的內容的概率會增大;對于沒有點擊意圖的用戶,展示給用戶更加多樣性的內容,更適合用戶去探索與發現,這時推薦的多樣性就變得更重要了。
Re-rank模型將常規rank模型的輸出作為模型輸入,強化item之間的關系以及item與用戶的關系進行One more time排序。對于不同用戶來說,list中item的分布應該具有比較大的差異。
PRM的模型結構,是一個比較傳統的multi-head結構,輸入Initial List是一個精排模型輸出的推薦集合,然后依次經過輸入層, 編碼層和輸出層三部分后,輸出的Re-ranked List是重排序。
編碼層目標在于整合對列表中物品的相互影響,以及用戶行為和列表中物品的相互影響。這里利用Transformer中self-attention結構來實現任意兩個Item的交叉,從而獲得Item互相間的影響。
在Attention中, Query,Key和Value都是同一個輸入的embedding矩陣,然后經過Multi-Head Attention。公式如下:
經過FFN增強模型和輸入向量不同維度之間的交互,將多個Attention進行stack,組合成更復雜和更高維的交互信息。
經過FFN增強模型和輸入向量不同維度之間的交互,將多個Attention進行stack,組合成更復雜和更高維的交互信息。
最后,以點擊預估作為目標,通過Softmax和Cross-entropy進行訓練后通過Score排序依次展示給用戶。
其中D是展示給用戶的items集合,y是用戶是否點擊。
我們知道,最常見的考慮時序性的模型是RNN和Transformer,所以經常把這兩類模型用在重排模塊,這是很自然的事情。一般的做法是:排序Top結果的物品有序,作為RNN或者Transformer的輸入,RNN或者Transformer明顯可以考慮在特征級別,融合當前物品上下文,也就是排序列表中其它物品,的特征,來從列表整體評估效果。RNN或者Transformer每個輸入對應位置經過特征融合,再次輸出預測得分,按照新預測的得分重新對物品排序,就完成了融合上下文信息,進行重新排序的目的。
除了本篇Re-Rank文章之外,煉丹筆記還分享了《Revisit Recommender System in the Permutation Prospective》一文,論文提出了兩階段的重排序框架PRS(Permutation Retrieve System),分別是PMatch階段和PRank階段,
PMatch一句話總結就是,把上百個item的排列都給list-wise模型預估排列分不現實,PMatch負責挑選出候選的排列。
PRank就比較簡單了,先離線訓練一個模型,該模型輸入是一個長度為n的序列 (x1, x2, ..., xn),然后輸入到Bi-LSTM里,就會得到n個隱向量,每個隱向量concat用戶特征和序列中每個item的原始特征,過mlp預測點擊率即可。
沒什么是一次排序解決不了的,如果有,那就One more time更多干貨,請關注公眾號:煉丹筆記總結
以上是生活随笔為你收集整理的没什么是一次排序解决不了的,如果有,那就One more time的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Learning to Rank:X-w
- 下一篇: Attention函数手册