推薦系統學習筆記

漫談“推薦系統”  http://youngfor.me/post/recsys/man-tan-tui-jian-xi-tong
  下面的大部分文字內容轉自@復旦李斌的博客,非常白話的review了推薦系統領域的一些研究內容以及存在的挑戰,其中穿插了一些自己理解筆記,以及添加了一些互聯網上其他相關資料(如,七月在線)。

1.背景:

  先談談問題背景,故事是這樣的:互聯網出現後,隨着網上內容的增加,好學的小夥伴們發現很多他們不懂的姿勢網上都有,可互聯網不像圖書館搞個書目索引就行,於是出現了搜索引擎幫助小夥伴們在茫茫互聯網上找到他們感興趣的東西,但條件是你必須知道你想要什麼,然後提取成關鍵字去搜,所謂信息檢索(Information Retrieval)。十年過去了,信息爆炸了,問題出現了,搜索引擎動輒返回幾十萬個結果,或者有些想要的信息卻根本不知道它的存在,甚至根本不知道如何用關鍵詞描述你想要的東西,這時推薦系統應運而生——小夥伴們不用自己去找,推薦系統就會根據小夥伴們的個人資料歷史紀錄從海量信息中自動篩選符合小夥伴們口味的內容進行推薦,所謂推薦系統(Recommender Systems)。如今,推薦系統已經無處不在,幾乎所有的網絡服務都集成了推薦系統。在此我就不提那些學術圈老掉牙的例子什麼Netflix電影推薦啊Google新聞推薦啊Yahoo!廣告推薦啊什麼的了;我瞄了下自己的手機舉幾個例子吧:微博朋友推薦、蝦米音樂推薦、LinkedIn工作推薦、YouTube視頻推薦、大衆點評餐館推薦、等等。
  既然要談的是推薦“技術”,那麼我得先把推薦問題用數學語言形式化了。淡定淡定,推薦問題形式化後非常簡單幹淨——就三個矩陣(從這裏往下得有一丟丟想像力,能在腦海裏想象簡單的矩陣操作)。最重要的一個矩陣是評分或偏好矩陣(Rating/Preference Matrix),其每一行對應一個用戶,每一列對應一件物品,矩陣中的任一元素就是某用戶對某物品的感興趣程度(評分可以用正整數表示,點贊神馬的可以用0/1表示),不失一般性,下面我們僅基於評分矩陣討論。這個評分矩陣是極其稀疏的,因爲每個用戶只可能對很少一部分物品打分。第二個矩陣是用戶信息矩陣,每一行對應一個用戶,每一列對應一個用戶屬性(如年齡、職業、地區、標籤等)。第三個矩陣是物品信息矩陣,每一行對應一件物品,每一列對應一個物品屬性(如電影的流派、導演、演員等)。推薦問題的目標就是:基於給定的三個矩陣,把評分矩陣中缺失元素的評分預測出來,並基於預測出來的評分把得分高的物品推薦給相應用戶。這裏值得注意的是,只有評分矩陣是所有推薦技術所必需的,用戶信息矩陣與物品信息矩陣這兩者是可選的。真實推薦系統面臨最大的挑戰是評分矩陣的大規模與稀疏性。
  總結:推薦系統包含評分矩陣,用戶信息矩陣和物品信息矩陣;推薦系統的目標是對於某個用戶通過對該用戶的用戶屬性找最相關的人或對該用戶接觸過的物品找最相關的物品推薦給他。下面是具體的分類。

