三
文 | 七月在線
編 | 小七
解析:
本篇記錄在學習隱語義模型的一些總結,隱語義建模;隱語義模型的核心思想;隱語義模型在推薦系統中的應用;隱語義模型與推薦系統的關係;工程中常用的矩陣分解方法
前言
推薦系統中一個重要的分支,隱語義建模。隱語義模型LFM:Latent Factor Model,其核心思想就是通過隱含特徵聯繫用戶興趣和物品。
過程分為三個部分,將物品映射到隱含分類,確定用戶對隱含分類的興趣,然後選擇用戶感興趣的分類中的物品推薦給用戶。它是基於用戶行為統計的自動聚類。
隱語義模型在Top-N推薦中的應用十分廣泛。常用的隱語義模型,LSA(Latent Semantic Analysis),LDA(Latent Dirichlet Allocation),主題模型(Topic Model),矩陣分解(Matrix Factorization)等等。
這些模型是本質上是相通的,目的就是找出潛在的主題或分類。這些技術一開始實在文本挖掘中提出來的。從netflix推薦大賽之後,這些技術被用在推薦領域,並且得到明顯的效果。比如,在推薦系統中,能夠用這些模型將用戶的行為(用戶的偏好)對item進行自動聚類,也就是把item劃分到不同類別/主題,這些主題/類別可以理解為用戶的興趣。
憑藉這種思想,著名的推薦領域大神Yehuda Koren更是憑藉矩陣分解模型勇奪Netflix Prize推薦比賽冠軍,以矩陣分解為基礎,Yehuda Koren在數據挖掘和機器學習相關的國際頂級會議(SIGIR,SIGKDD,RecSys等)發表了很多文章,將矩陣分解模型的優勢發揮得淋漓盡致。實驗結果表明,在個性化推薦中使用矩陣分解模型要明顯優於傳統的基於鄰域的協同過濾(又稱基於記憶的協同過濾)方法,如UserCF、ItemCF等,這也使得矩陣分解成為了之前個性化推薦研究領域中的主流模型。
基本算法與UserCF和ItemCF對比首先通過一個例子來理解一下這個模型,比如說有兩個用戶A和B,目前有用戶的閱讀列表,用戶A的興趣涉及偵探小說,科普圖書以及一些計算機技術書,而用戶B的興趣比較集中在數學和機器學習方面。
那麼如何給A和B推薦圖書呢?
對於UserCF,首先需要找到和他們看了同樣書的其他用戶(興趣相似的用戶),然後在給他們推薦那些用戶喜歡的其他書。
對於ItemCF,需要給他們推薦和他們已經看的書相似的書,比如用戶B 看了很多數據挖掘方面的書,那麼可以給他推薦機器學習或者模式識別方面的書。
還有一種方法,可以對書和物品的興趣進行分類。對於某個用戶,首先得到他的興趣分類,然後從分類中挑選他可能喜歡的物品。
基於興趣分類的方法大概需要解決的問題:如何給物品進行分類?
如何確定用戶對哪些類的物品感興趣,以及感興趣的程度?
對於一個給定的類,選擇哪些屬於這個類的物品推薦給用戶,以及如何確定這些物品在一個類中的權重?
對於第一個問題最簡單的解決方案是找編輯給物品打標籤,或者採用豆瓣的方式,讓用戶自己打標籤。這樣做的確定是,這種打標籤不自動發現類比,還有一點就是編輯的意見並不能達標各種用戶的意見,比如一些書目的劃分是模稜兩可的。這就涉及到分類的粒度不易控制的問題。另外,編輯很難決定一個物品在某一個分類中的權重,比如編輯可以很容易的決定《數據挖掘導論》屬於挖掘類的圖書,但是這本書在這類書中的定位是什麼樣的,編輯就很難給出一個準確的數字來標示。
為了解決上面的問題,研究人員提出:為什麼我們不從數據出發,自動地找到那些類,然後進行個性化推薦,隱語義分析技術因為採取基於用戶行為統計的自動聚類,較好地解決了上面的問題。隱語義分析技術從誕生到今天產生了很多著名的模型和方法,其中和推薦技術相關的有pLSA,LDA,隱含類別模型(latent class model), 隱含主題模型(latent topic model), 矩陣分解(matrix factorization)。
隱語義模型的應用
向用戶推薦物品
在推薦系統中,可以通過隱含語義模型將用戶(user)和物品(item)自動分類,這些類別是自動生成的,這些類比也可以叫做「隱含的分類」,或許我們看不懂分類後的結果。但是採用這種技術後,每個用戶或者物品會被分到多個類別中,屬於某個類別的權重會被計算出來。
假設現在有一個大小為m×n的評分矩陣V,包含了m個用戶對n個物品的評分,評分從0到5,值越大代表越喜歡,0代表沒有打分。設定共有r個隱含的分類。通過一些方法,將V展開為兩個相乘的矩陣:
V = W*H
其中,W的大小為m×r,H的大小為r×n。在隱語義模型中,W(i,j)被解釋為用戶i屬於類別j的權重,H(a,b)被解釋為物品b屬於類別a的的權重。
如果用戶u對物品i沒有評分,可以將這個評分r(u,i)預測為:
r(u,i) = sum(W(i, :) .* H(:, i)) // 向量點乘
據此可以構建一個推薦系統。
文本分類
隱語義模型的另一個常見的應用領域是文本分類,這個類似於上面的推薦系統。在文本分類領域,將文檔和詞用一個矩陣表示,如常見的詞袋模型,文檔-詞矩陣。我們將數據集中的一堆文本構造成文檔-詞矩陣V,如果共有m個文本,n個單詞,那麼V的大小為m*n,V(i,j)表示文檔i中出現單詞j的次數。
設定共有r個隱含的分類。
通過一些方法,將V展開為兩個相乘的矩陣:
V = W*H
其中,W的大小為m×r,H的大小為r×n。在隱語義模型中,W(i,j)被解釋為文檔i屬於類別j的權重,H(a,b)被解釋為單詞b屬於類別a的的權重。
對於一個文檔,其權重最大的類別被看作是該文檔的類別。由於設定共有r個隱含的分類,分類結果也是r個份分類。
採用矩陣分解技術發現兩種實體見潛在的特徵
使用矩陣分解來預測評分的思想來源於,我們可以通過矩陣分解來發現一些用戶打分的潛在特徵,比如兩個人都喜歡某一演員,那他們就傾向於給該演員演的電影打高分;或者兩個都喜歡動作片,假如我們能夠發現這些特徵,我們就能夠預測特定用戶對特定電影的打分。
為了發現不同的特徵,我們假設特徵的數量少於用戶和電影的數量,矩陣分解算法的數學理論基礎是矩陣的行列變換。在《線性代數》中,我們知道矩陣A進行行行變換相當於A左乘以一個矩陣,矩陣A進行列變換等價於矩陣A右乘以一個矩陣,因此矩陣A可以進行矩陣分解,一方面可以起到降低數據維度的作用,另一方面也可以找到潛在的特徵。
矩陣分解可以開來非常好的結果,而且可以充分地考慮各種因素的影響,有非常好的擴展性,因為要考慮各種因素的綜合作用,往往需要構造cost function來將矩陣分解轉換為優化問題。根據要考慮的因素為優化問題其他限制條件,然後通過迭代的方法進行矩陣分解,原來評分矩陣中的missing value可以通過分解後得到的矩陣求得。
pureSVD
其實,矩陣分解的核心是將一個非常稀疏的評分矩陣分解為兩個矩陣,一個表示用戶user的特性,一個表示item的特性,將兩個矩陣各自取一行一列向量做內積就可以得到對應評分。那麼如何將一個矩陣分解為兩個矩陣就是唯一的問題啦。
這裡可以借用在線性代數和數值分析中學到的各種矩陣分解方法,如QR, Jordan,三角分解,SVD。這裡說明下 svd方法的大概意思:將一個任意實矩陣分解為桑格矩陣U,S,V,其中U , V 是兩個正交矩陣,稱為左右奇異矩陣,S是個對稱陣,稱為奇異值矩陣。
Latent Factor Model
這是真正的矩陣分解算法,經過實踐檢驗,具有非常高的準確性和易擴展性。正如上面提到的,實現推薦系統結果的目標是將那個稀疏的評分矩陣分解成為兩個矩陣,一個表示user的feature,一個表示item的feature,然後做內積得到預測。
當然要實現滿足一定約束條件的矩陣分解,不像上面的pureSVD那麼容易,需要構造一個優化問題,用一些複雜的算法求最優化問題。而這些最優化問題往往是NP問題,只有局部最優解。首先構造一個優化目標函數,考慮到最後的評價指標是預測分值與實際分值之間的誤差的平方(RMSE),所以構造的目標函數也是誤差的平方的函數。為什麼這樣的算法可以得到更優的結果呢?因為算法可以很容易地擴展很多的feature進來,更加出色地考慮了多種影響推薦效果的實實在在的因素。
Biases 用戶評分的偏見:
因為有的用戶總是會打出比別人高的分,或者說有的用戶他的評價尺度比較寬鬆,同樣有的item總是被打高分,所以在真正實
踐中,構造目標函數需要增加幾項:所有評分的平均值miu,user的偏見分數,item的偏見分數。
implicit feedback 隱式反饋數據
用戶在使用web應用的時候,會產生大量的行為,充分挖掘這部分的價值,將會很好的提升推薦的效果,利用用戶的隱式反
饋,相當於充分的利用評分矩陣中的missing value的價值,用戶在頁面的停留時間,檢索,瀏覽,點擊等等各種行為都可
以建模到目標函數中。在看到的論文中,這裡,可以將簡單的用一個boolean來描述一種行為有還是沒有。補過在使用的使用
需要進行歸一化處理。
User-associated attributes
基於用戶的社會化屬性進行推薦也是一種很基本的推薦,當然也可以考慮到目標函數中。
Temporal dynamics
用戶的興趣包括長期和短期,動態地考慮一段時間內用戶的興趣是很有必要的。
Confidence level
因為在處理上述的因素的時候,很多都是比較主觀的,所以需要給每個因素添加一個置信權重,以平衡整個結果。
通過構造出這個目標函數,然後添加相應的約束條件,接下來的問題就是求解這個優化問題,通常比較好的方法是 隨機梯度下降算法(Stochastic gradient desent)
這種方法在學術上主流的方法,參考http:research.yahoo.com/Yehuda_Koren以及上海交大在kddcup的論文集開源系統http://apex.sjtu.edu.cn/apex_wiki/svdfeature
非負矩陣分解
基本原理:NMF,非負矩陣分解,它的目標很明確,就是將大矩陣分解為兩個小矩陣,使得這兩個小矩陣相乘後能夠還原到大矩陣。而非負表示分解的矩陣都不包含負值。從應用的角度來說,矩陣分解能夠用於發現兩種實體間的潛在特徵,一個最常見的應用就是協同過濾中的預測打分值,而從協同過濾的這個角度來說,非負也很容易理解:打分都是正的,不會出現負值。
考慮到svd或者latent factor model 會得到負值的情況,所以非負矩陣分解的物理意義比較明確。同樣的道理,NMF也是將評分矩陣的轉置矩陣分解成兩個矩陣。*不同的是這兩個矩陣有著和上面的矩陣不同的物理意義。其中一個是基矩陣W,另一個是投影矩陣H,即R(nm)=W(nr)H(r*m)。
W:每一列包含一個基向量,這組基向量構成一個r維的空間。
H:每一列則近似為原始數據對應的列向量在該r維空間的投影。
做這個分解的方法也是構造一個目標函數和一些約束條件,然後用梯度下降的算法計算得到一個局部最優解。這種方法的大概思路
1 將評分矩陣轉置然後分解稱為兩個矩陣W和H。
2 根據基矩陣W,可以計算得到目標用戶評分向量a對基矩陣W的投影向量h.
3 計算投影向量h與投影矩陣H各行之間的歐氏距離,將其中距離最小的前k個用戶組成目標用戶a的最近鄰集合。
4 然後用皮爾遜講最近鄰集合中的數據進行加權計算,然後拍下進行推薦。
這種方法的思路和上面的兩種還是不同相同的,主要是在計算目標用戶的最近鄰集合,主要思想還是knn,只是在中間用了矩陣分解的方法降低了計算的時間複雜度。
參考:blog.csdn.net/zyvscc/article/details/7551842
www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html
【電商推薦系統特訓】
8 節實訓課➕共享社群答疑➕源碼
六大實戰項目,從零開始
1月20日開課(下周三)
火熱報名中
課程詳情
戳一戳
☟
購買,諮詢,查看課程,請點擊【閱讀原文】
↓ ↓ ↓