原理篇 | 推荐系统之矩阵分解模型
導語:本系列文章一共有三篇,分別是
《科普篇 |?推薦系統之矩陣分解模型》
《原理篇 |?推薦系統之矩陣分解模型》
《實踐篇 |?推薦系統之矩陣分解模型》
第一篇用一個具體的例子介紹了MF是如何做推薦的。第二篇講的是MF的數學原理,包括MF模型的目標函數和求解公式的推導等。第三篇回歸現實,講述MF算法在圖文推薦中的應用實踐(將于后續發布)。下文是第二篇——《原理篇 | 推薦系統之矩陣分解模型》,敬請閱讀。
上一篇我們用一個簡單的例子講述了矩陣分解(Matrix Factorization, MF)是如何做推薦的,但沒有深入到算法的細節。如果想編寫自己的代碼實現MF,那么就需要了解其中的細節了。本文是MF系列的第二篇文章,主要介紹了顯式矩陣分解和隱式矩陣分解的數學原理,包括模型思想、目標函數、優化求解的公式推導等,旨在為需要了解算法細節的同學提供參考。
MF用到的用戶行為數據分為顯式數據和隱式數據兩種。顯式數據是指用戶對item的顯式打分,比如用戶對電影、商品的評分,通常有5分制和10分制。隱式數據是指用戶對item的瀏覽、點擊、購買、收藏、點贊、評論、分享等數據,其特點是用戶沒有顯式地給item打分,用戶對item的感興趣程度都體現在他對item的瀏覽、點擊、購買、收藏、點贊、評論、分享等行為的強度上。
顯式數據的優點是行為的置信度高,因為是用戶明確給出的打分,所以真實反映了用戶對item的喜歡程度。缺點是這種數據的量太小,因為絕大部分用戶都不會去給item評分,這就導致數據非常稀疏,同時這部分評分也僅代表了小部分用戶的興趣,可能會導致數據有偏。隱式數據的優點是容易獲取,數據量很大。因為幾乎所有用戶都會有瀏覽、點擊等行為,所以數據量大,幾乎覆蓋所有用戶,不會導致數據有偏。其缺點是置信度不如顯式數據的高,比如瀏覽不一定代表感興趣,還要看強度,經常瀏覽同一類東西才能以較高置信度認為用戶感興趣。
根據所使用的數據是顯式數據還是隱式數據,矩陣分解算法又分為兩種[4,6]。使用顯式數據的矩陣分解算法稱為顯式矩陣分解算法,使用隱式數據的矩陣分解算法稱為隱式矩陣分解算法。由于矩陣分解算法有眾多的改進版本和各種變體[4,5,6,7,8,9,10,11],本文不打算一一列舉,因此下文將以實踐中用得最多的矩陣分解算法為例,介紹其具體的數據原理,這也是spark機器學習庫mllib中實現的矩陣分解算法[4,6]。從實際應用的效果來看,隱式矩陣分解的效果一般會更好。
在本系列第一篇文章中,我們提到,矩陣分解算法的輸入是user對item的評分矩陣(圖1等號左邊的矩陣),輸出是User矩陣和Item矩陣(圖1等號右邊的矩陣),其中User矩陣的每一行代表一個用戶向量,Item矩陣的每一列代表一個item的向量。User對item的預測評分用它們的向量內積來表示,通過最小化預測評分和實際評分的差異來學習User矩陣和Item矩陣。
圖1
2.1 目標函數
為了用數學的語言定量表示上述思想,我們先引入一些符號。設rui?表示用戶u?對item i?的顯式評分,當rui?>0時,表示用戶u?對item i?有評分,當rui?=0時,表示用戶u?對item i?沒有評分,xu?表示用戶u?的向量,yi?表示item i?的向量,則顯式矩陣分解的目標函數為:
其中xu?和yi?都是k?維的列向量,k?為隱變量的個數,
是所有xu?構成的矩陣,
為所有yi?構成的矩陣,N?為用戶數,M?為item數,λ為正則化參數。
在上述公式中,
為用戶向量與物品向量的內積,表示用戶u?對物品i?的預測評分,目標函數通過最小化預測評分和實際評分rui?之間的殘差平方和,來學習所有用戶向量和物品向量。這里的殘差項只包含了有評分的數據,不包括沒有評分的數據。目標函數中第二項是L2正則項,用于保證數值計算穩定性和防止過擬合。
2.2 求解方法:
求解X?和Y?采用的是交替最小二乘法(alternative least square, ALS),也就是先固定X?優化Y?,然后固定Y?優化X?,這個過程不斷重復,直到X?和Y?收斂為止。每次固定其中一個優化另一個都需要解一個最小二乘問題,所以這個算法叫做交替最小二乘方法。
(1)Y?固定為上一步迭代值或初始化值,優化X?:
此時,Y?被當做常數處理,目標函數被分解為多個獨立的子目標函數,每個子目標函數對應一個用戶。對于用戶u?,目標函數為:
這里面殘差項求和的個數等于用于u?評過分的物品的個數,記為m?個。把這個目標函數化為矩陣形式,得?
其中,
表示用戶u?對這m?個物品的評分構成的向量,
表示這m?個物品的向量構成的矩陣,順序跟Ru?中物品的順序一致。
對目標函數J關于xu?求梯度,并令梯度為零,得:
解這個線性方程組,可得到xu?的解析解為:
(2) X?固定為上一步迭代值或初始化值,優化Y:
此時,X?被當做常數處理,目標函數也被分解為多個獨立的子目標函數,每個子目標函數對應一個物品。類似上面的推導,我們可以得到yi?的解析解為:
其中,
表示n?個用戶對物品i?的評分構成的向量,
表示這n?個用戶的向量構成的矩陣,順序跟Ri?中用戶的順序一致。
2.3 工程實現
當固定Y?時,各個xu?的計算是獨立的,因此可以對xu?進行分布式并行計算。同理,當固定X 時,各個yi?的計算也是獨立的,因此也可以對yi?做分布式并行計算。因為Xi?和Yu?中只包含了有評分的用戶或物品,而非全部用戶或物品,因此xu?和yi?的計算時間復雜度為O(k2nu+k3)其中nu?是有評分的用戶數或物品數,k?為隱變量個數。
隱式矩陣分解與顯式矩陣分解的一個比較大的區別,就是它會去擬合評分矩陣中的零,即沒有評分的地方也要擬合。
3.1 目標函數
我們仍然用rui?表示用戶u?對物品i?的評分,但這里的評分表示的是行為的強度,比如瀏覽次數、閱讀時長、播放完整度等。當rui?>0時,表示用戶u?對物品i有過行為,當rui?=0時,表示用戶u?對物品i沒有過行為。首先,我們定義一個二值變量pui?如下:
這個pui?是一個依賴于rui?的量,用于表示用戶u?對物品i?是否感興趣,也稱為用戶偏好。當用戶u?對物品i?有過行為時,我們認為用戶u?對物品i感興趣,此時pui?=1;當用戶u?對物品i?沒有過行為時,我們認為用戶u?對物品i?不感興趣,此時pui?=0。
模型除了要刻畫用戶對物品是否感興趣外,而且還要刻畫感興趣或不感興趣的程度,所以這里的隱式矩陣分解還引入了置信度的概念。從直觀上來說,當rui?>0時,rui?越大,我們越確信用戶u?喜歡物品i?,而當rui?=0時,我們不能確定用戶u?是否喜歡物品i?,沒有行為可能只是因為用戶u?并不知道物品i?的存在。
因此,置信度是rui?的函數,并且當rui?>0時,置信度是rui?的增函數;當rui?=0時,置信度取值要小。論文中給出的置信度cui?的表達式為:
當rui?>0時,cui?關于rui?線性遞增,表示對于有評分的物品,行為強度越大,我們越相信用戶u?對物品i?感興趣;當rui?=0時,置信度恒等于1,表示對所有沒有評分的物品,用戶不感興趣的置信度都一樣,并且比有評分物品的置信度低。用xu?表示用戶u?的向量,yi?表示item i?的向量,引入置信度以后,隱式矩陣分解[6]的目標函數為:
其中xu?和yi?都是k?維的列向量,k?為隱變量的個數,
是所有xu?構成的矩陣,
為所有yi?構成的矩陣,N?為用戶數,M?為item數,λ為正則化參數。目標函數里的內積用于表示用戶對物品的預測偏好,擬合實際偏好pui,擬合強度由cui??控制。并且對于pui?=0的項也要擬合。目標函數中的第二項是正則項,用于保證數值計算穩定性以及防止過擬合。
3.2 求解方法
目標函數的求解仍然可以采用交替最小二乘法。具體如下:
(1)Y?固定為上一步迭代值或初始化值,優化X?:
此時,Y?被當做常數處理,目標函數被分解為多個獨立的子目標函數,每個子目標函數都是某個xu?的函數。對于用戶u?,目標函數為:
把這個目標函數化為矩陣形式,得
其中,
為用戶u?對每個物品的偏好構成的列向量,
表示所有物品向量構成的矩陣,Λu?為用戶u?對所有物品的置信度cui?構成的對角陣,即:
對目標函數J?關于xu?求梯度,并令梯度為零,得:
解這個線性方程組,可得到xu?的解析解為:
(2) X?固定為上一步迭代值或初始化值,優化Y:
此時,X?被當做常數處理,目標函數也被分解為多個獨立的子目標函數,每個子目標函數都是關于某個yi?的函數。通過同樣的推導方法,可以得到yi?的解析解為:
其中,
為所有用戶對物品i?的偏好構成的向量,
表示所有用戶的向量構成的矩陣,Λi?為所有用戶對物品i?的偏好的置信度構成的對角矩陣,即
3.3 工程實現
由于固定Y?時,各個xu?的求解都是獨立的,所以在固定Y?時可以并行計算各個xu,同理,在固定X時可以并行計算各個yi?。
在計算xu?和yi?時,如果直接用上述解析解的表達式來計算,復雜度將會很高。以xu?的表達式來說,Y?Λu?YT?這一項就涉及到所有物品的向量,少則幾十萬,大則上千萬,而且每個用戶的都不一樣,每個用戶都算一遍時間上不可行。所以,這里要先對xu?的表達式化簡,降低復雜度。
注意到Λi?的特殊性,它是由置信度構成的對角陣,對于一個用戶來說,由于大部分物品都沒有評分,以此Λi?對角線中大部分元素都是1,利用這個特點,我們可以把Λi?拆成兩部分的和,即
其中I為單位陣,Λu?- I?為對角陣,并且對角線上大部分元素為0,于是,可以重寫為如下形式:
分解成這兩項之后,第一項Y YT?對每個用戶都是一樣的,只需要計算一次,存起來,后面可以重復利用,對于第二項,由于Λu?- I?為對角線大部分是0的對角陣,所以計算Y?(Λu?- I?)YT?的復雜度是O(k2nu)。其中nu?是Λu?- I?中非零元的個數,也就是用戶u?評過分的物品數,通常不會很多,所以整個Y?ΛuYT的計算復雜度由O(k2M)?降為O(k2nu)。由于M>>nu,所以計算速度大大加快。對于xu?表達式的Y?Λu?Pu這一項,則應Y?(?Λu?Pu)?這樣計算,利用Pu?中大部分元素是0的特點,將計算復雜度由O(kM?)?降低到O(knu)。通過使用上述數學技巧,整個xu的計算復雜度可以降低到O(k2nu+k3),其中nu是有評分的用戶數或物品數,k?為隱變量個數,完全滿足在線計算的需求。
無論是顯式矩陣分解,還是隱式矩陣分解,我們在模型訓練完以后,就會得到訓練集里每個用戶的向量和每個物品的向量。假設現在有一個用戶,在訓練集里沒出現過,但是我們有他的歷史行為數據,那這個用戶的向量該怎么計算呢?當然,最簡單的方法就是把這個用戶的行為數據合并到舊的訓練集里,重新做一次矩陣分解,進而得到這個用戶的向量,但是這樣做計算代價太大了,在時間上不可行。
為了解決訓練數據集以外的用戶(我們稱之為新用戶)的推薦問題,我們就需要用到增量矩陣分解算法。增量矩陣分解算法能根據用戶歷史行為數據,在不重算所有用戶向量的前提下,快速計算出新用戶向量。
在交替最小二乘法里,當固定Y?計算xu?時,我們只需要用到用戶u?的歷史行為數據rui?以及Y?的當前值,不同用戶之間xu的計算是相互獨立的。這就啟發我們,對于訓練集以外的用戶,我們同樣可以用他的歷史行為數據以及訓練集上收斂時學到的Y,來計算新用戶的用戶向量。下面的圖2表示了這一過程。
增量矩陣分解
設用戶歷史行為數據為Pu={Pui?},訓練集上學到的物品矩陣為Y,要求解的用戶向量為xu,則增量矩陣分解算法求解的目標為:
這個目標函數跟第3節中固定Y?時求解xu?的目標函數是一樣的,但有兩個不同點:
(1)這里的Y?是不需要迭代的,它是MF在訓練集上收斂時得到的Y;
(2)用戶的歷史行為數據Pu?要過濾掉在Y中沒出現過的物品。由于Y?是固定的,我們不需要迭代,直接通過xu?的解析表達式求解xu,即:
式中的所有符號和上一節相同。
事實上,增量矩陣分解的目標函數中的Y?也不一定要是MF在訓練集上學出來的,只要Y?中的每個向量都能表示對應物品的特征就行,也就是說,Y?可以是由其他數據和其他算法事先學出來的。矩陣分解的增量算法在圖文推薦系統中有著廣泛應用,具體的應用將在下一篇文章中介紹。
好的推薦算法不僅要推得準確,而且還要有良好的可解釋性,也就是根據什么給用戶推薦了這個物品。傳統的ItemCF算法就有很好的可解釋性,因為在ItemCF中,用戶u?對物品i?的預測評分R?(u, i?)?的計算公式為
其中N(u?)?表示用戶u?有過行為的物品集合,ruj?表示用戶u?對物品j?的歷史評分,sji?表示物品j?和物品i?的相似度。在這個公式中,N(u?)?中的物品j?對R(u, i )?的貢獻為ruj?sji,因此可以很好地解釋物品i?具體是由N(u)?中哪個物品推薦而來。那對于矩陣分解算法來說,是否也能給出類似的可解釋性呢?答案是肯定的。
以隱式矩陣分解為例,我們已經推導出,已知物品的矩陣Y?時,用戶u?的向量的計算表達式為:
假設物品i?的向量為yi,那么用戶u?對物品i?的預測評分為:
令
并把Y?Λu?Pu?展開來寫,則的表達式可以寫成
其中,
可以看成是物品j?和物品i?之間的相似度,
可以看成是用戶u?對用戶j的評分,這樣就能像ItemCF那樣去解釋N(u?)中每一項對推薦物品i?的貢獻了。從sji?的計算表達式中,我們還可以看到,物品j?和物品i?之間的相似度sji?是跟用戶u?有關系的,也就是說,即使是相同的兩個物品,在不同用戶看來,它們的相似度是不一樣的,這跟ItemCF的固定相似度有著本質上的區別,MF的相似度看起來更合理一些。
6.小結
(1)根據用戶行為數據的特點,矩陣分解又分為顯式矩陣分解和隱式矩陣分解兩種;
(2)在顯式MF算法中,用戶向量和物品向量的內積擬合的是用戶對物品的實際評分,并且只擬合有評分的項;
(3)在隱式MF算法中,用戶向量和物品向量的內積擬合的是用戶對物品的偏好(0或1),擬合的強度由置信度控制,置信度又由行為的強度決定;
(4)在隱式MF中,需要使用一些數學技巧降低計算復雜度,才能滿足線上實時計算的性能要求;
(5)對于有行為數據,但不在訓練集里的用戶,可以使用增量MF算法計算出他的用戶向量,進而為他做推薦;
(6)MF算法也能像ItemCF一樣,能給出推薦的理由,具有良好的可解釋性。
[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.
更多精彩閱讀:
科普篇 | 推薦系統之矩陣分解模型
總結
以上是生活随笔為你收集整理的原理篇 | 推荐系统之矩阵分解模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 科普篇 | 推荐系统之矩阵分解模型
- 下一篇: 实践篇 | 推荐系统之矩阵分解模型