我們暫且將推薦系統後端分為實時推薦、離線推薦、統計推薦和相似性推薦。
要推薦,首先得有資料才能計算出推薦啥,所以我們可以最起碼的有基礎的電影資訊表,使用者評分表和電影標籤表。
當新使用者進來時,如果沒有選擇任何喜好可以直接推薦基於統計推薦的。
統計推薦包括歷史熱門電影統計、近期熱門電影統計、電影平均評分統計和各類別topn統計推薦。這一部分內容直接根據已有資料寫計算任務交給ariflow等定時執行即可。
既然收集了使用者對電影的評分,那我們就可以用使用者評分表來計算使用者推薦矩陣了,這裡可以用als訓練推薦模型。然後用模型得到給每個使用者推薦哪些電影,得到形式如
uidrecs
001[(mid,score) ( mid, score )…]
的結果,將其寫道db中,業務服務讀取,在這裡可以去重,過濾掉使用者已經看過的。至於為什麼als就能訓練出來這個結果,可以參看文章最後。
在als訓練出來的模型,會有乙個prodcutfeatures ,將這兩個productfeatures做笛卡爾積後兩兩取預選相似度,然後再
過濾掉不怎麼相似的,比如小於0.5的,就可以得到電影的相似度矩陣了。
與離線推薦相比,實時推薦重點在於快,而不是結果準確,最基本的思想就是使用者最近k次的喜好可能都是類似的,那麼可以將使用者最近k次評分存在redis中,然後利用離線推薦中得到的電影相似度矩陣,取這k個評分的電影的相似度,再分乘以使用者的評分就可以得到使用者這次評分後的新的實時推薦電影了,再與之前的實時推薦結果合併後更新,放在db供業務資料讀取就可以了。
其實最容易想到的就是基於內容的推薦了,既然有了電影標籤,也有了標籤表,就可以用特徵提取,比如tf-idf來獲取每個電影的特徵了,然後選擇與指定電影特徵相似的電影即可,也就是常見的item-cf 。
什麼是協同過濾,顧名思義,協同就是找相似,過濾就是篩選出符合要求的。
協同過濾可以分為
user-cf ,找到與使用者a的特徵相似的使用者b,c… 把這些使用者的喜歡的推薦給a
iterm-cf, 與user-cf類似,不同的是根據相似商品來找使用者
modles-based,有矩陣分解、關聯演算法、神經網路等。
models-based 中的矩陣分解就是將形如
mid1
mid2
mid3
uid12
10udi2
23uid3
12這樣的表分解成兩個矩陣 u 和 i 相乘,並用rmse作為損失函式用交替最小二乘法求解損失函式最小時得到的u和i,將這u 和 i相乘得到乙個將上圖填充完成的矩陣,這樣對每個使用者推薦哪些電影就很容易選擇了。至於其中的數學推導這裡就不勸退式的展開了。 具體可以參考
《large-scale parallel collaborative filtering for the netflix prize》(als-wr原**)spark mlib也有對應的實現。
推薦系統之ALS演算法詳解
als演算法是2008年以來,用的比較多的協同過濾演算法。它已經整合到spark的mllib庫中,使用起來比較方便。從協同過濾的分類來說,als演算法屬於user item cf,也叫做混合cf。它同時考慮了user和item兩個方面。使用者和商品的關係,可以抽象為如下的三元組 其中,rating是...
大資料推薦系統專案
推薦系統的本思想 利用使用者和物品的特徵資訊,給使用者推薦那些具有使用者喜歡的特徵的物品。利用使用者喜歡過的物品,給使用者推薦與他喜歡過的物品相似的物品。利用和使用者相似的其他使用者,給使用者推薦那些和他們興趣愛好相似的其他用 戶喜歡的物品。知你所想,精準推送 利用使用者和物品的特徵資訊,給使用者推...
大資料人才推薦系統 Talent RADAR
文章講的是大資料人才推薦系統 talent radar,8月9日,專注於大資料分析的人力資源公司 數聯尋英 攜手國內最大的雇主品牌諮詢及招聘解決方案提供商hiall,發布了基於大資料的精準員工推薦模式及解決方案 人才雷達 talent radar 該方案基於企業定製化的招聘需求,通過對社會化 及簡歷...