基于多任务学习和负反馈的深度召回模型
簡介:?召回結果的好壞對整個推薦結果有著至關重要的影響,最近的一系列實踐和研究表明,基于行為序列的深度學習推薦模型搭配高性能的近似檢索算法可以實現既準又快的召回性能;與此同時,用戶在天貓精靈上還可以進行實時指令操控(歌名點播:“播放七里香”、風格流派推薦點播:“來點搖滾”、主動切歌:“下一首”等),如何利用這些豐富的反饋信息改進召回模型的性能,他們是怎么做的呢?
一 背景??
傳統的推薦系統通常由兩部分構成,分別是 Candidate Generation(候選生成)和 Ranking(排序),以下圖中經典的 YouTube 視頻推薦為例[1],整個系統分為了兩層:第一層是 Candidate Generation(候選生成),負責從全量的視頻中快速篩選出幾百個候選視頻,這一步通常也被成為 Matching(召回);第二層是 Ranking(排序),負責對幾百個視頻進行精準打分并重新排序,決定最終向用戶展示的結果順序。
本文主要研究 Matching(召回)部分,這部分通常面對的是整個推薦 item 集合,既要盡可能多的保留相關性高的結果,又要保證速度,召回結果的好壞對整個推薦結果有著至關重要的影響。最近的一系列實踐和研究表明,基于行為序列的深度學習推薦模型[2-4]搭配高性能的近似檢索算法[5]可以實現既準又快的召回性能(這套方案通常被稱為DeepMatch),和傳統的召回方法相比(比如 swing、etrec、SVD),DeepMatch 的優勢主要如下:
- 可以建模 user-item 間更深層次的非線性關系
- 可以在模型中使用各種 user 和 item 的特征
- 基于行為序列的模型可以建模用戶不斷變化的興趣,并且能夠融合用戶的長短期興趣
DeepMatch 已經廣泛應用于天貓精靈推薦場景中(APP 信息流推薦、音樂推薦等)并取得了比傳統 i2i 方法更好的效果,但目前的模型仍存在著一些問題,有一些關鍵的信息還未引入進來(以“我要聽歌”場景為例,在這個場景中天貓精靈會根據用戶的喜好來給用戶推薦音樂):
負向反饋信號(Play Rate)
初始訓練日志數據中僅包含正向反饋,也即使用播放完成率高的歌曲序列訓練 DeepMatch 模型。而在天貓精靈的場景中,用戶有主動切歌的行為,如主動的“停止播放”、“下一首”,其中大部分這類型是用戶在出現不喜歡的歌曲時觸發,這些信號可以作為用戶的負反饋加入到模型中。而且一些實踐已經表明了負向反饋的作用[6-7],如果能將這些信號有效的利用起來,模型有能力去捕捉用戶時刻變化興趣,在用戶進行切歌行為時,減少同類型的音樂推薦。在這個場景中,我們用每首歌曲的播放完成率來表示用戶反饋,完播率較大即為正反饋,完播率較小即為負反饋。
歌曲點播 query 意圖信號(Intent Type)
天貓精靈歌曲的播放大部分由用戶的 query 點播而來,每一首歌曲背后都有用戶的點播意圖,天貓精靈背后有一套專門的歌曲 query 意圖解析,比如精確點播(歌名點播:“播放七里香”、歌手點播:“我要聽劉德華的歌曲”)、推薦(風格流派推薦:“來點搖滾”、隨便聽聽推薦:“放歌”)。通過對用戶行為的分析來看,不同意圖類型下的歌曲對于推薦模型貢獻的權重是不同的,在模型中融入歌曲對應的意圖 attention,能更準確把握用戶的興趣。因此本文提出了一種基于多任務學習和負反饋的深度召回模型。
二 方法
總體來說,由于近似最近鄰檢索算法的限制,我們的召回模型需要獨立地對用戶歷史行為序列進行編碼以生成用戶的每一步的向量表示,然后再和 Target Item 向量做內積運算,得到打分,模型基于 Self-Attention 的架構來實現,總體結構如下:
1 Input Representations
如前所述,為了建模負向反饋信號和用戶意圖類型信號,我們的模型引入了對 Play Rate 和 Intent Type 的表示。但初始數據集不包含這兩種信號,因此我們用 Train Set 1 來表示初始數據集,Train Set 2 表示帶有負向反饋信號和用戶意圖類型信號的數據集,我們對它們做了統一的表示。總的來說,用戶歷史行為序列中的每個 Item 的表示由如下四部分構成:
1)Item Embedding
我們首先把每個 Item 嵌入到固定大小的低維向量中,Train Set 1 和 Train Set 2 共用一套 Item Vocabulary,不需要做區分:
其中,為 Item 的 One-Hot 表示,是 Item Embedding 矩陣,另外需要注意的是輸出層和輸入層共用一套 Item Embedding,這樣做的目的主要是節省顯存占用空間,因為推薦場景的 Item 數量是巨大的,而且有很多工作已經證明了這樣的做法對于模型性能影響不會很大[2]。
2)Position Embedding
對于行為序列任務,我們需要使用位置嵌入來捕獲行為序列中的順序信息。我們采用不同于 Transformer 原論文[8]中的 sin 和 cos 方法,直接使用 Max Sequence Length 個 Embedding 來表示不同的位置。
3)Play Rate Embedding
播放完成率是用戶對于 Item 接受程度的一個重要反饋,在天貓精靈上,對于不喜歡的歌曲,用戶通常會直接使用“下一首”指令將其切掉,這些歌曲的播放完成率就會比較低。播放完成率是一個值域在 [0, 1] 間的連續值,為了實現后面將要提到的連續值特征和離散值特征的交互,我們參照了[9]中方案,將 Play Rate 映射到了與 Item Embedding 相同的低維向量空間,具體來說,我們將 Play Rate Embedding 表示為:
其中,是 Play Rate,是隨機初始化的 Embedding,是最終得到的 Play Rate Embedding,由于我們 Train Set 1 數據只有播放時長較高的歌曲,并且沒有播放完成率的信息,因此對于 Train Set 1,我們固定所有 Play Rate 為 0.99:
4)Intent Type Embedding
用戶意圖類型表示了用戶進入這個 Item 的方式,比如在天貓精靈端,點播(用戶明確點播出的歌曲)和推薦(天貓精靈為用戶推薦的歌曲)就是兩種不同的 Intent Type(天貓精靈的實際場景中類型會更多),類似 Item 本身的表示,我們把 Intent Type 也映射到了一個固定的低維向量空間:
我們不知道 Train Set 1 數據中的 Intent Type,在此我們假設所有的 Train Set 1 數據的 Intent Type 全部為點播:
2 Factorized Embedding Parameterization
在推薦的任務中,Vocabulary Size 通常是巨大的,這導致了我們無法使用太大的 Embedding Size 來表示 Item,否則顯存放不下,但很多使用 Transformer 的工作證明,提高 Hidden Size 可以有效的提升模型效果[10],參照 ALBERT[11] 壓縮模型的方式,我們首先把 Item 的 One-Hot 向量映射到一個低維度的空間,大小為 ,然后再映射回高維度的空間再輸入Transformer,從而把參數量從 降低到了 ,當 時參數量會明顯減少。
3 Feedback-Aware Multi-Head Self-Attention
在獲得用戶行為序列的特征表示后,我們就可以準備構建用戶向量了,我們采用了注意力機制來編碼用戶的行為序列。如 Transformer[8] 中所述,注意力機制可以被描述為一個將 Query 和一系列的 Key-Value Pairs 映射到 Output 的函數,其中 Query,Key,Value 和 Output 都是向量,Output 被計算為 Value 的加權和,其中分配給每個 Value 的權重由 Query 與對應 Key 的打分函數計算,由于召回模型的限制,我們無法使用 Target Item 提前和用戶行為序列中的 Item 做運算,因此采用 Self-Attention 的方式,直接把用戶行為序列作為 Query,Key,Value 來進行計算。具體來說,我們使用了 Multi-Head Self-Attention 的方式來提升模型對于復雜交互的建模能力:
其中,是線性投影矩陣, 是 head 的數量。在經典的 Transformer 結構中, 由 Item Embedding 和 Position Embedding 構成,在我們的模型中,我們將外部信息(播放完成率和用戶意圖類型)引入到 Attention 中來,我們稱之為 Feedback-Aware Attention,通過對這些信息的引入,我們的模型就有能力結合用戶的反饋信息感知用戶對于各個歌曲的不同的偏好程度了:
除此之外我們還參照 ALBERT[11],嘗試了 Cross-layer Parameter Sharing 的方案,這種方案讓每層 Transformer Layer 全部共享一組參數,同樣量級(層數相同)下的 Transformer 采用該方案后實際上的效果是會有所下降的,但是參數量減少了很多,訓練速度也會快很多,對于推薦這種數據規模比較龐大的場景,采用這種策略可以在盡量節約訓練時間的前提下提升模型性能。
4 Sampled Softmax Loss For Positive Feedback and Sigmoid CE Loss For Negative Feedback
在獲得用戶的向量表示后,就可以定義多任務學習的目標了,由于之前我們已經統一了 Train Set 1 和 Train Set 2 的數據表示,因此這兩個任務可以放在一起進行聯合多任務訓練。具體來說,我們的任務類似于語言模型:給定前 個已經聽過的音樂,預測第 步用戶想要聽什么音樂,我們根據播放完成率的高低將信號分成兩種(實際實現時會使用一個閾值來區分),一種是 Positive Feedback,這種的優化目標是使其打分排序盡量靠前,另一種是 Negative Feedback,這種的優化目標是使其打分排序盡量靠后。
如下圖的左圖所示,如果只做傳統的 Positive Feedback Loss 的話,我們的模型可以拉近用戶向量和喜歡的 Item(正向樣本)的距離并拉大其和未觀測 Item 的距離,但是不喜歡的 Item(負向樣本)的距離可能并不會被拉開,我們希望我們的模型可以向右圖一樣,在做到上述特性的同時,拉大用戶向量與不喜歡的 Item 的距離:
因此我們使用了 Positive Feedback 和 Negative Feedback 結合的優化目標:
對于 Positive Feedback,我們使用 Sampled Softmax Loss 來優化。在之前的很多工作中[12-13],Sampled Softmax Loss 已經被證明非常適用于大規模推薦召回模型,它的定義如下:
在使用 Tensorflow 實現的時候,sampled_softmax 默認使用的采樣器為 log_uniform_candidate_sampler(TF 版 Word2Vec 基于此實現),它基于 Zipfian 分布來采樣,每個 Item 被采樣的概率只跟他詞頻的排序相關,采樣概率不是詞的頻率,但是推薦中的商品和 NLP 中的詞可能不同,因此我們嘗試了另外兩個采樣器:
- uniform_candidate_sampler:使用均勻分布來采樣
- learned_unigram_candidate_sampler:這個分布會動態統計訓練過程中的詞表,然后計算概率并進行采樣
在我們的實驗中,learned_unigram_candidate_sampler 可以實現最好的效果。除此之外,我們發現了類似[2]中的結論,負采樣的數量是一個比較重要的參數,在顯存允許的情況下,適當調高負采樣的數量可以有效的提升模型收斂效果。
對于 Negative Feedback,我們直接使用 Sigmoid Cross Entropy Loss 來優化,將播放完成率低的 Item 全部看成負例,使其打分盡量低:
最終的總 Loss 則為兩者的加和:
三 實驗
1 分布式訓練
推薦場景的詞表大小和數據量通常是巨大的,因此我們采用了 TensorFlow 中的 ParameterServer 策略來實現分布式訓練的代碼。調優過程中也積累了一些經驗:
1)需要注意 Embedding 分片的問題,一個是 tf.fixed_size_partitioner 中的 size,另外一個是embedding_lookup 中的 partition_strategy,需要保持他們在 Training 和 Inference 過程中的設置是相同的。
2)sample_softmax 中的代碼需要根據自己的場景來做優化,比如在我們的場景中,同一個 batch 中的重復 sample item 比例比較高,把里面的 embedding_lookup 加上 unique,可以大幅提升訓練速度。
3)靈活使用 Mask 機制,可以有效的實現各種不同的 Attention 策略。
2 實驗結果
離線實驗的指標采用 R@N,即打分排序的前 N 項結果包含Target Item 的比例,對于正向樣本,指標稱為 POS@N,我們希望這個值越高越好,對于負向樣本,指標稱為 NEG@N,我們希望這個值越低越好。由于篇幅限制,我們只列出一組主要的實驗結果,這組實驗驗證了 Multitask Learning 和 Negative Feedback 的效果,我們在其他策略都采用上述最優的情況下(比如優化器,采樣方法等),a 采用傳統 DM 方式訓練,只保留完播率較高的正反饋 Item 來構建行為序列,b 在 a 的基礎上加入 Play Rate、Play Type 特征,c 在 b 的基礎上再加入負向反饋信號進行多任務訓練:
可以看出,加入反饋信號(Play Rate)和歌曲點播 query 意圖信號(Intent Type)后,b 的效果要優于 a,再加入 Negative Feedback 目標進行 Multitask Learning 后,c 可以保證 POS@N 微小變化的情況下明顯降低 NEG@N。
我們在猜你喜歡的線上場景中也證明了新方法的有效性,和基于 DM 原方案的分桶相比,新模型(DM with Play Rate/Intent Type and NEG MTL)分桶的人均播放時長提高了 +9.2%;同時該方法已經應用于天貓精靈推薦的更多場景中并取得了不錯的收益。
參考文獻:
[1] Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations[C]//Proceedings of the 10th ACM conference on recommender systems. ACM, 2016: 191-198.
[2] Hidasi B, Karatzoglou A. Recurrent neural networks with top-k gains for session-based recommendations[C]//Proceedings of the 27th ACM International Conference on Information and Knowledge Management. ACM, 2018: 843-852.
[3] Sun F, Liu J, Wu J, et al. BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer[J]. arXiv preprint arXiv:1904.06690, 2019.
[4] Li C, Liu Z, Wu M, et al. Multi-interest network with dynamic routing for recommendation at Tmall[C]//Proceedings of the 28th ACM International Conference on Information and Knowledge Management. ACM, 2019: 2615-2623.
[5] Johnson J, Douze M, Jégou H. Billion-scale similarity search with GPUs[J]. IEEE Transactions on Big Data, 2019.
[6] Paudel B, Luck S, Bernstein A. Loss Aversion in Recommender Systems: Utilizing Negative User Preference to Improve Recommendation Quality[J]. arXiv preprint arXiv:1812.11422, 2018.
[7] Zhao X, Zhang L, Ding Z, et al. Recommendations with negative feedback via pairwise deep reinforcement learning[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 1040-1048.
[8] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.
[9] Song W, Shi C, Xiao Z, et al. Autoint: Automatic feature interaction learning via self-attentive neural networks[C]//Proceedings of the 28th ACM International Conference on Information and Knowledge Management. ACM, 2019: 1161-1170.
[10] Devlin J, Chang M W, Lee K, et al. Bert: Pre-training of deep bidirectional transformers for language understanding[J]. arXiv preprint arXiv:1810.04805, 2018.
[11] Lan Z, Chen M, Goodman S, et al. Albert: A lite bert for self-supervised learning of language representations[J]. arXiv preprint arXiv:1909.11942, 2019.
總結
以上是生活随笔為你收集整理的基于多任务学习和负反馈的深度召回模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 物联网的四种计算类型
- 下一篇: 还在为垃圾太难分类而烦恼么?AI算法来帮