2.推薦系統分類:

  接下來我把一些當前常用的推薦技術分門別類。推薦技術可先分爲三大類:基於人口統計的推薦技術(Demography-based)、基於物品內容的推薦技術(Content-based)、以及基於協同過濾的推薦技術(Collaborative Filtering,簡稱CF)。基於人口的又包括基於用戶資料的(User Profile)和基於信任關係的(社交網絡上的好友關係)等。基於物品內容的又可細分爲基於元數據的(即Metadata,比如電影的流派、導演、演員等)和基於內容數據的(比如視頻數據、音頻數據)等——真實應用大多是基於元數據的,基於內容數據的推薦系統由於語義鴻溝(Semantic Gap)和效率問題,做了幾十年,一直未突破(深度學習能突破麼,拭目以待呵呵)。雖然基於人口和基於內容的兩大類推薦技術在實際中的應用極廣而且效果在某些應用場景下不比第三類技術協同過濾差,那爲什麼協同過濾技術一躍成爲當今主流的推薦技術了呢?有以下幾方面原因:1)協同過濾問題相當乾淨,只需要一個評分矩陣,不需要用戶信息與物品信息,這解決了用戶物品信息缺失場景下的推薦問題。2)協同過濾問題的本質是矩陣補全問題(Matrix Completion),也就是把一個稀疏矩陣的缺失元素給估計出來,這是機器學習中一個經典問題,除了推薦之外還有無數的應用都可歸結爲矩陣補全問題,所以機器學習的高速發展也促進了協同過濾技術。3)2006年Netflix發起的那個百萬美元大獎功不可沒,直接上演了持續多年相關研究領域全民做推薦的激情歲月,雖然這個競賽使用了一個完全誤導的評價指標來判斷推薦算法的優劣(使用的是RMSE指標,這是一個評價迴歸的指標,而推薦問題事實上是一個排序問題)。跑題了,接着分類。協同過濾技術可以繼續分爲基於記憶的(Memory-based)和基於模型的(Model-based)。基於記憶的繼續可分爲基於用戶的(User-based)和基於物品的(Item-based);而基於模型的可以繼續分爲基於矩陣分解的(Matrix Factorization)和基於聯合聚類的(Co-clustering)。基於記憶的協同過濾技術使用的是K-近鄰(K-Nearest Neighbors)的思想,而基於模型的協同過濾技術使用的是機器學習方法。分類結束。
  總結:主要分爲三類:1.基於人口(具體分爲:用戶屬性相同的人和關係親密的人);2.基於元數據(即物品信息內容);3.協同過濾(分爲基於記憶(和前面一樣基於用戶和基於內容),基於模型的)。
   真實系統都是使用的混合策略(Hybrid Strategy),多爲基於人口、基於元數據、以及基於用戶或物品的協同過濾推薦技術的各種組合。基於模型的協同過濾雖然使用了高端大氣上檔次的機器學習方法,但做過真實應用的同學都懂的,簡單粗暴纔是王道,提出並改進一個模型連發三篇頂級機器學習會議論文提高了一個百分點,往往不如真實系統中屌絲程序員在哪疙瘩加個莫名的閾值來得有效。那爲什麼頂尖互聯網企業都在搞機器學習呢?這麼說吧,五百的衣服和五萬的衣服功能都是一樣的,但是地位高到一定程度,除了衣服的基本功能外我們還會追求一些其它的東西。但是如果只是想基於推薦技術做一個網絡服務神馬的,就沒必要搞那麼玄的機器學習花樣了,反而大規模計算的效率問題和推薦應用本身是否有市場前景是更應該考慮的,有了這些,最基本的基於人口統計與基於記憶的推薦技術就能搞定大多數應用。貌似跑題了,接着說混合策略。有些混合策略是對不同推薦技術的結果加權相加(Weighting);有些是根據場景不同在不同技術間跳轉(Switching),比如新用戶基於人口統計老用戶基於協同過濾;有些是一個網頁上不同區域同時顯示不同推薦技術的結果(Mixing);有些是用一個推薦技術對另一個推薦技術輸出的結果進行提升(Cascading)。
  除了基於模型的協同過濾技術外,其它的推薦技術在原理上都相對簡單,使用一些相關查詢和啓發式算法就能解決。這段就把除基於模型的協同過濾以外的推薦技術都簡單介紹下。首先是基於人口統計學的,該類推薦技術需要基於用戶信息矩陣和評分矩陣。原理很簡單,就是查找用戶信息矩陣中背景類似的用戶,然後把對應評分矩陣中打高分的物品推薦給背景類似的用戶。舉個例子,用戶信息上顯示兩個人年齡相仿居於灣區互聯網從業者,於是系統就會認爲這兩人相關性強會有共同愛好,把其中一人打高分的電影推薦給另一個。這種推薦技術的優點是簡單,一些相關性查詢操作就能搞定,而且沒有“冷啓動(Cold-start)”問題(即用戶缺失歷史評分紀錄);缺點是無法個性化推薦,基於人口統計相似度的假設太強,比如同爲IT男,一個技術宅,一個僞文青,你把技術宅喜歡的東西推薦給僞文青肯定是不靠譜的,比如我排斥一切XX俠的電影。接下來是基於物品內容的推薦技術,該類推薦技術需要基於物品信息矩陣和評分矩陣(這裏只討論基於元數據的,基於真實內容的開門課都講不完)。該類推薦技術的原理也很簡單,基於元數據計算物品之間的相關性,然後把與該用戶以前打高分的物品最相關的物品推薦給他。這類推薦技術比前一種靠譜,因爲用戶在同類物品上一般會表現出相同的興趣程度。舉個例子,我如果對《巴黎我愛你》打了個高分,那麼推薦系統就會向我推薦強關聯的《紐約我愛你》,而我也會對同一血統的電影很感興趣。因此,該類技術的優點就是對偏好的建模較爲精細與準確;缺點是依賴於物品元數據包含的信息量,在冷啓動問題(需要用戶的歷史評分)。接下來介紹基於記憶的協同過濾技術,該類推薦技術的標準問題設置僅需要評分矩陣,當然近年來學術界有些關於遷移學習(Transfer Learning)在推薦系統中的研究會使用到用戶與物品的信息矩陣、甚至使用另一個域的評分矩陣(我以前在推薦系統中的工作主要在這塊,感興趣的同學可以用谷歌百度下一個二頁紙的小文“Cross-Domain Collaborative Filtering: A Brief Survey”),但這裏我們只討論標準的協同過濾問題設置。
  這裏寫圖片描述
  基於用戶的協同過濾分爲兩步:第一步是計算用戶之間的相關度,這裏的相關度是評分矩陣行向量間的相關度,其直觀意義就是如果兩個用戶在相同物品上打的分越接近,那麼這兩個用戶的偏好也越接近。如果評分矩陣是一個沒有缺失項的滿矩陣,那麼行向量之間的相似度直接可以用歐式距離或者夾角餘弦計算;由於評分矩陣是稀疏矩陣,因此計算相關性首先要把兩個行向量之間的交集(打過分的物品)找出來,並只在該交集上計算一個類似夾角餘弦的值,叫作皮爾森相關係數(Pearson Correlation Coefficients)。在取得了與所有用戶兩兩之間的相關性後,第二步就是預測該用戶的缺失評分。給定一個待預測用戶,找到他的K-近鄰用戶集合,他的缺失評分就是用其K-近鄰用戶對應物品上的歷史評分用相關性加權平均得到。基於物品的協同過濾和基於用戶的是對稱的,一個是對行操作,一個是對列操作,方法和原理都是一樣的。
  總結:基於人口的推薦是對人的外部屬性或者關係親密的人找相同的人,並將其喜歡的推薦給目標用戶;基於元數據的推薦是對某個人接觸過的物品的屬性找相關的物品推薦給他(會出現冷啓動的問題,如某個用戶剛進來);協同過濾中的基於用戶和基於物品的推薦都是針對評分矩陣進行操作(加權求和得到),而協同過濾中基於模型的方法(也叫隱語義模型)認爲人購買一個東西是因爲一些隱藏的因素導致的,所以將原來的評分矩陣拆分成兩個矩陣(用戶和隱藏因子矩陣;物品和隱藏因子矩陣)(常見的SVD方法),如下圖所示:
  基於物品和用戶的系統過濾對比
這裏寫圖片描述

基於隱語義模型的推薦系統:

