1. 程式人生 > >推薦演算法CB

推薦演算法CB

推薦方法

• 基於內容Content Based

• 基於協同Collaboration Filtering
    – User Based CF

    – Item Based CF

基於內容(ContentBased)

• 引入Item屬性的Content Based推薦


使用者進入優酷檢視某電影,進入該電影的播放頁面,周圍會有相關item推薦比如廣告、相似電影、演員相關、花絮之內的

內容分析:

比如某item的正排表--根據名字等元資料進行中文分詞得到關鍵詞(不是標籤,可以通過關鍵詞得到,有時候標籤和關鍵詞不一樣,但更能表現出item的特性)及其權重


當然也可以對其他的元資料進行中文分詞得到正排表,比如name/title、desc、影評、導演、主題、年代、地域、標籤

item內容屬性索引:

做倒排表,然後放進NOSql裡面去


倒排表


使用者瀏覽資料

相關性計算、排序

user點選了某item(站在資料探勘工程師的角度就是等於元資料資訊),然後推薦系統根據itemA找到其他的item1、item2、item3。但是這種方案比較耗時。

兩種方案

(1):itemA->元資料資訊->內容分析(關鍵詞)->關鍵詞提取token1、token2、token3->通過倒排表查詢得到最終的top(N)->item1、item2

(2):item-item矩陣查詢得到,提前拿到網站所有的item,得到所有正排表和倒排表,加權去重。如果遇到新增的item,如圖所示,一般都是通過storm或者spark streamming等實時流處理框架來進行處理,併入庫。紅色為倒排表--需要實時合併、更新,合併、更新倒排表token時要注意新舊排序與權重的比較


  以token為紐帶進行關聯,所以解釋性很強,相關性很強,但是缺點也很明顯,比如張三和李四同時進來點選這一個item,但是以後推薦的卻是同一套東西,然後每個人的喜好都是有區別的。因此,要改進該推薦系統,只能引入使用者畫像。

引入User屬性的Content Based推薦


user使用者畫像表


對最近一週看的電影item1 item2 item3做一個正排表


當用戶點選了item4時,從NOSQL中取出user-item和item list資訊,通過token進行推薦,同時注意更新token和權重。所以引入user屬性的推薦方案有兩種。(1)通過user item和item list進行推薦;(2)通過使用者畫像(user:token:score...)和token(item,item...)列表進行推薦

則需要對使用者user推薦怎樣的個性化列表?

舉個簡單的小例子
我們已知道
• 使用者u1喜歡的電影是A,B,C
• 使用者u2喜歡的電影是A, C, E, F
• 使用者u3喜歡的電影是B,D
我們需要解決的問題是:決定對u1是不是應該推薦F這部電影
基於內容的做法:要分析F的特徵和u1所喜歡的A、B、C的特徵,需要知道的資訊是A(戰爭片),B(戰爭片),C(劇情片),如果F(戰爭片),那麼F很大程度上可以推薦給u1,這是基於內容的做法,你需要對item進行特徵建立和建模。

• Mr. John Doe likes “Cars”
• “Ferrari” is a car

• John Doe may like “Ferrari”

• 面向使用者興趣的新聞推薦(Item2User)


• 例子:通過相似度得到item與item,user與user之間的score,然後按照由高到低排序