推薦系統知識點匯總


       整理歸納一下《推薦系統實踐》和《推薦系統導論》兩本書的知識點,文中排版格式可能會有點亂,如有問題請指正。OK,閑話不說,先上2張圖

       對推薦系統的建模數據進行分析,代表型數據:1)無上下文的隱形反饋數據;2) 無上下文的顯性反饋數據;3) 有上下文的隱形反饋數據;4)有小上下文的顯性反饋數據,其中顯性的反饋數據就是用戶對物品的評分,而隱形的就是用戶對物品的瀏覽,時長等數據(不同的領域,用戶對物品的行為種類不一樣),像我之前的做的都全是用有上下文的隱形反饋,都是通過點擊、登陸、時長歸納出來的用戶對物品的評分。
       有了用戶數據以后,可以做一些行為的分析:1) 用戶活躍度和物品流行度的分布(用戶瀏覽過多少物品和物品被多少用戶瀏覽過,符合長尾分布?);2) 用戶活躍度跟物品流行度的關系(是不是新用戶趨近於接觸熱門物品?);3) 用戶的平均評分和物品的平均評分(流行度中等的物品的平均評分,可能平均分很高)
 
       有了上面的數據跟分析之后,接下來就開始運用算法來建模了,常用的有基於領域的算法,基於隱語義模型,基於圖模型等。
       基於領域的算法通常又分基於用戶的和基於物品的CF,前一種算法的步驟
       (1)找到和目標用戶興趣相似的用戶集合;(2) 找到這個集合的用戶喜歡聽的,而且目標用戶沒有聽過的物品
       后一種算法的步驟:(1)計算物品與物品之間的相似度;(2) 通過目標用戶已經正反饋的物品,來找到相似度其它物品。
       上面2種算法的關鍵是找到用戶/物品相似度集合,這里的用戶/物品的相似度計算,不是用用戶/物品的內在屬性來衡量的(比如A物品是青蘋果,B物品是紅蘋果,C物品是香蕉,用協同過濾的思想來計算的話,A跟B就不一定相似哦),直觀上來講 就是 如果A用戶跟B用戶 的物品重合性高,那么A跟B就相似,類似如果A物品跟B物品的共同用戶重合性高,那么A跟B相似。
       計算相似度的公式有很多種,余弦、皮爾遜、歐氏距離等。關於詳細的公式請參考谷歌度娘。
       實際應用需要注意的一些點:
       1)余弦跟歐氏距離區別:我的感覺這兩種方式,一個是定性,一個是定量,比如A用戶對2個物品的評分是3,3,而B用戶對這兩個物品的評分是5,5,如果按余弦計算A,B就是相似的,而歐氏距離認為這兩個用戶還是有差異的;
       2)通過余弦計算的時候,通常會做一個預處理,評分的用戶會預先把每個物品的評分減去該用戶的平均分 或者 加一個懲罰項(按物品的流行度/ 用戶的活躍度 )。計算用戶跟用戶相似度時 懲罰那些物品流行度高的,換句話說 2個用戶對偏重冷門物品的有相同行為比對熱門的有相同行為的更相似
       3)對某用戶活躍度太高的人,應該去除該用戶
       4) 相似度的歸一化,提高推薦的多樣性
       user-cf的參數K值影響,K越大,結果越全局熱門,覆蓋面越小,流行度越大,通常運營與新聞類網站。
 
 
       另外需要關注的就是哈利波特問題,就是某個物品太熱了,而導致好多物品都會跟熱門物品關聯
       最后,經常會問到的問題是:協同過濾跟關聯規則有什么區別?
       1. 關聯規則面向的是transaction,而協同過濾面向的是用戶偏好(評分)
       2. 協同過濾在計算相似商品的過程中可以使用關聯規則分析,但是在有用戶評分的情況下(非1/0),協同過濾算法應該比傳統的關聯規則更能產生精准的推薦。
       3. 協同過濾的約束條件沒有關聯規則強,或者說更為靈活,可以考慮更多的商業實施運算和特殊的商業規則。
 
        基於隱語義模型 近幾年來研究比較火熱的領域,特別是學術界,因為可以玩數學公式,出學術論文等。該模型的核心思想是通過隱變量(特征)來聯系用戶的興趣跟物品。比較著名的方法有:PLSA,LDA,MF,LFM等,關於這些模型的目標損失函數,優化算法等請參考相應論文/技術博客
       由於數據集里面的都是用戶有正反饋行為的物品,那么如何采集用戶的負樣本呢?1) 對於每個用戶,保證正負樣本均衡;2) 采樣負樣本時,對更熱門的負樣本 加大采樣權重。
       案例:雅虎的新聞推薦,新聞在很短的時間內獲得大量關注或是去關注,特別是剛出的新聞。這對於單純的LFM很難實時推薦,因為需要在用戶行為記錄上反復迭代才能獲取較好的性能。一個替代的方案是:預先利用新聞鏈接的內容屬性(關鍵字、類別等)得到連接的內容特征向量跟用戶對內容特征的興趣程度(歷史記錄),然后再疊加最近幾個小時更新的LFM,拿到用戶實時的興趣。最后通過兩步疊加生成最后的實時結果
       LMF跟基於領域的方法比較:
        1.   理論基礎,前者有明確的優化函數,而基於領域的則更多的基於統計的方法,並沒有一個學習的過程
       2. 離線計算的空間復雜度:假設M個用戶N個物品,對於LMF則需要O(F*(M+N))的空間復雜度,F是隱變量的個數,對於user-cf需要O(M*M)記錄用戶相關表,而item-cf要O(N*N) 記錄物品相關表
       3. 離線計算的時間復雜度:假設M個用戶N個物品K條用戶對物品的行為記錄,對於LMF則需要O(F*K*S)的空間復雜度,F是隱變量的個數,S是迭代次數,對於user-cf需要O(M*(K/M)^2)時間復雜度,而item-cf要 O(M*(K/M)^2)  時間復雜度
       4. 推薦解釋,item-cf能給出很好的解釋,而LFM則無法給出具體業務上的解釋
       
       基於圖模型的推薦, 由於用戶物品的行為都可以轉化為二分圖的表示,那么就可以根據歷史數據構建出這種形式,然后度量兩個頂點之間的相似度的問題。基於這個思想的著名算法包括隨機游走和PersonalRank算法。適合社交關系較強的數據應用上。
     
       冷啟動問題
       常見的冷啟動問題包括三類:1)用戶冷啟動(新用戶沒有歷史行為,該怎么推薦?);2)物品冷啟動(新物品,該如何向對齊感興趣的用戶推薦? item-cf受影響);3)系統冷啟動(新開發的網站,沒用戶,只有一些物品信息,如何在網站發布的時候讓訪問的用戶感受個性化推薦?)
       對於上述的幾個問題,可以參考幾個常見的解決方案
       1. 對於新用戶可以先進行熱門推薦或熱門物品的隨機推薦,對於新物品可以考慮基於內容的推薦思想計算與其它物品的相似度;
       2. 利用用戶注冊信息,如年齡,性別,地區等(結合簡單分析物品的用戶年齡、性別、地區的分布,建立相關表),或者一開始讓用戶選一些自己感興趣的tag,這樣就可以進行 粗粒度的個性化;
       3. 利用授權登陸獲取到社交或其他信息,如淘寶跟新浪微博的相互打通;
       4. 系統冷啟動時,可以引入專家(小編或運營人員等)建立起物品的相似表;
       通常基於內容推薦通常是作為一個baseline,但是並不表示內容推薦就一定比基於領域的算法效果差,推薦系統實踐一書舉了個例子:如github的內容推薦就會相對比CF的要略好一點,因為用戶的行為強烈的受到物品的某一屬性影響,github瀏覽用戶會受開源項目的作者影響,會關注這些知名作者的其他開源項目。
 
 
      基於標簽tag的推薦====>最基本的統計用戶常用的tag,然后統計被tag次數最多的哪些物品,最后找那些很熱且含有用戶常用tag的物品進行推薦
      上面的問題:會給熱門標簽對於的熱門物品很大的權重(用戶常用的標簽的熱門物品),因此會造成推薦熱門物品,降低新穎性。
       改進1:類似的解決方法就是上面基於領域模型的懲罰熱門標簽(具體做法就是借鑒tf-idf思想記錄常用標簽被多少個其他用戶使用過)跟熱門物品
       改進2:數據稀疏性的問題(再別的模型一樣都會遇到的問題),把相似的tag聚類,例如某用戶的tag是”推薦系統“,那么“個性化推薦”“協同過濾”tag應該也是用戶會感興趣的tag。放在別的算法可能就是對物品進行LDA聚類,抽象出來一類物品,稠密化數據。
 
       上面講的推薦模型里面的數據都是最基本的例如用戶,物品,評分/tag,光有這些數據能產生推薦,但是推薦結果的質量就不一定了,有些時候從業務上看會很離譜(例如假設通過協同過濾算法得到一件外套跟t恤很相似,但是在夏天的時候,某一個用戶買過T恤,難道要他推薦外套??)。所以除了上面講的最基本的數據外,可以利用一些其他的信息來幫助改進推薦結果。這里統稱為上下文信息(如時間,地點,情感心情等)
 
       基於時間上下文的user-cf算法:算法的場景,例如A用戶1個月前喜歡蘋果,2個月前喜歡香蕉,B用戶1個月前喜歡蘋果,3個月前喜歡香蕉,而C用戶跟A用戶一樣,1個月前喜歡蘋果,2個月前喜歡香蕉,如果不加時間上下文關系,A、B、C用戶的興趣是相等的,但是加入時間上下文,那么A跟C 就會 比 B跟C 更相似;同理基於時間上下文的item-cf算法,也是采用了類似原理場景。實際操作的時候就是,對相似度計算公式的分子上面加一個興趣相似的時間衰減函數,突出最近行為。
       基於位置的推薦:給你推薦附近的酒店、餐館等,移動時代這個顯得更為重要,前段時間,百度公司出的春運,百度遷徙,火了互聯網,就是因為掌握了用戶的地理信息。再比如一個場景,淘寶的給用戶推薦寶貝,是不是推薦也可以推薦一些離用戶近的那些寶貝?還可以節省點路費,當然還需要其它因為,如成本,寶貝興趣強弱關系等。
 
       利用社交網絡數據,用戶社交關系數據對推薦的重要性不言而喻,更甚都可以不用復雜的推薦算法,單純看社交關系進行推薦。如最近火的不行的”天天系列“,騰訊下面的游戲,基於微信平台,利用社交關系把用戶粘的緊緊的,天然的滿足用戶的需求,即時不是玩游戲的用戶。
      社交數據的來源:電郵、用戶注冊(某個公司、某個學校、家鄉等)、論壇/討論組、即時聊天軟件、社交網站等。
      算法方面也是多種多樣,基於圖的社交挖掘(圖是社交關系表達的最好表達方式)、基領域+社交關系的推薦、基於社交關系的矩陣分解等。
 
 參考資料:推薦系統實踐-項亮編著


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM