本文介紹的論文是:《Personalized Re-ranking for Recommendation》
下載地址:https://arxiv.org/abs/1904.06813
排序是推薦系統中比較重要的一環,一般通過point-wise的方式對每一個物品計算一個得分,然后進行排序。但這樣做只考慮了單個物品與用戶之間的相關性,而忽略了物品之間的相互影響。因此本文在排序階段后設計了一個重排序(Re-ranking)的模塊,在考慮物品相關性的情況下對排序結果進行重排,一起來看一下。
1、背景
排序階段是推薦系統中比較重要的一環,排序的質量直接影響了用戶的體驗以及平臺的收益。排序算法整體可分為point-wise、pair-wise和list-wise。出于性能上的考慮,一般采用point-wise的方法,即對每一個候選物品給出一個評分,基于評分進行排序。這樣的做法僅僅考慮了用戶和物品之間的關系,而沒有考慮排序列表中物品之間的關系。而pair-wise和list-wise的方法盡管將物品對或者物品列表作為整體輸入,但也僅僅是盡可能優化損失函數,而并沒有從特征空間上顯式建模物品間的相互影響。(文中的這句話沒有太明白)
一些文章通過建模物品之間的相互影響來對排序階段給出的排序結果進行微調,這種做法叫做重排序(Re-ranking)。主流的方法是基于RNN的重排序。但是RNN對于建模物品之間的影響有一定的缺陷,如果兩個物品相隔較遠,它們的相關性并不能很好的刻畫。
因此本文提出了一種基于Transformer的重排序結構,相較于RNN,其優勢主要體現在兩個方面:
1)兩個物品的距離不會影響其相關性的計算
2)Transformer是并行計算,編碼效率相較于RNN更為高效(RNN一個時刻只能輸入一個物品,相當于是串行計算,而Transformer可以同時輸入所有物品,是并行計算)
除了使用Transformer之外,本文還有一個值得借鑒的地方就是將用戶特征加入了Transformer中,使得重排序更加個性化。接下來就一起看一下阿里是如何進行個性化重排序的。
2、模型介紹
2.1 整體介紹
重排序的整體框架如下圖所示:
主要分為三個部分,輸入層、編碼層和輸出層。文中用到的一些符號定義如下:
2.2 輸入層
首先,經過排序階段,我們得到了固定長度的列表S=[i1,i2,...,in],每個物品對應一個特征向量xi,長度為dfeature,此時輸入計作E。除此之外,輸入層還包含兩個部分。
個性化向量Personalized Vector (PV):用戶和每一個物品之間都會計算一個個性化向量pvi作為輸入,個性化向量通過如下的預訓練模型得到:
該模型是一個二分類模型,取最后一個layer的輸出作為個性化向量pvi。
加入個性化向量之后,輸入矩陣E'為:
位置編碼信息Position Embedding (PE):與Transformer中固定的編碼信息不同,這里的位置編碼信息是可以學習,位置編碼矩陣和E'大小相同,計作PE,此時模型的輸入E''為:
在得到E''之后,經過一個單層的前向網絡來進行一定的轉換:
上圖中等式右邊的E應該是E''吧,感覺打錯了。
2.3 編碼層
編碼層是Transformer結構:
有關Transformer,我們之前有篇文章詳細介紹過,這里就不再贅述,大家可以參考:http://www.lxweimin.com/p/2b0a5541a17c
2.4 輸出層
假設第Nx個Transformer encoder block的輸出為F(Nx),通過一層全連接神經網絡和softmax層得到每個物品的重排序得分score(i)。
并基于交叉熵損失函數來進行模型參數的更新:
3、實驗結果
文中使用Precision@k和MAP@k 作為評價指標,兩個指標的計算方式如下:
有關推薦系統的評價指標,可以看本系列的第十六篇文章:http://www.lxweimin.com/p/665f9f168eff
3.1 線下實驗結果
首先,在Yhaoo Letor數據集上使用兩個模型得到的最初推薦結果,分別使用不同的模型進行重排序,實驗結果如下:
接下來,分析了不同的模型結構所對應的實驗結果:
最后,使用真實的電商數據集進行試驗,結果如下:
3.2 線上A/B實驗結果
線上使用了三個模型進行A/B實驗,實驗的評價指標包括PV、IPV、CTR和GMV。PV指24小時內店鋪內所有頁面的瀏覽總量,可累加。IPV指點擊進入寶貝詳情頁的次數。如果用戶看的越多、點擊次數越多,也可以一定程度上表示模型排序結果更好。
線上實驗結果如下:
4、總結
這篇文章主要介紹通過Transformer對排序結果進行重排序。個人感覺比較創新的點在于如何將Transformer和用戶特征進行結合,并提出了一種預訓練的模型來得到用戶的個性化向量。
但文中并沒有給出直接將這個模型應用于排序階段的效果如何,這一點也是我個人比較好奇的地方,感覺這個模型直接用在排序階段也可以得到比較好的結果,哈哈。
本文介紹就到這列,可能我的理解還有不到位的地方,歡迎大家一起討論對這篇文章的理解~