這裏寫圖片描述
這裏寫圖片描述 
  這裏寫圖片描述 
  這裏寫圖片描述 
這裏寫圖片描述 
使用梯度下降這裏就和傳統的線性迴歸差不多,爲避免過擬合一般會加上正則項。
    這裏寫圖片描述
加上正則化的目標函數變換爲:
這裏寫圖片描述
雖然正則化可以避免過擬合,但是每個人打分都存在一些習慣,如習慣打高分。同時,電影也可能會因爲本身導致分數存在偏差,如好萊塢大片可能習慣得高分。所以,爲了儘可能的消除人和電影的客觀因素,對人和電影分別加上偏差,以及最後的正則項,最後的目標函數變爲:
這裏寫圖片描述
這裏寫圖片描述    
下圖是比賽別人的效果對比圖,從圖中可以看出,協同過濾的推薦整體優於基於事物屬性或人的屬性來推薦的方案。此外,通過對隱語義模型加上正則項,bias項,以及時間(上下文信息)是優於前幾種方案的。
這裏寫圖片描述     
  從這裏往後的內容主要將介紹基於模型的協同過濾技術。在大多數推薦系統的介紹中一般直接就把基於模型與矩陣分解等同起來了,因爲應用到實際推薦系統中的基於模型的推薦技術一般都是基於矩陣分解的,比如Netflix百萬大獎得主提出的(Time)SVD++方法(但事實上前幾名所用的方法都是很多種算法集成的結果,所以說研究歸研究,在實際應用中乾淨優美的模型很難超越東拼西湊再加點人腦規則的四不像,這個道理我早在八年前做TRECvid的時候就總結出來了,當時直接導致我放棄多媒體研究直到現在一直對計算機視覺抱有悲觀態度)。又跑題了,繼續說基於模型的推薦技術。除了矩陣分解,這裏我還要額外介紹一種基於聯合聚類的技術,所謂聯合聚類,就是對用戶與物品(即評分矩陣的行與列)同時聚類,聚類的方法可以是簡單的K-Means,但更優美的建模方法是雙向混合模型——我個人非常喜歡這種建模方式,雖然對於評分預測的性能沒有基於矩陣分解的好(因爲矩陣分解的目標就是擬合評分而混合模型的目標是估計用戶與物品在潛在類型上的分佈)。  
  先說基於矩陣分解的方法吧。給定一個評分矩陣(大小爲N*M),把該矩陣分解爲兩個矩陣的乘積,一個是用戶特徵矩陣(大小爲N*K),一個是物品特徵矩陣(大小爲M*K),其中潛在特徵(latent features)的維度遠小於用戶數與物品數;目標函數就是兩個特徵矩陣的重構與給定評分矩陣在那些可見評分上的值儘可能接近,一般使用矩陣範數(Frobenius norm),即兩個矩陣相減所有元素上殘差平方和;再加上對兩個特徵矩陣的矩陣範數作爲正則化項。改優化問題常用兩種方法解決:一種是交替最小二乘(Alternative Least Squares),交替優化用戶特徵矩陣與物品特徵矩陣,在優化其一的時候固定另一個的值視其爲已知,這樣就相當於每輪解決一個標準的最小二乘問題,最後收斂到局部最優解。該方法的優點是收斂速度快,缺點是需要對用戶數與物品數大小的方正求逆,難以規模化。另一種是隨機梯度下降(Stochastic Gradient Descent),對每個用戶與每個物品(評分矩陣的行與列)分別求偏導建立牛頓迭代公式,然後用可見評分順序對這些迭代公式進行更新。該方法的優點是可以並行化、效率高,目前大規模矩陣分解都是用的這種優化算法;缺點可能是收斂速度沒有第一種快(這點我不是很確定)。最後說說這種形式矩陣分解的物理含義。這樣分解成兩部分後,就相當於用戶和物品都被放置到一個潛在的K維特徵空間,只要擁有相似潛在特徵的用戶與物品,他們的夾角就小乘積就大得到的預測評分也就相應更高。那麼憑什麼我們能指定一個“潛在的K維特徵空間”呢?拿Pandora的音樂推薦舉例子,每個音樂有幾百條“音樂基因”就是音樂的顯式特徵(不知道音樂基因的可以去古歌百度一下Music Gene Project)。如果不降維的話,那麼音樂特徵矩陣和用戶特徵矩陣的緯度就是其真實的特徵緯度。假設我們基於主成分分析(PCA)用相同的一套基分別對這兩個矩陣進行線性變換,那麼得到的兩個矩陣就可以認爲是投影到潛在特徵空間的兩個矩陣,而這兩個矩陣的乘積和原來的兩個矩陣是一樣的(因爲當中兩個投影矩陣的乘積是單位矩陣)。那麼假如我們只用前K個基投影呢?那我們就得到了只有K維潛在特徵空間的低秩矩陣。所以在實際問題中,我們都不需要知道真實的特徵空間,只需要人爲指定一個K維潛在特徵空間就可以了,得出的結果可以認爲是真實特徵經過某個線性變化後投影到一個低維潛在特徵空間。
  最後介紹基於聯合聚類的方法。這類方法的物理意義更直觀,其實也能表示成爲矩陣分解的形式,但不同的是聯合聚類把評分矩陣(大小爲N*M)分解爲三部分,一個是用戶隸屬度矩陣(N*K),表示每個用戶在K個潛在用戶組上的分佈情況,所有元素爲正每行加起來爲1;一個是物品隸屬度矩陣(M*L),表示每個物品在L個潛在物品組上的分佈情況,所有元素爲正每行加起來爲1;還有一個是壓縮評分矩陣(K*L),表示某個用戶組對某個物品組給的評分。使用這三個矩陣的乘積重構評分矩陣可以對缺失評分進行預測。解決該問題最簡單的方法是分別對行與列進行K-Means聚類,然後用戶與物品隸屬度矩陣就根據聚類結果把對應的組設爲1其它爲0(硬聚類),而壓縮評分矩陣是每個聯合聚類中評分的平均值。更一般性的建模方法是令兩個隸屬度矩陣爲在潛在組別上的分佈(軟聚類),這需要使用期望最大(Expectation-Maximization)算法解決;進一步地考慮貝葉斯,由於隸屬度就是Dirichlet分佈,那麼其實該聯合聚類問題可以使用Latent Dirichlet Allocation的變種建模,叫作Bi-LDA,使用吉布斯採樣解決。這類方法的具體細節就不介紹了。  
  至此爲止,基本的推薦技術大體都過了一遍了。剩下的就是解決協同過濾技術中的各種挑戰,比如興趣隨時間與環境變化問題、矩陣稀疏問題、冷啓動問題、噪聲問題、大規模矩陣分解問題等等,這些“挑戰”也是近年來學術界寫論文的切入點。但其實在工業界,這些所謂的挑戰大多都不是問題,或是可以用替代方案解決、或是對結果真正的影響不大。我個人覺得無論是學術界還是工業界,當前最重要的問題還是大規模矩陣分解問題(我也無法免俗大數據啊),各路神仙也從不同的突破點去解決這個問題,有使用分佈式計算的、有提出加速優化算法的、有使用近似哈希算法的等等。在我的短期課程中,針對這些挑戰的一些解決方案也佔了很大的比重,但是這裏就不一一累述了,用純文字描述個問題都得花半頁紙。其實我本來還想談一下在線推薦系統,也是如今精準廣告投放背後的核心技術,但是也因爲問題的設置和協同過濾有很大的不同,技術上也幾乎沒有什麼交集,就不展開了。在線推薦系統的主要技術是一大類被稱爲Multi-Armed Bandits(MAB)的方法——沒錯就是老虎機!廣告投放就像賭博,你選哪個廣告投放出去都會有不同的回報,隨着一次又一次的嘗試,從失敗中吸取教訓,慢慢學習到背後隱含的規律,之後就可以保持大概率的贏面。MAB的在線學習策略遵循的是“開採(Exploitation)”與“探索(Exploration)”,一邊儘量投注之前贏面較大的廣告,一邊又不停嘗試其它未知底細的廣告以發現更高的贏面——這不就像是人生麼?有些人覺得現狀不錯就一直保持着開採狀態,而有些人則時不時探索一下,也許會走一些彎路,可或許在一段彎路過後會發現比以前更好的一條路;更何況,人生並不只是用最後累積到的財富來論成敗,沿途的風景,妙不可言的或是痛徹心扉的,都是人生獨一無二的財富。

