① Neural Collaborative Filtering(神經協同過濾)
論文討論的主要是隱性反饋協同過濾解決方案,先來明確兩個概念:顯性反饋和隱性反饋:
顯性反饋行為包括用戶明確表示對物品喜好的行為
隱性反饋行為指的是那些不能明確反應用戶喜好
舉例來說:
很多應用場景,並沒有顯性反饋的存在。因為大部分用戶是沉默的用戶,並不會明確給系統反饋「我對這個物品的偏好值是多少」。因此,推薦系統可以根據大量的隱性反饋來推斷用戶的偏好值。
根據已得到的隱性反饋數據,我們將用戶-條目交互矩陣Y定義為:
但是,Yui為1僅代表二者有交互記錄,並不代表用戶u真的喜歡項目i,同理,u和i沒有交互記錄也不能代表u不喜歡i。這對隱性反饋的學習提出了挑戰,因為它提供了關於用戶偏好的雜訊信號。雖然觀察到的條目至少反映了用戶對項目的興趣,但是未查看的條目可能只是丟失數據,並且這其中存在自然稀疏的負反饋。
在隱性反饋上的推薦問題可以表達為估算矩陣 Y中未觀察到的條目的分數問題(這個分數被用來評估項目的排名)。形式上它可以被抽象為學習函數:
為了處理缺失數據,有兩種常見的做法:要麼將所有未觀察到的條目視作負反饋,要麼從沒有觀察到條目中抽樣作為負反饋實例。
傳統的求解方法是矩陣分解(MF,Matrix Factorization),為每個user和item找到一個隱向量,問題變為:
這里的 K表示隱式空間(latent space)的維度。正如我們所看到的,MF模型是用戶和項目的潛在因素的雙向互動,它假設潛在空間的每一維都是相互獨立的並且用相同的權重將它們線性結合。因此,MF可視為隱向量(latent factor)的線性模型。
論文中給出了一個例子來說明這種演算法的局限性:
1(a)是user-item交互矩陣,1(b)是用戶的隱式空間,論文中強調了兩點來理解這張圖片:
1)MF將user和item分布到同樣的隱式空間中,那麼兩個用戶之間的相似性也可以用二者在隱式空間中的向量夾角來確定。
2)使用Jaccard系數來作為真實的用戶相似性。
通過MF計算的相似性與Jaccard系數計算的相似性也可以用來評判MF的性能。我們先來看看Jaccard系數
上面的示例顯示了MF因為使用一個簡單的和固定的內積,來估計在低維潛在空間中用戶-項目的復雜交互,從而所可能造成的限制。解決該問題的方法之一是使用大量的潛在因子 K (就是隱式空間向量的維度)。然而這可能對模型的泛化能力產生不利的影響(e.g. 數據的過擬合問題),特別是在稀疏的集合上。論文通過使用DNNs從數據中學習交互函數,突破了這個限制。
論文先提出了一種通用框架:
針對這個通用框架,論文提出了三種不同的實現,三種實現可以用一張圖來說明:
GMF :
上圖中僅使用GMF layer,就得到了第一種實現方式GMF,GMF被稱為廣義矩陣分解,輸出層的計算公式為:
MLP :
上圖中僅使用右側的MLP Layers,就得到了第二種學習方式,通過多層神經網路來學習user和item的隱向量。這樣,輸出層的計算公式為:
NeuMF :
結合GMF和MLP,得到的就是第三種實現方式,上圖是該方式的完整實現,輸出層的計算公式為:
論文的實驗用於回答以下研究問題:
RQ1 我們提出的NCF方法是否勝過 state-of-the-art 的隱性協同過濾方法?
RQ2 我們提出的優化框架(消極樣本抽樣的log loss)怎樣為推薦任務服務?
RQ3 更深的隱藏單元是不是有助於對用戶項目交互數據的學習?
接下來,首先介紹實驗設置,其次是回答上述三個問題。
數據集使用了兩個公開的數據集:MovieLens 和 Pinterest 兩個數據集,它們的特徵總結在表1中
1.MovieLens :這個電影評級數據集被廣泛地用於評估協同過濾演算法。論文使用的是包含一百萬個評分的版本,每個用戶至少有20個評分。 雖然這是顯性反饋數據集,但論文有意選擇它來挖掘(模型)從顯式反饋中學習隱性信號的表現。為此,論文將其轉換為隱式數據,其中每個條目被標記為0或1表示用戶是否已對該項進行評級。
2.Pinterest :這個隱含的反饋數據的構建用於評估基於內容的圖像推薦。原始數據非常大但是很稀疏。 例如,超過20%的用戶只有一個pin(pin類似於贊一下),使得難以用來評估協同過濾演算法。 因此,論文使用與MovieLens數據集相同的方式過濾數據集:僅保留至少有過20個pin的用戶。處理後得到了包含55,187個用戶和1,580,809個項目交互的數據的子集。 每個交互都表示用戶是否將圖像pin在自己的主頁上。
評估方案 : 為了評價項目推薦的性能,論文採用了leave-one-out方法(留一法)評估,該方法已被廣泛地應用於文獻。即:對於每個用戶,論文將其最近的一次交互作為測試集(數據集一般都有時間戳),並利用餘下的培訓作為訓練集。由於在評估過程中為每個用戶排列所有項目花費的時間太多,所以遵循一般的策略,隨機抽取100個不與用戶進行交互的項目,將測試項目排列在這100個項目中。排名列表的性能由命中率(HR)和歸一化折扣累積增益(NDCG)來衡量。 沒有特別說明的話,論文將這兩個指標的排名列表截斷為10。如此一來,HR直觀地衡量測試項目是否存在於前10名列表中,而NDCG通過將較高分數指定為頂級排名來計算命中的位置。論文計算了每個測試用戶的這兩個指標,並求取了平均分。
−ItemPop 。按項目的互動次數判斷它的受歡迎程度,從而對項目進行排名。 這對基於評估推薦性能來說是一種非個性化的方法。
−ItemKNN 。這是基於項目的標准協同過濾方法。
−BPR 。該方法優化了使用公式的MF模型,該模型具有成對排序損失,BPR調整它使其可以從隱式反饋中學習。它是項目推薦基準的有力競爭者。論文使用固定的學習率,改變它並報告了它最佳的性能。
−eALS 。這是項目推薦的 state-of-the-art 的MF方法。
HR(命中率)和 NDCG(歸一化折損累計增益),HR直觀地衡量測試項目是否存在於前10名列表中,而NDCG通過將較高分數指定為頂級排名來計算命中的位置,重點介紹NDCG
NDCG這個名字可能比較嚇人,但背後的思想卻很簡單.一個推薦系統返回一些item並形成一個列表,我們想要計算這個列表有多好,每一項都有一個相關的評分值,通常這些評分值是一個非負數,這就是gain(增益).此外對於這些沒有用戶反饋的項我們通常設置起增益為0.
累計增益(CG)
我們將這些增益相加就是Cumulative Gain(累計增益,CG),CG就是將每個推薦結果相關性的分支累加後作為整個推薦列表的得分.
rel i 表示處於位置i的推薦結果的相關性,k表示要考察的推薦列表的大小.
折損累計增益(DCG)
CG的一個缺點是沒有考慮每個推薦結果處於不同位置對整個推薦效果的影響,例如我們總是希望相關性高的結果應該排在前面 .顯然,如果相關性低的結果排在靠前的位置會嚴重影響用戶的體驗,所以在CG的基礎上引入位置影響因素,即DCG(Discounted Cumulative Gain),這里指的是對於排名靠後推薦結果的推薦效果進行「打折處理」。假設排序越往後,價值越低。到第i個位置的時候,它的價值是 1/log 2 (i+1),那麼第i個結果產生的效益就是 rel i * 1/log 2 (i+1),所以::
從上面的式子可以得到兩個結論:
1.推薦結果的相關性越大,DCG越大
2.相關性好的排在推薦列表前面的話,推薦效果越好,DCG越大.
歸一化折損累計增益(NDCG)
DCG仍然有不足之處,即 不同的推薦的推薦列表之間,很難進行橫向的評估,而我們評估一個推薦系統不可能僅使用一個用戶的推薦列表及相應結果進行評估,而是對整個測試機中的用戶及其推薦列表結果進行評估 .那麼不同的用戶的推薦列表的評估分數就需要進行歸一化,也即NDCG(Normalized Discounted Cumulative Gain,歸一化折損累計增益).
在介紹NDCG之前還需要知道另一個概念,IDCG(Ideal DCG),指推薦系統為某一用戶返回的最好推薦結果列表,即假設返回結果按照相關性排序,最相關的結果放在前面,此序列的DCG為IDCG.因此DCG的值介於(0,IDCG],故NDCG的值介於(0,1]。NDCG計算公式:
IDCG為理想情況下最大的DCG值。
其中 |REL| 表示,結果按照相關性從大到小的順序排序,取前p個結果組成的集合。也就是按照最優的方式對結果進行排序。
實際的例子
假設推薦系統返回來的5個結果,其模型評分分別是 1.2、0.7、0.1、0.2、4.0。
我們首先通過公式4.2計算出DCG值為2.39278,按照公式4.4來計算出iDCG的值為3.6309
最後通過公式4.3計算出NDCG為65%
更多的推薦模型評估方法參考: https://statusrank.coding.me/articles/639f7364.html
圖4(Figure 4)顯示了 HR@10 和 NDCG@10 相對於預測因素數量的性能。
圖5(Figure 5)顯示了Top-K推薦列表的性能,排名位置K的范圍為1到10。
總的來看論文提出的NeuMF模型(結合GMF和MLP)效果不錯,對比其他方法都要好。
Figure 6 表示將模型看作一個二分類任務並使用logloss作為損失函數時的訓練效果。
Figure7 表示采樣率對模型性能的影響(橫軸是采樣率,即負樣本與正樣本的比例)。
上面的表格設置了兩個變數,分別是Embedding的長度K和神經網路的層數,使用類似網格搜索的方式展示了在兩個數據集上的結果。增加Embedding的長度和神經網路的層數是可以提升訓練效果的。
② 大數據項目之電影推薦系統(上)
電影推薦系統設計:此項目依託於MovieLens數據集與某科技公司電影網站的真實業務數據架構,構建了一個集成離線與實時推薦體系的電影推薦系統。系統綜合協同過濾演算法與基於內容推薦的方法,提供混合推薦,涵蓋了前端應用、後台服務、演算法設計實現與平台部署的全方位閉環業務實現。
用戶可視化:主要功能在於實現用戶交互與業務數據展示,通過AngularJS2進行前端開發,並部署在Apache伺服器上;綜合業務服務,基於JavaEE進行整體業務邏輯實現,由Spring框架構建,對接業務需求,部署在Tomcat伺服器。
項目數據流程:系統初始化,離線推薦與實時推薦的流程設計,以及業務系統的集成。
數據模型:包含電影數據表、用戶評分表、電影標簽表、用戶表等關鍵表,以及最近電影評分個數統計表、電影評分個數統計表、電影平均評分表、電影相似性矩陣、用戶電影推薦矩陣、用戶實時電影推薦矩陣等。
創建項目並初始化業務數據:主體使用Scala語言編寫,IDEA作為開發環境,Maven作為項目構建和管理工具。在IDEA中創建maven項目,命名為MovieRecommendSystem,構建結構並初始化業務數據。
數據載入准備:將數據文件復制至資源文件目錄,並定義樣例類,通過SparkContext從文件讀取數據至DataFrame,利用Spark SQL進行分布式插入。
離線推薦服務建設:離線推薦服務基於歷史數據,利用離線演算法和推薦演算法進行周期性結果統計與保存。服務主要分為統計性演算法、基於ALS的協同過濾推薦演算法以及基於ElasticSearch的內容推薦演算法。離線服務主要提供統計、基於ALS的推薦矩陣和電影相似性矩陣。
基於LFM的離線推薦模塊:採用ALS演算法進行協同過濾推薦,計算用戶電影推薦矩陣和電影相似度矩陣。生成用戶電影推薦矩陣與電影相似度矩陣,分別用於用戶推薦和實時推薦系統。
模型評估和參數選取:通過計算均方根誤差(RMSE)對模型進行評估,並通過調整參數值選取最優模型參數。
項目整體通過明確的體系架構、數據流程、模型構建與評估,實現了高度集成的電影推薦系統,旨在提供精準、高效的電影推薦服務。
③ 個性化推薦演算法——協同過濾
有三種:協同過濾
用戶歷史行為
物品相似矩陣