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

本文由雲+社區發表web

做者:騰訊技術工程算法

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

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

1. 推薦系統算法概述ide

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

第一類是基於用戶行爲數據的推薦算法,一般也叫作協同過濾;協同過濾又分爲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.

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

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

相關文章
相關標籤/搜索