下面轉自:http://www.sohu.com/a/202017547_197042

2. 推薦系統的結構(Structure)

儘管不同的網站使用不同的推薦系統,但是總的來說,幾乎所有的推薦系統的結構都是類似的,都由線上和線下兩部分組成。線下部分包括後臺的日誌系統和推薦算法系統,線上部分就是我們看到的前臺頁面展示。線下部分通過學習用戶資料和行爲日誌建立模型,在新的上下文背景之下,計算相應的推薦內容,呈現於線上頁面中。

3. 推薦引擎算法(Algorithm)

3.1 協同過濾推薦算法

3.1.1 關係矩陣與矩陣計算

在一個推薦系統中,存在三類關係:用戶與用戶(U-U矩陣)物品與物品(V-V矩陣)用戶與物品(U-V矩陣)

  • U-U矩陣

  • 算法原理

在基於用戶相似度的協同過濾中,用戶相似度的計算是基本前提。Pearson相關係數主要用於度量兩個變量 i 和 j 之間的相關性,取值範圍是+1(強正相關)到-1(強負相關),計算公式爲:

式中,爲用戶 i 和 j 共同評價過的物品的集合,c 是這個集合中的物品元素,是用戶 j 對物品 c 的評價值,爲用戶 i 對物品 c 的評價值,分別表示用戶 i 和 j 對物品的平均評價值。

  • 算法流程

算法輸入:用戶行爲日誌。

算法輸出:基於協同的用戶相似度矩陣。

A. 從用戶行爲日誌中獲取用戶與物品之間的關係數據,即用戶對物品的評分數據。

B. 對於n個用戶,依次計算用戶1與其他n-1個用戶的相似度;再計算用戶2與其他n-2個用戶的相似度。對於其中任意兩個用戶 i 和 j :

a) 查找兩個用戶共同評價過的物品集

b) 分別計算用戶 i 和對物品 j 的平均評價

c) 計算用戶間相似度,得到用戶 i 和 j 的相似度。

C. 將計算得到的相似度結果存儲於數據庫中。

  • V-V矩陣

  • 算法原理

在基於物品相似度的協同過濾中,物品相似度的計算是基本前提。將物品的評價數值抽象爲n維用戶空間中的列向量 ,使用修正的餘弦相似度,計算公式爲:

式中,爲對物品共同評價過的用戶的集合, 是用戶 u 對物品的評價值,分別表示用戶對物品的平均評價值。

  • 算法流程

算法輸入:用戶行爲日誌。

算法輸出:基於協同的物品相似度矩陣。

A. 從用戶行爲日誌中獲取用戶與物品之間的關係數據,即用戶對物品的評分數據。

B.對於n個物品,依次計算物品1與其他n-1個物品的相似度;再計算物品2與其他n-2個物品的相似度。對於其中任意兩個物品 i 和 j:

a)查找對物品 i 和 j 共同評價過的用戶集

b)分別計算用戶對物品 i 和 j 的平均評價

c) 計算物品間相似度,得到物品 i 和 j 的相似度。

C. 將計算得到的相似度結果存儲於數據庫中。

  • U-V矩陣

在真實的推薦系統中,一方面U-V矩陣的行列數會隨着用戶和物品數量變得龐大,另一方面,因爲用戶實際上只能對有限數量的物品做出評價,所以U-V矩陣的內部會非常稀疏。系統在直接處理這些龐大稀疏矩陣時,耗費的時間、內存和計算資源都十分巨大。因此需要採取降低計算複雜度的方法。矩陣分解技術是一種有效降低矩陣計算複雜的方法,它的實質是將高維矩陣進行有效降維。

  • 奇異值分解(SVD)

