外圍架構
一般來說,每個網站都有一個 UI 系統,UI 系統負責給用戶展示網頁并和用戶交互。網站會通過日志系統將用戶在 UI 上的各種各樣的行為記錄到用戶行為日志中。
從上面的結構可以看到,除了推薦系統本身,主要還依賴兩個條件--界面展示和用戶行為數據。
推薦系統架構
推薦系統聯系用戶和物品的主要方式如下圖所示。如果將這三種方式都抽象一下就可以發現,如果認為用戶喜歡的物品也是一種用戶特征,或者和用戶興趣相似的其他用戶也是一種用戶特征,那么用戶就和物品通過特征相聯系。
根據上面的抽象,可以設計一種基于特征的推薦系統架構。當用戶到來后,推薦系統需要為用戶生成特征,然后對每個特征找到和特征相關的物品,從而最終生成用戶的推薦列表。因而,推薦系統的核心任務就被拆解成兩部分,一個是如何為給定用戶生成特征,另一個是如何根據特征找到物品。
用戶的特征非常多,主要包括以下幾類:
人口的統計學特征:包括用戶的年齡,性別,國籍,民族等用戶注冊時提供的信息。
用戶的行為特性: ? 包括用戶瀏覽過什么商品,購買,收藏,評分等用戶行為相關的特征。
用戶的話題特征: ? 可以根據用戶的歷史行為利用話題模型將電視劇和電影聚合成不同的話題,計算用戶對什么話題感興趣。
如果要在一個系統中把上面提到的特征和任務都統籌考慮,那么推薦系統會非常復雜,而且很難通過配置文件方便的配置不同特征和任務的權重。因此,推薦系統需要由多個推薦引擎組成,每個引擎負責一類特征和一種任務。推薦系統的任務就是將不同的推薦引擎的結果按照一定的權重或者優先級合并,排序然后返回。推薦系統架構如圖:
可以方便的增加/刪除引擎,控制不同引擎對推薦結果的影響。
可以實現推薦引擎級別的用戶反饋。每一個推薦引擎其實代表了一種推薦策略,而不同的用戶可以喜歡不同的推薦策略。
推薦引擎的架構
如圖所示,推薦引擎架構主要分為 3 部分:
部分 A 主要負責從數據庫或者緩存中拿到用戶行為數據,通過分析不同的行為,生成當前用戶的特征向量。
部分 B 負責將用戶的特征向量通過特征-物品相關矩陣轉化為初始推薦物品列表。
部分 C 負責對初始化的推薦列表進行過濾、排名等處理,從而生成最終的推薦結果。
生成用戶特征向量:在利用用戶行為計算特征向量時需要考慮以下因素
用戶行為的種類-- 在一個網站中,用戶可以對物品產生很多種不同種類的行為。如瀏覽,購買,評分等。一般標準就是用戶付出代價越大的行為權重越高。比如,用戶購買行為需要掏錢,所以用戶會三思而后行,因此購買行為最重要。
用戶產生行為的時間 -- 一般來說,近期的行為比過去重要。
用戶行為的次數 -- 有時用戶對一個物品會產生多次行為,行為次數多的物品對應的特征權重越高。
物品的熱門程度 -- 用戶對不熱門的物品產生的行為更能代表用戶的個性。
特征-物品相關推薦:從架構圖可以看出,特征-物品相關推薦可以接受一個候選物品集合。候選物品集合的目的是保證推薦結果只包括含候選物品集合中的物品。比如有些產品要求給用戶推薦最近一周加入的新的物品,那么候選物品集合就包括最近一周新加的物品。
過濾和排名:將初始推薦列表中一些用戶已經看過的,或者總體評分低的,質量差的,或者推薦后用戶可以自己根據條件刷選的(比如價格區間)的物品過濾掉,并按照一定的排序規則(比如新穎度)展現給用戶,生成最終的推薦結果。