深度召回模型在QQ看點推薦中的應用實踐

本文由雲+社區發表

作者:騰訊技術工程

導語:最近幾年來,深度學習在推薦系統領域中取得了不少成果,相比傳統的推薦方法,深度學習有着自己獨到的優勢。我們團隊在QQ看點的圖文推薦中也嘗試了一些深度學習方法,積累了一些經驗。本文主要介紹了一種用於推薦系統召回模塊的深度學習方法,其出處是Google在2016年發表於RecSys的一篇用於YouTube視頻推薦的論文。我們在該論文的基礎上做了一些修改,並做了線上AB測試,與傳統的協同召回做對比,點擊率等指標提升明顯。

爲了系統的完整性,在介紹主模型前,本文先對傳統推薦算法和召回算法做一些簡單的介紹和總結,並指出深度學習方法相對於傳統方法的優勢所在,然後再進入本文的主題——深度召回模型。

1. 推薦系統算法概述

按照使用的數據類型來分,推薦算法可以分爲兩大類:

第一類是基於用戶行爲數據的推薦算法,通常也叫做協同過濾;協同過濾又分爲memory-based和model-based這兩類。其中,memory-based協同過濾的代表算法有基於用戶的UserCF,基於物品的ItemCF,它們的特點是用行爲數據直接計算user-user或item-item的相似度[1]。Model-based協同過濾的代表算法主要是一些隱變量模型,例如SVD、矩陣分解MF[2, 3]、主題模型pLSA、LDA[4]等,它們的特點是用行爲數據先計算出user和item的隱向量,然後通過這些隱向量計算user-user或item-item間的匹配度去做推薦。

在實踐中,我們除了能拿到用戶的行爲數據以外,通常還可以拿到用戶和物品的畫像數據,比如性別、年齡、地域、標籤、分類、標題、正文等,在一些文獻中,這些行爲以外的數據被稱爲side information。傳統的協同過濾是不考慮side information的,如果把side information和行爲數據結合使用,應該會提升推薦的準確率。這種同時使用行爲數據和side information的算法都屬於第二類算法。

在第二類算法中,最常見的模型就是CTR模型。CTR模型本質上是一個二分類的分類器,用得比較多的是LR、xgboost[10]、lightGBM[11]等分類器。其中,行爲數據和side information被用於構造訓練樣本的特徵和類標。分類器完成訓練後,通過預測user點擊item的概率,可以把topK概率最大的item作爲推薦結果推送給用戶。比起純行爲的協同過濾,使用了side information 的CTR模型通常會取得更好的推薦效果。而整個CTR模型取勝的關鍵,在於如何結合side information和行爲數據構造出具有判別性的用戶特徵、物品特徵以及交叉特徵;

近五年來,基於深度學習的CTR模型逐漸發展起來,在不少應用場景下取得了比傳統CTR模型更好的效果。相比於傳統的CTR模型,深度CTR模型有着自己獨到的優勢,主要體現在如下幾個方面:

(1)特徵的整合能力:深度學習通過使用embedding技術,可以將任何分類變量轉化爲具有語義結構的低維稠密向量,很容易把分類變量和連續變量結合在一起作爲模型的輸入,比傳統方法使用one-hot或multi-hot表示分類變量的方式更方便有效,特別適合於web推薦這種分類變量比較多的場景;

(2)自動交叉特徵的能力:深度學習通過神經網絡強大的非線性擬合能力,可以從原始輸入數據中自動學習用戶和物品的交叉特徵,能更深層次地匹配用戶與物品,從而提高推薦準確率。通過自動學習交叉特徵,大大降低了特徵工程的工作量;

(3)端到端的學習:傳統CTR模型會把特徵構造和模型訓練分開,先做數據預處理、特徵構造或特徵學習,然後給模型訓練。這些事先構造或學習好的特徵,並不一定最適合用來擬合當前模型。而在深度學習中,輸入數據不需要做過多的預處理或特徵學習,特徵學習和模型訓練是同時進行的,學到的特徵也是最適合擬合當前模型的,學出來的模型的泛化能力通常會更好一些。由於不需要專門學習特徵,因此也提高了開發模型的效率。

(4)完善的計算平臺和工具:模型建得再漂亮,最後也得能求解出來才能在實際中發揮真正的作用。對於深度學習來說,一些現有的計算平臺(如TensorFlow)使得模型求解變得非常容易。研究者只需要把精力放在模型的設計和調優上,不需要推導複雜的求解公式。模型的求解由TensorFlow等工具的自動微分技術完成,大大降低了模型實現和落地的難度。

由於以上原因,基於深度學習的CTR模型受到了廣泛關注,在最近幾年內發展很快,並在不少業務中取得了顯著的成果。

2.召回模型

推薦系統在架構上一般分爲兩層:召回層和排序層。