SVD將給定矩陣分解爲3個矩陣的乘積:

式中,矩陣爲對角陣,其對角線上的值 爲矩陣M的奇異值,按大小排列,代表着矩陣M的重要特徵。將SVD用在推薦系統上,其意義是將一個係數的評分矩陣M分解爲表示用戶特性的U矩陣,表示物品特性的V矩陣,以及表示用戶和物品相關性的矩陣。

  • 主成分分析(PCA)

在推薦系統中,對於有較多屬性的物品(物品的信息用向量 表示)可用PCA處理進行降維,將m×n的物品矩陣轉化爲m×k的新矩陣。

3.1.2 基於記憶的協同過濾算法

  • 基於用戶的協同過濾算法

基於用戶的協同過濾(user-based collaborative filtering)算法是推薦系統中最古老的算法,產生於1992年,最初應用於郵件過濾系統,1994年被GroupLens用於新聞過濾。在此之後直到2000年,該算法都是推薦系統領域最著名的算法。

  • 算法原理

什麼是基於用戶的協同過濾算法?舉個簡單的例子,我們知道櫻桃小丸子喜歡葡萄、草莓、西瓜和橘子,而我們通過某種方法瞭解到小丸子和花倫有相似的喜好,所以我們會把小丸子喜歡的而花倫還未選擇的水果(葡萄和橘子)推薦給花倫。

通過上面的例子我們可以做出如下總結:假設用戶爲,物品的評分爲,基於用戶的協同過濾算法主要包含以下兩個步驟:

A. 蒐集用戶和物品的歷史信息,計算用戶u和其他用戶的相似度

,找到和目標用戶Ui興趣相似的用戶集合N(u)

B.找到這個集合中用戶喜歡的,且目標用戶還沒有聽說過的物品推薦給目標用戶。

  • 算法流程

算法輸入:用戶行爲日誌,基於協同的用戶相似性矩陣。

算法輸出:初始推薦結果

A.訪問用戶行爲日誌,獲取近期變化的用戶ID集合U。

B.針對集合U中每個用戶 u:

a) 訪問用戶相似矩陣,獲取與用戶相似的用戶合集N(u)。

b)對於N(u)中的每一個用戶ui:

獲取與用戶ui有關聯的物品合集

針對物品合集中的每個物品,計算用戶偏好值。

c)對集M(u)中的所有物品進行按照用戶偏好進行加權、去重、排序。

d) 取Top-N個物品,爲每個物品賦予解釋。

e) 保存Top-N個物品到初始推薦列表中。

  • 適用性

由於需計算用戶相似度矩陣,基於用戶的協同過濾算法適用於用戶較少的場合; 由於時效性較強,該方法適用於用戶個性化興趣不太明顯的領域。

  • 基於物品的協同過濾算法

基於物品的協同過濾(item-based collaborative filtering)算法是目前業界應用最多的算法。無論是亞馬遜網,還是Netflix、Hulu、Youtube,其推薦算法的基礎都是該算法。

  • 算法原理

基於物品的協同過濾算法給用戶推薦那些和他們之前喜歡的物品相似的物品。比如,我們知道櫻桃小丸子和小玉都喜歡葡萄和西瓜,那麼我們就認爲葡萄和西瓜有較高的相似度,在花倫選擇了西瓜的情況下,我們會把葡萄推薦給花倫。

ItemCF算法並不利用物品的內容屬性計算物品之間的相似度,它主要通過分析用戶的行爲記錄計算物品之間的相似度。該算法認爲,物品A和物品B具有很大的相似度是因爲喜歡物品A的用戶大都也喜歡物品B。

假設用戶爲,物品的評分爲,基於物品的協同過濾算法主要分爲兩步:

A.對於目標用戶及其待評分的物品,根據用戶對物品的歷史偏好數據,計算物品與其他已評分物品之間的相似度 Sim(j,i),找到與物品相似度的物品合集N(u);

B. 根據所有物品 N(u) 的評分情況,選出N(u)中目標用戶可能喜歡的且沒有觀看過的推薦給目標用戶並預測評分。

式中,爲用戶 u 對物品 i 的評分,是用戶 u 對他買過的物品的平均打分。

  • 算法流程

算法輸入:用戶行爲日誌,基於協同的物品相似性矩陣

算法輸出:初始推薦結果

A. 訪問用戶行爲日誌,獲取該用戶最近瀏覽過物品的用戶集合U。

B.針對集合U中每個用戶u:

a)訪問用戶相似矩陣,獲取與用戶相似的用戶合集N(u)。

b)訪問物品相似矩陣,獲取與M(u)相似的物品合集N(u)。

c) 針對物品合集M(ui)中的每個物品,計算用戶偏好值。

d)根據用戶偏好值,對N(u)的物品進行排序。

e)取Top-N個物品,爲每個物品賦予解釋。

f) 保存Top-N個物品到初始推薦列表中。

  • 適用性

適用於物品數明顯小於用戶數的場合; 長尾物品豐富,用戶個性化需求強烈的領域。

  • UserCF和ItemCF的比較

3.1.2 基於模型的協同過濾算法

  • 基於隱因子模型的推薦算法

隱語義模型是最近幾年推薦系統領域最爲熱門的研究話題,它的核心思想是通過隱含特徵(latent factor)聯繫用戶興趣和物品。也就是,對於某個用戶,首先找到他的興趣分類,然後從分類中挑選他可能喜歡的物品。

  • 基本算法

基於興趣分類的方法大概需要解決3個問題:

A.如何給物品進行分類?

B.如何確定用戶對哪些類的物品感興趣,以及感興趣的程度?

C. 對於一個給定的類,選擇哪些屬於這個類的物品推薦給用戶,以及如何確定這些物品在一個類中的權重?

