資料科學個人筆記:推薦系統之推薦演算法(基於圖+隱語義)
一、隱語義模型(LFM演算法)
(一)基礎演算法
隱語義分析採取基於使用者行為統計的自動聚類,計算出使用者和隱類的關係和物品和隱類的關係。
此處使用LFM演算法,通過如下公式計算使用者u對物品i的興趣:
Preference(u,i)=r(ui)=sum(p(u,k)*q(i,k))
p(u,k)和q(i,k)時模型的引數,分別度量了類別與使用者和物品的關係。
我們優化以下的損失函式來找到最合適的引數p和q:
C=sum[r(ui)-sum(p(u,k)*q(i,k))]^2+lamda*||pu||^2+lamda*||qi||^2
隨機梯度下降的更新公式如下:
p(u,k)=p(u,k)+alfa*(qik*eui-lamda*p(u,k))
q(i,k)=q(i,k)+alfa*(puk*eui-lamda*q(i,k))
(二)負取樣的方式
對每個使用者未行為的熱門物品設定為負樣本;保證正負樣本的平衡,負樣本比例高時召回和準確率提升但挖掘常委物品的能力下降。
(三)LFM的問題及改進
難以實現實時的推薦,每次訓練都需要掃描所有的使用者行為記錄。訓練耗時,一半隻能每天訓練一次。改進的預測演算法如下:r(ui)=x(u)^T*y(i)+p(u)^T*q(i),其中向量x(u)表示u使用者對各內容特徵的興趣程度,可以根據歷史行為記錄獲得,每天只需計算以測。y(i)是根據物品內容屬性直接生成的向量。P(u)和q(i)通過最近幾小時的行為訓練LFM模型獲得。
(四)LFM和基於鄰域的方法比較
1.LFM有比較好的理論基礎,有優化學習過程,協同過濾主要是統計方法。
2.離線計算的空間複雜度:在物品數和使用者數數量大的情況下,隱語義模型能很好地節省離線計算的記憶體。
3.離線計算的時間複雜度:LFM在物品數過多的情況下時間複雜度太高。
4.ItemCF的推薦解釋強於LFM。
二、基於圖的模型
(一)使用者行為的二分圖模型
令G(V,E)表示使用者物品二分圖,V由使用者頂點Vu和物品頂點Vi組成,使用者與物品間有邊E說明使用者對物品有過行為。
(二)基於圖的推薦模型
1.度量Vu和Vi的相關性時,相關性高的一對頂點一般具有如下特徵:
(1)兩個頂點之間有很多路徑相連;
(2)連線兩個頂點之間的路徑長度都比較短;
(3)連線兩個頂點之間的路徑不會經過出度比較大的頂點。
2.基於隨機遊走的PersonalRank演算法:
要對使用者u進行推薦,可以從其對應頂點Vu開始在二分圖上隨機遊走,遊走到任何一個節點時按照概率alfa決定繼續遊走並從當前節點開始按照均勻分佈隨機選擇一個節點作為下次的節點,還是停止這次遊走並從Vu節點開始重新遊走。經過多次隨機遊走後,每個物品節點被訪問到的概率會收斂到一個數。
3.PersonalRank的演算法評價
(1)評價:
該演算法有比較好的理論解釋,但演算法在時間複雜度上有明確缺陷,需要在整個圖上迭代直到收斂,不僅無法實時推薦,甚至離線生成推薦結果也很耗時。
(2)解決方法:
第一種就是在收斂之前停止減少迭代次數。另一種方法是從矩陣論出發重新設計演算法。
將轉移矩陣寫為M(v,v”)=1/|out(v)|。
矩陣r=(1-alfa)r0+alfa*M^T*r,即r=(1-alfa)*(1-alfa*M^T)^(-1)*r0
(三)時間段圖模型(路徑融合演算法)
1.頂點的型別
時間段圖模型也是一個二分圖,一個使用者時間段節點Vut會和使用者其在時刻t喜歡的物品通過邊相連(但無需與使用者相連),一個物品時間段節點Vit會和武平在時刻t喜歡它的使用者通過邊相連(但無需與物品相連)。
2.頂點的權重sigma(v)屬於(0,1]:
Sigma=1-alfa(使用者頂點) 或 alfa(使用者時間段點) 或1-beta(物品頂點) 或 beta(物品時間段點)
alfa和beta是控制各頂點權重的引數。
3.路徑的權重:T(P)=sigma(vn)*連乘([sigma(vi)*w(vi,v(i+1))]/|out(vi)|^s),即路徑權重=終點權重*連乘(各點權重*該點到下一點邊的權重/各點出度的s次方),各邊權重均為1。
4.頂點相關度:連線兩個頂點各路徑權重的和。
5.路徑融合演算法可以基於廣度優先搜尋演算法實現。
(四)基於圖的社會化推薦演算法
1.在使用者物品二分圖中增加使用者間的好友邊。使用上文中的PersonalRank。使用者和使用者相似度的alfa倍為使用者間邊權重,使用者和物品興趣度的beta倍為使用者和物品間邊權重。Alfa大則好友行為對推薦結果影響大,beta大則歷史行為對推薦結果影響大。
2.增加好友邊後再增加社群頂點,並與使用者進行連線。使用上文中的PersonalRank。
(五)基於圖結合標籤的推薦演算法
在使用者物品二分圖中加標籤頂點,並連線使用者和物品及標籤。若兩點間已有邊,則權重+1。使用上文中的PersonalRank。