其中,召回層主要負責從全體物品中快速篩選出跟用戶興趣相關的物品池子,大大縮小物品的範圍,爲排序做準備。在資訊類產品的推薦場景下,召回物品通常還需要滿足時新性。所以在資訊類推薦場景中,召回模型要滿足如下幾點:

(1)高效性:要在很短的響應時間內完成物品的召回;

(2)相關性:要儘可能召回那些匹配用戶興趣的物品;

(3)時新性:新上線的物品,也要能被召回,以確保最新的內容也有曝光的機會;

2.1傳統召回模型

以圖文推薦爲例,常用的召回方式是通過用戶歷史點擊的文章去關聯相似文章作爲召回,其中,按照所用數據的不同,又分爲按內容召回和協同召回。

內容召回:

(1)根據用戶畫像中的標籤、分類,召回具有相同或相似標籤、分類的文章;

(2)使用文章的標題或正文,通過word2vec、glove等方法求出文章的標題向量或正文向量,通過計算向量的餘弦相似度召回內容上相似的文章。

協同召回:

(1)可以使用jaccard公式直接計算兩篇文章的用戶重合度作爲這兩篇文章的行爲相似度;

img

優缺點:

以上這兩類召回方法,都有各自的優點和缺點。

第一種方法的優點是可以召回最新的文章。缺點是可能會出現召回內容過於集中或興趣漂移等問題。對於向量化方法,容易出現“點過什麼就召回什麼”的現象,降低了推薦的多樣性。對於直接用標籤或分類來召回,可能會召回相關性不高的文章,降低召回的準確性。

第二種方法在一定程度上解決召回內容過於集中和興趣漂移的問題,但是因爲依賴於行爲數據,所以只能召回訓練數據中包含的文章,沒辦法召回最新的文章。爲了召回新文章,就必須每隔一段時間重新計算一遍。所以它召回的文章做不到真正意義的時新。

爲了解決以上兩種方法存在的缺點,我們使用了深度學習的方法去做召回,充分利用用戶的畫像信息去深度匹配用戶興趣和文章,同時保證可以召回最新的文章。業界中用深度學習做召回比較成功的是Google在YouTube視頻推薦中使用的召回方法[9],但它並不考慮召回內容是否時新這一點,所以爲了讓這個方法也能召回最新的item,我們對YouTube深度召回模型做了一些修改,讓它既能召回深度匹配用戶興趣的文章,也能保持召回文章的時新性。“此外,由於YouTube召回模型使用的是用戶向量直接匹配文章向量的召回方式,因此通過使用向量索引系統,很容易滿足從大量文章中快速召回候選集的性能要求。”

2.2深度召回模型

爲了表述上的簡潔,我把Google提出的這個用於YouTube視頻推薦的深度召回模型簡稱爲YouTube召回模型。在講述模型之前,先講一下深度CTR模型中一般都要使用的兩個基本網絡結構:embedding層和全連接層。

Embedding層

深度CTR模型的輸入通常會包含各種不同的分類變量,例如用戶畫像裏的標籤、一級分類、二級分類等。這些分類變量的取值往往比較多,比如標籤,它的取值可能就有幾十萬個,如果用one-hot或multi-hot方式來表示標籤,則會產生幾十萬維的高維稀疏向量。在深度CTR模型中,對這些取值特別多的分類變量通常都會使用embedding方法,將其表示爲一個低維稠密的向量,然後輸入到網絡中。這個低維稠密向量被稱爲這個分類變量的embedding,把分類變量轉化爲embedding的那一層網絡稱爲embedding層。下圖給出了一個例子,講述瞭如何使用embedding方法將用戶畫像中的標籤表示爲一個低維稠密向量。

img

圖1 用embedding方法表示分類變量的例子

首先,我們初始化一個lookup table,這個lookup table是一個矩陣(可以是事先選了好固定不變的,也可以是從數據中學習,不斷迭代更新的),矩陣的行數爲分類變量的取值數,在這個例子中就是標籤總個數,矩陣的列數是低維稠密向量的維數(事先指定)。假設標籤總個數爲1萬,那麼lookup table就有1萬行,其中第i行是編號爲i的標籤對應的embedding。在上圖例子中,用戶有兩個標籤,編號分別爲308和4080,對應權重爲0.7和0.3,求embedding時首先將第308行和第4080行的向量拿出來,分別記爲

img

,然後以0.7和0.3爲權重加權求和這兩個向量,就得到了用戶標籤的embedding,即

img

事實上,用以上方法求embedding,跟用輸入分類變量one-hot或multi-hot後得到的高維稀疏向量乘以lookup table,得到的結果是一樣的,不同的只是用查表求和的方式來做這個矩陣乘法會高效得多。所以從本質上說,求embedding做的是線性降維。

全連接層