隱含語義分析技術採取基於用戶行爲統計的自動聚類,可以自動解決物品分類問題。LFM通過如下公式計算用戶 u 對物品 i 的興趣:

這個公式中,是模型的參數,其中, 度量了用戶 u 的興趣和第 k 個隱類的關係,而度量了第 k 個隱類和物品 i 之間的關係。要計算這兩個參數,需要一個訓練集,對於每個用戶 u ,訓練集裏都包含了用戶 u 喜歡的物品和不感興趣的物品,通過學習這個數據集,就可以獲得上面的模型參數。

  • LFM和基於鄰域的方法的比較

  • 理論基礎

LFM具有比較好的理論基礎,它是一種學習方法,通過優化一個設定的指標建立最優的模型。基於鄰域的方法更多的是一種基於統計的方法,並沒有學習過程。

  • 離線計算的空間複雜度

基於鄰域的方法需要維護一張離線的相關表。在離線計算相關表的過程中,如果用戶/物品數很多,將會佔據很大的內存。而LFM在建模過程中,可以很好地節省離線計算的內存。

  • 離線計算的時間複雜度

在一般情況下,LFM的時間複雜度要稍微高於UserCF和ItemCF,這主要是因爲該算法需要多次迭代。但總體上,這兩種算法在時間複雜度上沒有質的差別。

  • 在線實時推薦

UserCF和ItemCF在線服務算法需要將相關表緩存在內存中,然後可以在線進行實時的預測。LFM在給用戶生成推薦列表時,需要計算用戶對所有物品的興趣權重,然後排名,不太適合用於物品數非常龐大的系統,如果要用,我們也需要一個比較快的算法給用戶先計算一個比較小的候選列表,然後再用LFM重新排名。另一方面,LFM在生成一個用戶推薦列表時速度太慢,因此不能在線實時計算,而需要離線將所有用戶的推薦結果事先計算好存儲在數據庫中。因此,LFM不能進行在線實時推薦,也就是說,當用戶有了新的行爲後,他的推薦列表不會發生變化。

  • 推薦解釋

ItemCF算法支持很好的推薦解釋,它可以利用用戶的歷史行爲解釋推薦結果。但LFM無法提供這樣的解釋,它計算出的隱類雖然在語義上確實代表了一類興趣和物品,卻很難用自然語言描述並生成解釋展現給用戶。

  • 基於樸素貝葉斯分離的推薦算法

  • 算法原理

由於推薦問題可以看成分類問題,因此可以使用機器學習領域中的分類算法加以解決。樸素貝葉斯分類算法是貝葉斯分類算法中比較簡單的一種,它的基本思想是:對於給出的待分類物品和既定的類別,計算該物品在各個類別中出現的頻率,哪個類別計算出的概率大就將物品歸於那個類。在推薦系統中,樸素貝葉斯分類能夠在已知某些評分的情況下,通過計算概率預測未知評分。

計算中用到貝葉斯定理:

式中,表示事件B已經發生的前提下事件A發生的概率;P(A)和P(B)均爲無條件概率。

  • 算法流程

算法輸入:已知目標用戶對物品之外的物品的評分情況,以及其他用戶對各物品的評分情況。

算法輸出:確定目標用戶對物品的評分

A. 爲一個待分類項,

的特徵屬性;

B. 設類別集合

C.計算

a) 找到一個已知分類的待分類項集合作爲訓練樣本;

b)統計得到在各個類別下各個特徵屬性的條件概率估計,即

c) 如果各個特徵屬性是條件獨立的,則根據貝葉斯定理有如下關係:

因爲分母對所有類別爲常數,因此只需將分子最大化即可,又由於各特徵屬性是條件獨立的,所以有:

D.,則

  • 適用性

樸素貝葉斯分類實現起來比較簡單,準確率高,但是分類的時候需要學習全部樣本的信息。因此,樸素貝葉斯分類適用於數據量不大,類別較少的分類問題。

3.2 基於內容(CB)的推薦算法

  • 基礎CB推薦算法

  • 算法背景

基礎CB推薦算法利用物品的基本信息和用戶偏好內容的相似性進行物品推薦。通過分析用戶已經瀏覽過的物品內容,生成用戶的偏好內容,然後推薦與用戶感興趣的物品內容相似度高的其他物品。

比如,用戶近期瀏覽過馮小剛導演的電影“非誠勿擾”,主演是葛優;那麼如果用戶沒有看過“私人訂製”,則可以推薦給用戶。因爲這兩部電影的導演都是馮小剛,主演都有葛優。

計算公式爲:

式中,表示用戶,表示物品,表示用戶在第 k 個方面的特徵,表示物品在第 k 個方面的特徵,表示在第 k 個特徵方面上的相似度,表示權重

  • 算法流程

算法輸入:物品信息,用戶行爲日誌。

算法輸出:初始推薦結果。

A.物品表示:每個物品使用特徵向量表示,

其中表示物品的特徵屬性;

B. 從用戶行爲日誌中,獲取該用戶所瀏覽、收藏、評價、分享的物品集合M,根據物品集合M中物品的特徵數據,可以學到用戶的內容偏好;

C.保存Top-K個物品到初始推薦結果中。

  • 適用場景

適用於基礎CB架構的搭建,尤其是對新上線物品會馬上被推薦非常有效,被推薦的機會與老的物品是相同的。

  • 基於TF-IDF的CB推薦算法

  • 算法背景

在推薦系統中,用戶的反饋往往分爲兩類:評分和文字評論。前者通過分數直接反映用戶對物品的喜好程度,後者則需要從文字當中提取關鍵信息,這時需要用到TF-IDF(Term Frequency-Inverse Document Frequency)。TF-IDF算法被公認爲信息檢索中最重要的發明,在搜索、文獻分類和其他相關領域有廣泛應用。

