推薦中的個性化重排--Personalized Re-ranking for Recommendation
這篇文章是阿里在ResSys'19發表的,主要貢獻是在重排序階段,引入了用戶的相關信息,很符合實際場景。
- PRM的提出
重排主要是對排序后結果的優化,也可以用於二次推薦。考慮到性能原因,典型的排序技術是基於pointwise的,給定一個query,系統對每個物品進行打分,按照打分結果進行排序。pointwise不考慮排序列表中物品之間的相關性,為了解決這個問題,有兩種主流做法:
pairwise和listwise:pairwise和listwise考慮列表中物品間的相關性
建模物品之間的相互作用:基於RNN的方法是目前的SOTA,輸入初始列表,輸出編碼后的列表[2].RNN存在兩個問題,一是距離限制,二是無法有效的對列表中物品進行交互。
直觀上來說,用戶的行為信息也應該被加入到重排,因為不同用戶的傾向性不同。假如用戶更關注價格,重排時價格就需要更多關注。文章提出基於Transformer的個性化重排,
- 假如用戶和列表中物品的交互,更加合理
- Transformer的self-attention機制有效捕捉特征間的交互,改善了基於RNN方法的缺點
- 模型細節
先看圖
個性化重排的個性化就體現在加入了用戶個性化向量\(pv\),可以建模用戶個性和物品之間的相互關系。
輸入層
輸入層由三部分組成:原始特征、個性化特征、位置特征
給定初始列表\(\mathcal{S}=\left[i_{1}, i_{2}, \ldots, i_{n}\right]\),原始特征矩陣\(X \in \mathbb{R}^{n \times d_{\text {feature }}}\),\(X\)的每行\(x_i\)對應\(i \in S\)的特征向量。\(P V \in \mathbb{R}^{n \times d_{\mathrm{pv}}}\)是個性化矩陣,由預訓練得到。\(PE \in \mathbb{R}^{\boldsymbol{n} \times\left(d_{\text {feature }}+d_{p v}\right)}\)表示位置編碼,初始列表中物品的位置.
其中\(E^{\prime \prime} \in \mathbb{R}^{n \times\left(d_{\text {feature }}+d_{p v}\right)}\),為了將\(E^{''}\)轉化\(d\)維的\(E\),使用前饋神經網絡轉化下:
此處有一個疑問,為什么需要做這一步降維?直接將拼接后的向量送入編碼層不可以嗎?
編碼層
編碼層目標在於整合對列表中物品的相互影響,以及用戶行為和列表中物品的相互影響。這里使用了Transformer的編碼部分,可以看圖(a).
輸出層
輸出層使用\(softmax\)輸出一個分數列表,根據分數就可以實現重排。具體來說,
其中\(F^{\left(N_{x}\right)}\)是Transformer部分的輸出。對應的損失函數為
其中\(\mathcal{R}\)是所有用戶的請求的集合。即保證重排后的列表盡可能的符合每個用戶
預訓練個性化向量
預訓練網絡將點擊率作為目標,利用網絡的隱層向量作為個性化向量。就是預訓練模型的經典操作。對應的損失函數
其中\(\mathcal H _u\)表示用戶的歷史行為信息,item表示物品信息,user表示人口統計學信息。可以看出個性化向量的預訓練網絡就是一個CTR預估網絡,因此經典的Wide&Depp,DeepFM等網絡都可以用來做預訓練。
- 討論
- 文章的創新主要是重排階段引入了用戶的相關特征。個人認為可以用於二次推薦,應該有幫助
- 輸入層最后那個操作沒有太搞明白,有理解不到位的地方歡迎討論。
references:
Personalized Re-ranking for Recommendation.https://arxiv.org/pdf/1904.06813.pdf