全連接層是多層感知器(multiple layer perceptron, MLP)中的基本結構,定義了第l層到第l+1層的非線性映射關係,它的主要作用是使模型具備非線性擬合能力,或者說學習特徵交叉的能力。圖2給出了一個從第l層到第l+1層的全連接示意圖。

img

圖2 第l層到第l+1層的全連接示意圖

img

Youtube召回模型的網絡結構

YouTube召回模型根據user的點擊歷史和畫像,計算user對item庫裏每個item的喜歡的概率,返回topK概率最大的item作爲召回列表。從本質上說,YouTube召回模型是一個超大規模的多分類模型,每個item是一個類別,通過用戶畫像計算出用戶特徵作爲模型輸入,預測用戶最喜歡的topK個類別(topK個item)。

在圖文主feeds召回這一場景中,用戶的輸入主要爲以下幾種類型的數據:

(1)用戶的點擊歷史,包括閱讀、點贊、評論、收藏、biu過的文章;

(2)用戶的興趣畫像,包括用戶的標籤、一級分類、二級分類等;

(3)用戶的人口統計學特徵,包括用戶的性別、年齡等;

(4)用戶的上下文信息,包括用戶的地域信息、訪問推薦系統時的時間段等;

img

這裏有一點需要注意的,就是我們模型裏文章的lookup table是由文章正文分詞的word2vec向量構成的,在訓練過程中不更新。在YouTube召回模型的原始論文裏,item是視頻,item的lookup table是學習出來的。但是在圖文推薦場景下,如果文章的lookup table是學習得到的話,那就沒辦法召回最新的文章了,只能召回那些訓練樣本中出現過的文章,滿足不了時新文章推薦的需求。爲了能召回新文章,我們修改了原模型,直接用文章的word2vec向量構造文章的lookup table,其中文章的word2vec向量由文章的詞向量加權求和得到,而詞向量則是事先用word2vec學好固定下來的。每入庫一篇新文章,我們都可以通過該文章的詞向量加權求和得到它的word2vec向量,然後存起來,YouTube模型在線召回時,無論是計算用戶興趣向量還是計算內積,都可以實時獲取到每篇文章的向量,包括最新文章,從而可以滿足時新文章召回的需求。

img

圖3 YouTube深度召回模型的網絡結構

img

img

img

img

img

訓練階段:

以用戶所有的side information和點擊行爲數據作爲訓練樣本,最大化以上這個總似然函數,便可以學習出所有lookup table、DNN網絡權重和偏置。

預測階段:

img

優化算法:

由於這個模型裏的softmax需要對庫中所有文章進行,文章數量一般都在幾十萬這個量級,直接優化是不可行的,會非常耗時,所以實際計算中會採用專門針對這種超大規模多分類問題而設計的優化算法,這類算法的名字叫做candidate sampling,其中用得最廣泛的是噪聲對比估計(NCE,Noise-Contrastive Estimation),它將點擊樣本的softmax變爲多個二分類logistic問題。由於softmax具有sum-to-one的性質,最大化點擊樣本的概率必然能導致最小化非點擊樣本的概率,而二分類logistic則沒有這個性質,所以需要人爲指定負樣本,NCE就是一種根據熱度隨機選取負樣本的技術,通過優化NCE損失,可以快速地訓練得到模型的所有參數。在實踐中,我們採用了TensorFlow提供的函數tf.nn.nce_loss去做候選採樣並計算NCE損失。

3.實驗和分析

實驗設置

爲了驗證YouTube深度召回模型是否比傳統的召回方法更有效,我們做了線上的AB測試實驗。其中,深度召回模型離線訓練完成以後,將其用於服務端做在線召回,對比的召回方法是基於文章的協同過濾。

訓練樣本

(1)用戶向量計算:

用戶最近一段時間的點擊歷史,包括閱讀、點贊、評論、收藏、分享過的文章;

用戶最近一段時間的興趣畫像,包括用戶的標籤、一級分類、二級分類以及對應權重;

用戶的人口統計學特徵,主要爲用戶的性別、年齡;

用戶的上下文信息,主要爲用戶的地域信息、當前時間;

(2)正樣本選取:

用戶在畫像統計時間點後一天點擊過的文章;

(3)文章向量:

計算用戶向量和正樣本涉及到的所有文章的word2vec向量;

(4)樣本量:

對用戶抽樣,用於訓練的用戶數抽樣到千萬級別,樣本總數達到億級別;

實驗結果抽樣分析

在上線實驗前,我們做了抽樣分析。也就是隨機抽取若干用戶,獲取他們的歷史點擊文章,然後看看 YouTube召回模型和協同過濾模型分別召回了什麼文章,主觀上去看一下哪個召回更符合用戶的歷史點擊。以下是某個用戶的case分析:

img