TF-IDF是自然語言處理領域中計算文檔中詞或短語的權值的方法,是詞頻(Term Frequency, TF)和逆轉文檔頻率(Inverse Document Frequency, IDF)的乘積。TF指的是某一個給定的詞語在該文件中出現的次數,這個數字通常會被正規化,以防止它偏向長的文件(同一個詞語在長文件裏可能會比段文件有更高的詞頻,而不管該詞語重要與否)。IDF是一個詞語普遍重要性的度量,某一特定詞語的IDF,可以由總文件數目除以包含該詞語的文件數目,再將得到的商取對數得到。

  • 算法原理

TF-IDF算法基於這樣一個假設:若一個詞語在目標文檔中出現的頻率高而在其他文檔中出現的頻率低,那麼這個詞語就可以用來區分出目標文檔。這個假設的主要信息有兩點:

  • 在本文檔出現的頻率高;

  • 在其他文檔出現的頻率低。

因此,TF-IDF算法的計算可以分爲詞頻(TF)和逆轉文檔頻率(IDF)兩部分,由TF和IDF的乘積來設置文檔詞語的權重。

假設文檔集包含的文檔數爲N,文檔集中包含關鍵詞的文檔數爲表示關鍵詞在文檔中出現的次數,表示文檔中出現的詞語總數,在文檔中的詞頻定義爲

這個數字通常會被正規化,以防止它偏向長的文件。

IDF衡量詞語的普遍重要性。表示某一詞語在整個文檔中出現的頻率,由它計算的結果取對數得到關鍵詞的逆文檔頻率

由TF和IDF計算詞語的權重爲

可以看出,TF-IDF與詞語在文檔中的出現次數成正比,與該詞在整個文檔集中的出現次數成反比。在目標文檔中,提取關鍵詞的方法就是將該文檔所有詞語的TF-IDF計算出來並進行對比,取其中TF-IDF值最大的個數組成目標文檔的特徵向量來表示該文檔。

  • 基於KNN的CB推薦算法

  • 算法背景

KNN(k-Nearest Neighbor)算法基於這樣的假設:如果在特徵空間中,一個樣本的k個最鄰近樣本中的大多數樣本屬於某一個類別,則該樣本也屬於這個類別。

  • 算法原理

KNN在CB推薦算法中的應用於在CF推薦算法中的應用極爲相似,它們都是要首先找到與目標物品相似的且已經被用戶 u 評價過的 k 個物品,然後根據用戶 u 對這 k 個物品的評價來預測其目標物品的評價。它們的差別在於,CF推薦算法中的KNN是根據用戶對物品的評分來計算物品間相似度的,而CB推薦算法中KNN是根據物品畫像來計算相似度的,所以對於後者來說,如何通過物品畫像來計算物品間的相似度是算法中的關鍵步驟。相似度的計算可以使用餘弦相似度或Pearson相關係數的計算方法。

  • 算法流程

算法輸入:用戶已評分物品,目標物品 i 。

算法輸出:用戶對目標物品 i 的評分。

A.採用餘弦相似度公式計算相似度。

B.選擇最近鄰。在用戶 u 評過分的所有物品中,找出 k 個與目標物品 i 相似度最高的物品,並用 N(u,i) 來表示這出 k 個物品的集合。

C. 計算預測值。在第二步的基礎上,可使用以下公式計算用戶對目標物品的評分:

式中,表示用戶 u 對物品 i 的預測評分,是相似度。

  • 基於Rocchio的CB推薦算法

  • 算法背景

Rocchio是從用戶瀏覽歷史中抽取用戶喜好的物品特徵來構建用戶畫像的一種常用算法,是信息檢索領域處理相關反饋(Relevance Feedback)的一個著名算法。它提供瞭如何通過用戶瀏覽的物品,反饋計算用戶特徵向量中屬性值的方法。

舉個簡單例子,假如用戶觀看過“星球大戰”和“加勒比海盜”,並給予高分,那麼根據用戶的行爲歷史數據構建畫像時,用戶的特徵向量可表示爲{“動作”:1,“歐美”:1,“科幻”:1,“冒險”:0.5}。

  • 算法原理

Rocchio算法基於這樣的假設:如果我們需要計算出最精準度的用戶特徵向量,那麼這個用戶特徵向量應該與用戶喜歡的物品特徵最相似,與用戶討厭的物品特徵最不同。若表示用戶喜歡的物品,表示用戶討厭的物品,那麼根據Rocchio算法的思想,定義最優的用戶特徵向量爲:

式中,表示用戶特徵向量與用戶喜歡的物品的相似度,採用餘弦相似度計算,公式爲:

更新用戶的特徵向量,修改公式爲:

式中,是原始的用戶特徵向量,爲權重。若用戶新的歷史數據較多,那麼可以增大的值,反之,用戶更新數據較少則可以適當減小的值。在基於內容的物品推薦中,根據用戶的歷史行爲數據建立用戶畫像,我們可以採用Rocchio算法不斷地調整用戶的特徵向量

  • 基於決策樹的CB推薦算法

  • 算法背景

基於決策樹的推薦算法在訓練階段會生成一個顯示的決策模型。決策樹可以通過訓練數據構建並有效判斷一個新的物品是否可能受到歡迎。當物品的特徵屬性較少時,採用決策樹算法能夠取得不錯的效果,另外,決策樹學習的思想也比較容易被理解,在物品推薦時的可解釋性較好。

  • 算法原理

在物品推薦系統中,決策樹的內部節點通常表示物品的特徵屬性,這些節點用於區分物品集合,例如,通過物品中是否包含這個特徵將其進行分類。在只有兩個分類的簡單數據集中,用戶是否對物品感興趣一般出現在決策樹的葉子節點上。

  • 基於線性分類的CB推薦算法

  • 算法背景

將基於內容的物品推薦問題視爲分類問題時,可以採用多種機器學習方法。從一個更抽象的角度上看,大部分學習方法致力於找到一個可以準確區分用戶喜歡和不喜歡的物品的線性分類模型係數。

