1. 程式人生 > >實戰智慧推薦系統(14)-- 推薦系統架構

實戰智慧推薦系統(14)-- 推薦系統架構

外圍架構

一般來說,每個網站都有一個 UI 系統,UI 系統負責給使用者展示網頁並和使用者互動。網站會通過日誌系統將使用者在 UI 上的各種各樣的行為記錄到使用者行為日誌中。

從上面的結構可以看到,除了推薦系統本身,主要還依賴兩個條件--介面展示和使用者行為資料。

推薦系統架構

推薦系統聯絡使用者和物品的主要方式如下圖所示。如果將這三種方式都抽象一下就可以發現,如果認為使用者喜歡的物品也是一種使用者特徵,或者和使用者興趣相似的其他使用者也是一種使用者特徵,那麼使用者就和物品通過特徵相聯絡。


根據上面的抽象,可以設計一種基於特徵的推薦系統架構。當用戶到來後,推薦系統需要為使用者生成特徵,然後對每個特徵找到和特徵相關的物品,從而最終生成使用者的推薦列表。因而,推薦系統的核心任務就被拆解成兩部分,一個是如何為給定使用者生成特徵,另一個是如何根據特徵找到物品


使用者的特徵非常多,主要包括以下幾類:
人口的統計學特徵:包括使用者的年齡,性別,國籍,民族等使用者註冊時提供的資訊。
使用者的行為特性:   包括使用者瀏覽過什麼商品,購買,收藏,評分等使用者行為相關的特徵。

使用者的話題特徵:   可以根據使用者的歷史行為利用話題模型將電視劇和電影聚合成不同的話題,計算使用者對什麼話題感興趣。

如果要在一個系統中把上面提到的特徵和任務都統籌考慮,那麼推薦系統會非常複雜,而且很難通過配置檔案方便的配置不同特徵和任務的權重。因此,推薦系統需要由多個推薦引擎組成,每個引擎負責一類特徵和一種任務。推薦系統的任務就是將不同的推薦引擎的結果按照一定的權重或者優先順序合併,排序然後返回。推薦系統架構如圖:


可以方便的增加/刪除引擎,控制不同引擎對推薦結果的影響。

可以實現推薦引擎級別的使用者反饋。每一個推薦引擎其實代表了一種推薦策略,而不同的使用者可以喜歡不同的推薦策略。

推薦引擎的架構

如圖所示,推薦引擎架構主要分為 3 部分:

部分 A 主要負責從資料庫或者快取中拿到使用者行為資料,通過分析不同的行為,生成當前使用者的特徵向量。
部分 B 負責將使用者的特徵向量通過特徵-物品相關矩陣轉化為初始推薦物品列表。

部分 C 負責對初始化的推薦列表進行過濾、排名等處理,從而生成最終的推薦結果。

生成使用者特徵向量:在利用使用者行為計算特徵向量時需要考慮以下因素
使用者行為的種類-- 在一個網站中,使用者可以對物品產生很多種不同種類的行為。如瀏覽,購買,評分等。一般標準就是使用者付出代價越大的行為權重越高。比如,使用者購買行為需要掏錢,所以使用者會三思而後行,因此購買行為最重要。

使用者產生行為的時間 -- 一般來說,近期的行為比過去重要。
使用者行為的次數 -- 有時使用者對一個物品會產生多次行為,行為次數多的物品對應的特徵權重越高。

物品的熱門程度 -- 使用者對不熱門的物品產生的行為更能代表使用者的個性。

特徵-物品相關推薦:從架構圖可以看出,特徵-物品相關推薦可以接受一個候選物品集合。候選物品集合的目的是保證推薦結果只包括含候選物品集合中的物品。比如有些產品要求給使用者推薦最近一週加入的新的物品,那麼候選物品集合就包括最近一週新加的物品。

過濾和排名:將初始推薦列表中一些使用者已經看過的,或者總體評分低的,質量差的,或者推薦後用戶可以自己根據條件刷選的(比如價格區間)的物品過濾掉,並按照一定的排序規則(比如新穎度)展現給使用者,生成最終的推薦結果。