從這個用戶的歷史點擊文章可以看出,他的興趣點有娛樂類、社會類和科技類。協同召回和YouTube召回基本都能召回這些類別相關的文章。相比而言,協同召回的文章在內容上會比較相似,YouTube召回的文章不僅有內容相似的,而且還有主題相關的,在多樣性和推廣性上會更好一些。比如說,對於協同召回,歷史點擊了漫威的復聯4,召回就有漫威的文章,歷史點擊了馬雲,召回也有馬雲。而對於YouTube召回,“點什麼就召回什麼”這種現象會少很多,召回的文章既保持了相關性,同時又有一定推廣性。比如說,“復聯4”召回“瘋狂的外星人”,雖然它們不是同一個系列的電影,但是都是新電影。也許該用戶並不是特別關心漫威的電影,而只是關心一些新電影,YouTube模型可能識別到了用戶的這一興趣趨向,召回了“瘋狂的外星人”。所以主觀上會有一種在相關性上做推廣的感覺。

然而,以上case分析只是主觀上的感受,而且抽樣分析不能代表總體。最可靠的還是通過線上的AB測試來評估召回算法,看能否提高線上的核心指標。

在線評估指標

在線AB測試實驗的評估指標是算法的點擊數、曝光數、點擊率以及文章覆蓋度。AB測試實驗的對照組用的是基於Item的協同過濾算法,即ItemCF,通過jaccard計算item-item相似度,根據用戶歷史點擊過的文章召回相似文章。實驗組是YouTube深度召回模型。在ranker檔位相同的情況下,實驗組和對照組在點擊數、曝光數和點擊率上的對比如下:

img

點擊率對比

img

曝光數對比

img

點擊數對比

從在線指標上可以看到,YouTube深度召回的曝光數稍低於協同召回的曝光數,但是點擊率會明顯高於協同召回的點擊率。YouTube召回模型的曝光數大約是協同召回曝光數的80%,但平均點擊率比協同召回的平均點擊率有大約20%的相對提升。說明YouTube深度召回模型召回的文章比協同召回更能匹配用戶的興趣。

此外,YouTube召回模型在推薦內容的多樣性和文章覆蓋度上也比協同召回更好一些,在線實驗統計結果顯示,在推薦出去的去重文章總數上,實驗組比對照組的多2%左右,這個數據間接反映了YouTube召回比協同召回找到了更多匹配用戶興趣的文章。

小結

(1)本文介紹了一種基於深度學習的召回模型,並將其與傳統召回方法進行了實驗對比;

(2)在線實驗表明, YouTube召回模型召回文章的點擊率顯著高於協同過濾召回文章的點擊率,說明YouTube召回模型通過畫像數據學到了更準確的用戶興趣向量,匹配到更多符合用戶興趣的文章,體現出深度學習模型在特徵整合利用和自動學習交叉特徵上的優勢;

(3)因爲YouTube召回模型在計算用戶向量時採用的是word2vec預訓練的文章向量,而每篇文章入庫時都可以計算出其word2vec向量,因此YouTube召回模型能夠召回最新入庫的文章,做到真正的時新召回。

參考文獻

[1]項亮. 推薦系統實踐. 北京: 人民郵電出版社, 2012.

[2]KorenY, Bell R, Volinsky C. Matrix factorization techniques for recommender systems.Computer, 2009 (8): 30-37.

[3]HuY, Koren Y, Volinsky C. Collaborative filtering for implicit feedback datasets.ICDM, 2008: 263-272.

[4]BleiD M, Ng A Y, Jordan M I. Latent dirichlet allocation. Journal of machineLearning research, 2003, 3(Jan): 993-1022.

[5]ZhangS, Yao L, Sun A. Deep learning based recommender system: A survey and newperspectives. arXiv preprint arXiv:1707.07435, 2017.

[6]Mikolov,Tomas & Chen, Kai & Corrado, G.s & Dean, Jeffrey. EfficientEstimation of Word Representations in Vector Space. Proceedings of Workshop atICLR. 2013.

[7]MikolovT, Sutskever I, Chen K, et al. Distributed representations of words and phrasesand their compositionality. NIPS.2013: 3111-3119.

[8]PenningtonJ, Socher R, Manning C. Glove: Global vectors for word representation. EMNLP.2014: 1532-1543.

[9]CovingtonP, Adams J, Sargin E. Deep neural networks for youtube recommendations. RecSys.2016: 191-198.

[10]Chen T, Guestrin C. Xgboost: A scalable tree boosting system. SIGKDD. 2016:785-794.

[11]Ke G, Meng Q, Finley T, et al. Lightgbm: A highly efficient gradient boostingdecision tree. NIPS. 2017: 3146-3154.

此文已由騰訊雲+社區在各渠道發佈

獲取更多新鮮技術乾貨,可以關注我們騰訊雲技術社區-雲加社區官方號及知乎機構號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章