將物品數據用n維特徵向量來表示,線性分類器試圖在給定的物品特徵空間中找到一個能夠將物品正確分類的平面,一類點儘可能在平面的某一邊(喜歡),另一類在平面的另一邊(不喜歡)。

  • 算法原理

基於線性分類器的CB推薦算法通過物品特徵的線性組合進行分類。若輸入的物品特徵向量爲,輸出的結果 y 表示用戶是否喜歡物品,則線性分類器可以表示爲:

式中,表示物品特徵向量對應的權重,根據輸入的物品特徵屬性做出決定輸出結果。

  • 基於樸素貝葉斯的CB推薦算法

  • 算法背景

基於樸素貝葉斯的推薦系統假設用戶和物品的特徵向量中的各個分量之間條件獨立,判斷用戶是否對某個物品有興趣的方法是將這個問題轉化爲分類問題:喜歡和不喜歡。

計算物品分類情況的後驗概率爲:

式中,表示物品的相關屬性;C爲物品的分類,表示在分類 c 的一個物品的特徵屬性出現的概率。這樣,物品分類的後驗概率可以通過觀察分析訓練數據得到。

  • 算法原理

推薦系統中,分類 c 下的一個物品特徵屬性的條件概率用 在分類 c 下所有物品中出現的頻率近似表示,即

式中,表示在標記爲的物品 c 出現的次數,表示在這些物品中出現的所有特徵屬性的個數。爲了預防計算概率爲0的情況,對式子進行平滑,新公式如下:

式中,|V|表示所有物品中的出現的不同特徵屬性數。

3.3 基於知識的推薦算法

3.3.1 概述

基於知識(Knowledge-based, KB)的推薦算法,是區別於基於CB和基於CF的常見推薦方法。如果說CB和CF像通用搜索引擎的話,KB好比某個領域的垂直搜索引擎,可以提供該領域的特殊需求,包括專業性的優質特徵,幫助提高搜索引擎在特定領域的服務。

以視頻推薦爲例,一部電影的上映時期和檔期熱度,哪些導演執導的一定是大片,變形金剛和指環王系列口碑肯定不會太差,都是非常有價值的推薦信息。此外,基於知識的推薦,也更容易滿足主觀個性化需求。例如,對於VIP用戶,如果配置好了偏好,就可以爲其提供更加精準的推薦服務。

  • 約束知識與約束推薦算法

如今網上購物所能涵蓋的物品越來越豐富,人們逐漸發現推薦系統的CF和CB推薦算法並不能很好地適應某些特殊物品的推薦需求。例如,更新換代非常快的而人們又通常不會經常更換的電子產品。對於這些產品來說,其各方面的性能參數在幾年間就會有很大變化,代表歷史偏好的用戶畫像並不能很好地反映用戶當前的購買需求,於是就需要推薦系統將用戶當前的需求作爲重要信息參考源。人們發現可以利用物品的參數特徵等屬性形成約束知識,再將用戶對物品的特定刻畫爲約束條件,然後經過對物品集合的約束滿足問題的求解,就可以得到用戶所期望的物品了。

  • 創建推薦任務

推薦任務是以元組(R,I)的形式表示出來,其中用集合 R 表示目標用戶對物品的特定需求,即對物品的約束條件,用集合 I 表示一個物品集合。推薦的任務就是從集合 I 中確定出能夠滿足集合 R 要求的物品。

  • 推薦任務的解決

推薦任務的解決是以找到可能的集合 S 爲目標,集合 S 應滿足的條件是,並且,其中,表示對集合 I 進行合取查詢的運算符,R 表示對物品的約束條件或選擇標準。

  • 衝突集

衝突集CS應滿足的條件爲:,並且。特別地,當不存在集合時,集合CS被稱爲最小衝突集。

  • 診斷集

診斷集應滿足的條件是,並且。特別地,當不存在集合時,集合被稱爲最小診斷集。

  • 關聯知識與關聯推薦算法

  • 算法原理

關聯知識以關聯規則爲表現形式,用以描述數據庫中數據之間關聯性的知識。在推薦系統領域,可以通過對用戶畫像中關聯規則的挖掘分析來分析用戶的習慣,發現物品之間的關聯性,並利用這種關聯性指導系統做出推薦。

  • 算法流程

算法輸入:n個用戶畫像。

算法輸出:針對目標用戶u的Top-N推薦列表。

A. 從系統中的n個用戶畫像中挖掘出所有的強關聯規則,建立集合

以表示目標用戶u尚未觀看但極有可能感興趣的物品。

B.再次使用置信度對集合中的物品進行高低排序。

C.取出排序列表中的前N個物品構成Top-N推薦列表。 由於對系統中全體用戶的畫像進行規則關聯挖掘意義不明顯且計算量大,所以基於關聯規則的推薦算法常與CF推薦算法混合使用。在這類混合方案中,使用了CF推薦算法中的最近鄰算法將用戶畫像數目n限定在目標用戶的最鄰近範圍內,使得關聯規則挖掘算法處理的數據規模被有針對性地限定在一定範圍內。

3.4 混合推薦算法

各種推薦方法都有優缺點,爲了揚長補短,在實際中常常採用混合推薦(Hybrid Recommendation)。研究和應用最多的是內容推薦和協同過濾推薦的組合。最簡單的做法就是分別用基於內容的方法和協同過濾推薦方法去產生一個推薦預測結果,然後用某方法組合其結果。儘管從理論上有很多種推薦組合方法,但在某一具體問題中並不見得都有效,組合推薦一個最重要原則就是通過組合後要能避免或彌補各自推薦技術的弱點。

  • 加權式:加權多種推薦技術結果。

  • 切換式:根據問題背景和實際情況或要求決定變換採用不同的推薦技術。

  • 混雜式:同時採用多種推薦技術給出多種推薦結果爲用戶提供參考。

  • 特徵組合:

  • 特徵補充:一種技術產生附加的特徵信息嵌入到另一種推薦技術的特徵輸入中。

  • 級聯式:

【end】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章