科普篇 | 推荐系统之矩阵分解模型
導語:本系列文章一共有三篇,分別是
《科普篇 |?推薦系統之矩陣分解模型》
《原理篇 |?推薦系統之矩陣分解模型》
《實踐篇 |?推薦系統之矩陣分解模型》
第一篇用一個具體的例子介紹了MF是如何做推薦的。第二篇講的是MF的數學原理,包括MF模型的目標函數和求解公式的推導等。第三篇回歸現實,講述MF算法在圖文推薦中的應用實踐。三篇文章由淺入深,各有側重,希望可以幫助到大家。下文是第一篇——《科普篇 |?推薦系統之矩陣分解模型》,第二篇和第三篇將于后續發布,敬請期待。
矩陣分解(Matrix Factorization, MF)是推薦系統領域里的一種經典且應用廣泛的算法。在基于用戶行為的推薦算法里,矩陣分解算法是效果最好方法之一,曾在推薦比賽中大放異彩,成就了不少冠軍隊伍。推薦算法發展至今,MF雖然已經比不過各種CTR模型和深度CTR模型,但是它依然在推薦系統中發揮著重要作用,在召回系統和特征工程中,都可以看到它的成功應用。本文是MF系列中的第一篇,用一個簡單的例子講解了MF是如何做推薦的,旨在科普。
推薦系統要做的事情是為每個用戶找到其感興趣的item推薦給他,做到千人千面。下面以音樂推薦為例,講述矩陣分解是如何為用戶找到感興趣的item的。
1.1 收集數據,構造評分矩陣
矩陣分解算法是基于用戶行為的算法,為此我們需要先獲取用戶的歷史行為數據,然后以此為依據去預測用戶可能感興趣的item。下面的圖1是我們收集到的用戶行為。
圖1
如圖1所示,我們用一個矩陣來表示收集到的用戶行為數據,這個數據集一共有24個用戶,9首歌曲。矩陣中第i?行第j?列的數字代表第i??個用戶對第j?首歌曲的播放行為,1代表有播放,空白代表無播放(一般用0表示)。比如,用戶1播放過“成都”、“董小姐”,用戶8播放過“洗白白”和“抓泥鰍”。我們把這個矩陣稱為評分矩陣。這里所說的評分不是用戶的顯式打分,而是指用戶是否有播放。用戶行為數據有一個特點,就是一個用戶的興趣通常只會分布在少數幾個類別上,像這里的用戶1到用戶7只喜歡民謠歌曲,用戶8到用戶14只喜歡兒歌,用戶15到21只喜歡草原風,用戶22只喜歡民謠和兒歌,等等。由于用戶一般只會播放少數幾首歌曲,因此這個矩陣大部分都是0(空白),是一個十分稀疏的矩陣。
1.2 分解評分矩陣
矩陣分解算法要做的事情就是去預測出矩陣中所有空白處的評分,并且使得預測評分的大小能反映用戶喜歡的程度,預測評分越大表示用于越可能喜歡。這樣我們就可以把預測評分最高的前K首歌曲推薦給用戶了。
簡單來說,矩陣分解算法是把評分矩陣分解為兩個矩陣乘積的算法,如下圖2所示。
圖2
在圖2中,等號的左邊是評分矩陣,也就是圖1的那個矩陣,是已知數據,它被MF算法分解為等號右邊的兩個矩陣的乘積,其中一個被稱為User矩陣,另一個被稱為Item矩陣。如果評分矩陣有n?行m?列(即n個用戶,m個item),那么分解出來的User矩陣就會有n?行k?列,其中,第i?行構成的向量用于表示第i?個用戶。Item矩陣則有k?行m?列,其中,第j?列構成的向量用于表示第j?個item。這里的k是一個遠小于n?和m?的正整數。當我們要計算第i?個用戶對第j?個item的預測評分時,我們就可以用User矩陣的第i行和Item矩陣的第j?列做內積,這個內積的值就是預測評分了。
那MF是如何從評分矩陣中分解出User矩陣和Item矩陣的呢?簡單來說,MF把User矩陣和Item矩陣作為未知量,用它們表示出每個用戶對每個item的預測評分,然后通過最小化預測評分跟實際評分的差異,學習出User矩陣和Item矩陣。也就是說,圖2中只有等號左邊的矩陣是已知的,等號右邊的User矩陣和Item矩陣都是未知量,由MF通過最小化預測評分跟實際評分的差異學出來的。
比如說,在上述音樂推薦的例子中,圖1中的評分矩陣可以被MF算法分解為如下User矩陣和Item矩陣的乘積,這里的k?取3。
圖3
其中,User矩陣共有24行,每行對應一個用戶的向量,而Item矩陣共有9列,每列對應一首歌曲的向量。
仔細觀察User矩陣可以發現,用戶的聽歌愛好會體現在用戶向量上。比如說,從圖1的評分矩陣中,我們知道用戶1到用戶7這群用戶喜歡聽民謠類的歌曲,對于這群用戶,MF學出來的用戶向量的特點是第1維的值最大。類似地,用戶8到用戶14這群用戶喜歡聽兒歌,MF學出來的用戶向量的特點是第2維的值最大。而用戶15到用戶21喜歡聽草原風,他們的用戶向量的第3維最大。對于那些有2種興趣的用戶,比如用戶22,他喜歡聽民謠和兒歌,他的用戶向量則會在第1和第2維上較大。
再來觀察Item矩陣,我們也會發現,歌曲的風格也會體現在歌曲的向量上。比如說,對于民謠類的歌曲,它們的向量第1維最大,對于兒歌,它們的第2維最大,對于草原風,它們的向量的第3維最大。
用戶向量和歌曲向量的這種特性其實是由MF的目標函數決定的。因為MF用user向量和item向量的內積去擬合評分矩陣中該user對該item的評分(例子中的0和1),所以內積的大小反映了user對item的喜歡程度。用戶向量和歌曲向量在相同的維度上越匹配,內積就越大,反之內積就越小。這就導致了學出來的用戶向量和歌曲向量的每一維取值的大小都代表了一定意義。比如在上述例子中,MF學到的每一維就代表了一個不同的歌曲類別,這里的民謠、兒歌、草原風其實是我們根據每一維的數據特點,為了好理解而人為地給每個類別起的名字,實際上MF學出來的每一維不一定都能有這么好的解釋,很多時候甚至可能都無法直觀地解釋每一維,但每一維的確又代表了一個類別,因此我們把這種類別稱為隱類別,把用戶向量和歌曲向量中的每一維稱為隱變量。所以矩陣分解是一種隱變量模型。隱類別的個數是要我們事先指定的,也就是上面的那個k,k?越大,隱類別就分得越細,計算量也越大。
另外,我們在例子中也可以看到,描述一個用戶的聽歌興趣可以用評分矩陣中一個9維的稀疏向量來表示(每一維代表一首歌曲),也可以用MF學出來的用戶向量來描述用戶聽歌興趣。前者是以歌曲為粒度來描述用戶聽歌興趣,后者是以隱類別為粒度來描述用戶聽歌興趣。由于隱類別的個數遠遠小于歌曲的總數,因此,MF是一種降維方法,把歌曲的維度降到隱類別的維度,然后在隱類別上匹配用戶和歌曲去做推薦。
1.3 計算內積,排序,推薦
因為用戶向量和歌曲向量的內積等于預測評分,所以在我們學出User矩陣和Item矩陣之后,把這兩個矩陣相乘,就能得到每個用戶對每首歌曲的預測評分了,評分值越大,表示用戶喜歡該歌曲的可能性越大,該歌曲就越值得推薦給用戶。下面的圖4給出了圖3中的User矩陣和Item矩陣相乘的結果,我們把它稱為預測評分矩陣。
圖4
如圖4所示,User矩陣和Item矩陣相乘得到的預測評分矩陣中每個元素都是非零的,它把圖1的原始評分矩陣中原本為空的地方都填上數字了。對于用戶1到用戶7,他們的MF向量和前3首民謠的MF向量最匹配,所以它們的內積較大,但跟兒歌和草原風歌曲的MF向量都不匹配,所以它們的內積較小。同理,其余用戶也有類似的結論。我們用不同顏色把預測評分矩陣中值較大的區域標注了出來,可以看到,對于用戶喜歡的類別(體現在歷史有播放過該類別的歌曲),該類別下的歌曲的預測評分都比較大,反之,預測評分都比較小。這就說明了,MF學習出來的用戶向量和歌曲向量,可以很準確地刻畫用戶的聽歌興趣和歌曲的類別屬性,通過它們的內積能有效地為用戶找到感興趣的歌曲。
在實際使用時,我們一般是先用MF對評分矩陣做分解,得到User矩陣和Item矩陣。對于某個用戶,我們把他的用戶向量和所有item向量做內積,然后按內積從大到小排序,取出前K?個item,過濾掉歷史item后推薦給用戶。
至此,我們通過這個音樂推薦的例子,以形象但不十分嚴謹的方式,把矩陣分解模型如何做推薦的方法介紹完了。因為這是一篇科普性質的文章,其主要目的是給非推薦領域的讀者簡單介紹矩陣分解方法如何做推薦,所以它只講述了矩陣分解算法的基本思想和做法,不會涉及具體數學公式。如果想進一步了解其中的算法細節和數學原理,可以繼續參考本系列的第二篇文章。
(1)MF把用戶對item的評分矩陣分解為User矩陣和Item矩陣,其中User矩陣每一行代表一個用戶的向量,Item矩陣的每一列代表一個item的向量;
(2)用戶i?對item j?的預測評分等于User矩陣的第i?行和Item矩陣的第j?列的內積,預測評分越大表示用戶i?喜歡item j?的可能性越大;
(3)MF是把User矩陣和Item矩陣設為未知量,用它們來表示每個用戶對每個item的預測評分,然后通過最小化預測評分和實際評分的差異學習出User矩陣和Item矩陣;
(4)MF是一種隱變量模型,它通過在隱類別的維度上去匹配用戶和item來做推薦。
(5)MF是一種降維方法,它將用戶或item的維度降低到隱類別個數的維度。
[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.
總結
以上是生活随笔為你收集整理的科普篇 | 推荐系统之矩阵分解模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 决战9小时,产品上线的危机时刻
- 下一篇: 原理篇 | 推荐系统之矩阵分解模型