实践篇 | 推荐系统之矩阵分解模型
導語:本系列文章一共有三篇,分別是
《科普篇 |?推薦系統之矩陣分解模型》
《原理篇 |?推薦系統之矩陣分解模型》
《實踐篇 |?推薦系統之矩陣分解模型》
第一篇用一個具體的例子介紹了MF是如何做推薦的。第二篇講的是MF的數學原理,包括MF模型的目標函數和求解公式的推導等。第三篇回歸現實,講述MF算法在圖文推薦中的應用實踐。下文是第三篇——《實踐篇 |?推薦系統之矩陣分解模型》,敬請閱讀。
本文是MF系列文章中的最后一篇,主要講的是MF算法在圖文推薦中的應用實踐。無論是在召回層還是精排層,MF都有發揮作用。在召回層,MF既可以做基于內容的召回,也可以做基于行為的召回,并且相比于其他召回算法,MF有著自身獨到的優勢。在精排層,MF可以用來對分類變量做embedding,產生具有判別性的低維稠密向量,供排序模型使用,提升排序的效果。
推薦系統通常有兩層:召回層和精排層。召回層負責從數以百萬的物品中快速地找到跟用戶興趣匹配的數百到數千個物品,而精排層負責對召回的物品打分排序,從而選出用戶最感興趣的top K物品。召回層在為精排層縮小排序范圍的同時,也決定了推薦效果的上限。如果召回的內容不夠準確,再厲害的排序模型也無法返回一個準確的推薦列表給用戶。因此召回層很重要。常用的召回方法可以分為基于內容的召回和基于行為的召回。兩種召回方法各有自己的優缺點,相互補充,共同提升召回的質量。
1.1基于內容的召回
基于內容的召回通過計算“用戶-文章”或“文章-文章”的內容相似度,把相似度高的文章作為召回結果。內容相似度的計算僅使用內容數據。文章的內容數據有標簽、一級分類、二級分類、正文、標題等,用戶的內容數據就是用戶的畫像。通過用向量表示內容數據,計算出內容相似度。對于內容數據中的分類變量,可以對其one/multi-hot向量直接計算余弦相似度,也可以先對其做embedding,然后再計算余弦相似度。
基于內容的召回方法優點是可以召回時新文章。因為無論文章有多新,我們都可以獲取到其內容數據,從而能計算內容相似度進行召回。缺點是召回內容可能會走向兩個極端,比如用正文或標題的embedding可能會召回內容很相似的文章,從而降低了推薦的多樣性。如果用一級分類或二級分類召回,粒度又太粗,可能會召回不太相關的內容,從而降低了推薦的準確性。
1.2基于行為的召回
基于行為的召回就是通過計算“用戶-文章”或“文章-文章”的行為相似度,把相似度高的文章作為召回結果。行為相似度的計算僅使用用戶行為數據。由于同一個用戶在一段時間內的興趣相對比較固定,點擊的文章之間會有一定程度的相關性,所以從用戶的行為數據中也能學到文章之間的相似性,即行為相似性。
計算行為相似度的經典方法是使用jaccard相似度公式或者cosine相似度公式。比如,文章A?和文章B?的行為相似度可由如下公式計算:
或
其中,N(A?)、N(B?)分別表示閱讀過文章A?和文章B?的用戶構成的集合時,|S?|表示集合S的元素個數。當越多用戶同時讀過文章A?和文章B?時,A?和B?的相似性越高。
此外,還可以把行為數據表示為評分矩陣或共現矩陣,通過矩陣分解的方法把用戶和文章都向量化,從而計算出“用戶-文章”或“文章-文章”的余弦相似度。
基于行為的召回方法優點是能召回內容上不完全相似,但用戶又感興趣的文章,也就是既有相關性,又有多樣性。因為用戶閱讀的文章會在自己的興趣范圍內發散開來,不會一直閱讀幾乎一樣的內容,因此,用這種行為數據計算出來的相似文章既有相關性,又有一定程度的多樣性。此外,由于行為相似度反映了大部分用戶的行為習慣,更容易切中用戶的需求,因此在點擊率等指標上往往會比基于內容的召回更高。缺點是不能召回最新的文章,因為行為數據的產生需要時間,計算行為相似度也需要時間,在這些時間里涉及到的新文章是沒辦法用這種方法召回的。我們只能隔一段時間取最新的行為數據重新計算一次,也就是只能做到準時新召回。此外,基于行為的召回可能會出現假相關,即召回熱度高但不相關的文章。
由于兩種召回方法各有自己的優缺點,所以在實際應用中一般是采用多路召回的方式,相互補充,取長補短,最后匯總在一起給排序模型做精排。
矩陣分解既可以做基于內容的召回,也可以做基于行為的召回。無論是哪種類型的召回,矩陣分解方法都有著自己的優勢。下面將分別介紹基于內容和基于行為的召回是如何應用矩陣分解的,以及它的優勢所在。
2.1基于內容的MF召回
在圖文推薦場景下,item是文章,文章的內容有標簽、一級分類、二級分類、正文、標題等。其中,正文內容最為豐富。我們用文章正文作為語料庫,分詞后通過word2vec學習出每個詞的詞向量,對于每篇入庫的文章,我們都可以用加權詞向量的方法得到它的word2vec向量。在某一時刻,我們的文章庫中有M?篇文章,這M?篇文章的向量就構成了一個文章矩陣,記為
其中yi??為第i?篇文章的向量。記用戶u?的歷史行為數據為
其中rui??表示用戶u?對第i?篇文章是否有點擊,0表示沒有點擊,1表示有點擊。通過求解如下的增量矩陣分解模型,我們可以得到用戶u?的向量xu?:
其中
α和λ為超參數。要強調的是,這里的Item矩陣就是文章矩陣,是事先用word2vec計算好的,在目標函數里被當成是常數看待,要求解的只有xu?,它的解析解為
其中,
為對角陣,I?為單位矩陣。下面的圖1描述了這一增量計算過程
圖1
計算出xu?后,將xu?和每一個yi??計算一下內積,把內積最大的top K?篇文章作為召回結果返回。在工程實現上,這種需要從Y?中快速找出top K?個與xu?最相似的向量問題,通常都可以交給向量索引系統去做,例如Faiss。
由于這里用到的Y?是從文章語料庫學出來的內容向量,而不是從行為數據中學出來的,因此,這里的MF召回屬于基于內容的召回。下面的圖2給出了基于文章word2vec向量的MF召回流程圖。
圖2
與基于鄰域的內容召回方法(用歷史點擊文章的相似文章作為召回結果)相比,MF的優勢在于它能提高召回內容的準確性。在本系列的原理篇文章中,我們通過公式推導得出了一個結論,就是基于鄰域的方法可以看成是MF的一種特例。兩者的主要區別在于,在基于鄰域的算法里,兩篇文章的相似度對所有用戶都是一樣的,而在MF中,兩篇文章的相似度對不同用戶是不一樣的。也就是MF考慮得更細,因此會比基于鄰域的方法更準確。下文將會給出基于內容的最近鄰召回方法和MF召回方法的在線實驗對比數據,從實驗中我們也能明顯看出MF召回比基于鄰域的內容召回方法要更好。
2.2基于行為的MF召回
由于同一個用戶在一段時間內閱讀的文章具有一定程度的相關性,利用行為數據的這個特點,我們以一個大小固定的滑動時間窗口掃描訓練樣本中所有用戶的歷史點擊文章序列,構造一個文章跟文章的共現矩陣R={rij?},其中rij?表示以文章i?為中心的滑動窗口中,文章j出現的次數。對矩陣R的每一行做截斷,只保留數值最大的K?個非零的rij?,其余rij?置零。記xi?為文章i?位于滑動窗口中心時的向量,yi?表示文章i?不在滑動窗口中心時的向量,可構造矩陣分解模型如下:
其中,
α和λ為超參數。
解這個目標函數,可以得到每篇文章的向量xi??和yi?,用的時候我們只用xi?。有了文章的向量,我們就可以計算文章之間的相似度,為每篇文章找到top K相似文章列表,根據用戶歷史點擊文章關聯出相似文章作為召回結果。
相比于用jaccard公式或余弦公式計算文章間的行為相似度,MF方法的優勢在于它的泛化性。jaccard和余弦公式都是基于已觀測到的行為數據,如果文章A?和文章B?沒有同時出現在任何一個用戶的閱讀歷史中,它們是無法應用jaccard或余弦公式計算相似度的。用戶行為數據的稀疏性限制了可計算相似度的文章范圍。MF則克服了這個問題,它用整個行為數據集學出了每篇文章的向量,因此任何兩篇文章的行為相似度都是可計算的。
那些隱藏在數據中沒有被直接觀測到的關系,可以在向量化每篇文章之后被觀測到。比如說,我們觀測到有用戶閱讀了文章A?和文章B,也有用戶閱讀了文章B?和文章C,但沒有用戶同時閱讀A?和C,這種情況下,jaccard可以計算出A?和B?的相似度,B?和C?的相似度,但卻無法計算A?和C。而事實上,A?和C?很有可能是相似的,只是它們的相似關系沒有直接體現在觀測數據里。MF通過把A,B,C?都向量化以后,A?和C?的相似關系就被揭示出來了,所以MF方法有更好的泛化性。它能召回更多相關的文章,同時也會在一定程度上提高召回文章的多樣性。
基于行為的MF召回有兩點值得探討的:
(1)為什么不直接分解“用戶-文章”的行為矩陣,而是分解“文章-文章”的共現矩陣?
我們從離線實驗的結果中發現,分解“用戶-文章”矩陣得到的文章向量有個缺點,對于點擊數較多的文章,其向量每一維的絕對值會比較大,對于點擊數較少的文章,其向量每一維的絕對值會比較小,因此這種向量不適合拿來計算文章間的相似度。實際上,點擊數少的文章學到的向量已經是不準確的了。實驗時也觀察到,用這種文章向量計算相似度的話,很多文章都會跟最熱的那些文章相似。分解“文章-文章”的共現矩陣就不會出現這個問題,一是因為矩陣每行的非零元個數最多不超過K?個,得到的文章向量的分量波動不會那么大,二是因為“文章-文章”矩陣比“用戶-文章”矩陣更稠密,學到的向量會更準確。
(2)分解“文章-文章”共現矩陣的依據是什么?
在實踐中,已經有不少人把用戶的行為數據當做是文本數據來用,并取得了成功。具體做法是把用戶的點擊序列當成是一個文本,序列中的每個item當做是一個詞。通過做這種轉換,就可以使用word2vec[15,16]來學出每一個item(詞)的向量了。那跟MF又有什么關系呢?因為有一個跟word2vec類似的學習詞向量的方法,叫做GloVe[17],就是通過分解“詞-詞”的共現矩陣學習詞向量的,只是word2vec用的損失函數是交叉熵,GloVe用的損失函數是平方損失。雖然GloVe學到的詞向量會比word2vec稍差一些,但是GloVe的計算速度比word2vec快很多,比word2vec更適合于需要頻繁計算以得到新文章向量的場景。這里MF分解“文章-文章”的共現矩陣,其實就是在用GloVe把行為數據當文本數據,學習文章的向量。
排序模型本質上就是一個二分類的分類器,除了近幾年發展起來的各種深度CTR模型[14]以外,實踐中用得最多的傳統CTR排序模型應該就是LR和GBDT了(p.s. FM[21]可以看成是升級版的LR,XGBoost[19]和lightGBM[20]可以看成是升級版的GBDT)。對于LR和GBDT本身而言,并沒有太多的trick,決定效果的關鍵是特征工程。GBDT相對LR來說,優點是可以做到自動特征交叉,減少了人工構造交叉特征的工作量。在推薦場景下,數據中有很多分類變量,比如文章id,標簽id、一級分類、二級分類、地域等,并且有些分類變量取值非常多,比如標簽,從幾萬到幾十萬都有可能。如果用one-hot或multi-hot來表示這些分類變量,由于維度太高,GBDT會訓練得很慢,甚至訓練不出來,所以GBDT要用上這些分類變量,就要先對它們做embedding,也就是用低維稠密向量來表示它們。在圖文推薦中,產生embedding的方法之一就是MF。
我們記錄了每個用戶歷史點擊過的文章id,這些文章id構成了用戶畫像的一部分,并且可以被看成是一種分類變量,現在要把它們變成一個稠密低維的用戶向量xu?來表示用戶興趣。最簡單的方法就是求這些歷史點擊文章的word2vec向量的加權平均,但這樣做的缺點是損失的信息太多,導致用戶向量不準確。更好的辦法是采用矩陣分解模型。記用戶的歷史行為數據為
其中pui?表示用戶u?對文章i?是否有點擊,0表示沒有點擊,1表示有點擊。通過求解如下的增量矩陣分解模型,我們可以得到用戶的向量xu?:
其中,
α和λ為超參數,yi??為文章i?的word2vec向量。xu??的求解表達式為
其中
為對角陣,I?為單位矩陣。得到用戶的向量xu?之后,把xu?作為用戶特征,文章的word2vec向量yi??作為文章特征,內積
作為用戶和文章的交叉特征,訓練XGBoost分類模型。離線訓練好模型后,在線預測時,文章的word2vec向量yi??可以直接從共享內存中取出,用戶向量xu?可以通過上述公式實時計算,內積也實時計算。計算xu??的時間復雜度為O(k3),其中k3?為向量的維度,因此完全能滿足在線計算的性能要求。
4.1 MF召回實驗
上文提到,MF既可以做基于內容的召回,也可以做基于協同的召回。我們分別對MF的這兩種召回做了在線的AB測試,評估的指標是點擊數、曝光數和點擊率。
4.1.1基于內容的MF召回實驗
在這個實驗中,對照組用文章正文的word2vec向量計算每篇文章的相似文章,通過用戶歷史點擊文章的相似文章來召回,實驗組用的上文中提到的基于內容的MF召回。下面是線上AB測試的結果。其中,黃線是對照組。
點擊率
點擊數
曝光數
可以看到,基于內容的MF召回的點擊率、點擊數和曝光數都遠高于對照組的基于內容的相似召回。這就間接說明了用MF計算用戶向量召回的文章,比用memory-based的方式召回內容相似的文章會更準確。
4.1.2 基于協同的MF召回實驗
在這個實驗中,對照組用jaccard公式計算文章與文章之間的行為相似度,實驗組是用MF分解文章的共現矩陣得到文章向量,然后計算文章之間余弦相似度。這兩種方法得到每篇文章的相似文章列表后,都是通過用戶歷史點擊文章去關聯相似文章的方式來召回。實驗結果如下圖所示。其中,黃線為對照組。
點擊率
點擊數
曝光數
可以看到, 在曝光數上,MF和jaccard相差不大,MF稍高。在點擊數上,MF明顯高于jaccard,所以MF的點擊率也明顯比jaccard高。同樣都是基于協同的召回,MF的線上指標均優于jaccard,這就間接證明了,MF的泛化性比jaccard更好,召回的相似文章更匹配用戶的興趣。
4.2 MF特征用于排序的實驗
在這個實驗中,對照組不使用MF特征,實驗組在對照組的基礎上,添加MF特征,包括MF計算得到的用戶向量xu??和交叉特征
評估算法的指標為線上的點擊數、曝光數和點擊率。實驗結果如下圖所示。
點擊率
點擊數
曝光數
圖中的黃線為對照組,綠線為實驗組。可以看到,當模型加入MF計算的用戶向量和交叉特征之后,點擊數、曝光數和點擊率都有明顯的提升。這個實驗表明,用戶畫像中的分類變量(此處為歷史點擊文章)被MF轉化為低維稠密向量引入到XGBoost后,排序的結果更準確了,從而把更符合用戶興趣的文章推薦給用戶,使用戶點擊變多。
(1)召回方法分為基于內容的召回和基于行為的召回,兩類方法各有優缺點,需要多路召回取長補短,相互補充,提高召回的整體質量
(2)MF可以做基于內容的召回,它的優點是比基于鄰域的內容召回更準確
(3)MF可以做基于行為的召回,它的優點是比jaccard有更好的泛化性,在召回更多相似item的同時也能提高召回內容的多樣性
(4)MF可以把推薦場景中的各種分類變量轉化為低維稠密的embedding,適合和GBDT這類方法配合使用,提高排序準確性
[1] 項亮. 推薦系統實踐. 北京: 人民郵電出版社. 2012.
[2] Sarwar B M, Karypis G, Konstan J A, et al. Item-based collaborative filtering recommendation algorithms. WWW. 2001, 1: 285-295.
[3] Linden G, Smith B, York J. Amazon. com recommendations: Item-to-item collaborative filtering. IEEE Internet computing. 2003 (1): 76-80.
[4] Koren Y, Bell R, Volinsky C. Matrix factorization techniques for recommender systems. Computer. 2009 (8): 30-37.
[5] Koren Y. Factorization meets the neighborhood: a multifaceted collaborative filtering model. SIGKDD. 2008: 426-434.
[6] Hu Y, Koren Y, Volinsky C. Collaborative filtering for implicit feedback datasets. ICDM. 2008: 263-272.
[7] Mnih A, Salakhutdinov R R. Probabilistic matrix factorization. NIPS. 2008: 1257-1264.
[8] Koren Y. Collaborative filtering with temporal dynamics. SIGKDD. 2009: 447-456.
[9] Pilászy I, Zibriczky D, Tikk D. Fast als-based matrix factorization for explicit and implicit feedback datasets. RecSys. 2010: 71-78.
[10] Johnson C C. Logistic matrix factorization for implicit feedback data. NIPS, 2014, 27.
[11] He X, Zhang H, Kan M Y, et al. Fast matrix factorization for online recommendation with implicit feedback. SIGIR. 2016: 549-558.
[12] Hofmann T. Probabilistic latent semantic analysis. UAI. 1999: 289-296.
[13] Blei D M, Ng A Y, Jordan M I. Latent dirichlet allocation. JMLR. 2003, 3(Jan): 993-1022.
[14] Zhang S, Yao L, Sun A, et al. Deep learning based recommender system: A survey and new perspectives. ACM Computing Surveys (CSUR). 2019, 52(1): 5.
[15] Mikolov, Tomas & Chen, Kai & Corrado, G.s & Dean, Jeffrey. Efficient Estimation of Word Representations in Vector Space. Proceedings of Workshop at ICLR. 2013.
[16] Mikolov T, Sutskever I, Chen K, et al. Distributed representations of words and phrases and their compositionality. NIPS. 2013: 3111-3119.
[17] Pennington J, Socher R, Manning C. Glove: Global vectors for word representation. EMNLP. 2014: 1532-1543.
[18] Covington P, Adams J, Sargin E. Deep neural networks for youtube recommendations. RecSys. 2016: 191-198.
[19] Chen T, Guestrin C. Xgboost: A scalable tree boosting system. SIGKDD. 2016: 785-794.
[20] Ke G, Meng Q, Finley T, et al. Lightgbm: A highly efficient gradient boosting decision tree. NIPS. 2017: 3146-3154.
[21] Rendle S. Factorization machines. ICDM. 2010: 995-1000.
更多精彩閱讀:
原理篇 | 推薦系統之矩陣分解模型
科普篇 | 推薦系統之矩陣分解模型
總結
以上是生活随笔為你收集整理的实践篇 | 推荐系统之矩阵分解模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯游戏应邀2019大数据产业峰会BDI
- 下一篇: KDD 2019 | 用户视角看世界: