一文簡單理解推薦系統

本文主要介紹什麼是推薦系統,爲什麼需要推薦系統,如何實現推薦系統的方案,包括實現推薦系統的一些常見模型,希望給讀者提供學習實踐參考。

1 推薦系統概述

爲什麼需要推薦系統

信息爆炸

  • 對於信息消費者,需要從大量信息中找到自己感興趣的信息,而在信息過載時代,用戶難以從大量信息中獲取自己感興趣、或者對自己有價值的信息。
  • 對於信息生產者,信息生產者,需要讓自己生產的信息脫穎而出,受到廣大用戶的關注。從物品的角度出發,推薦系統可以更好地發掘物品的長尾(long tail)。

     

    長尾效應

長尾效應是美國《連線》雜誌主編Chris Anderson在於2006年出版了《長尾理論》一書中指出,傳統的80/20原則(80%的銷售額來自於20%的熱門品牌)在互聯網的加入下會受到挑戰。互聯網條件下,由於貨架成本極端低廉,電子商務網站往往能出售比傳統零售店更多的商品。這些原來不受到重視的銷量小但種類多的產品或服務由於總量巨大,累積起來的總收益超過主流產品的現象。

主流商品往往代表了絕大多數用戶的需求,而長尾商品往往代表了一小部分用戶的個性化需求。

推薦系統通過發掘用戶的行爲,找到用戶的個性化需求,從而將長尾商品準確地推薦給需要它的用戶,幫助用戶發現那些他們感興趣但很難發現的商品。

推薦系統的任務在於:一方面幫助用戶發現對自己有價值的信息,另一方面讓信息能夠展現在對它感興趣的用戶面前,從而實現信息消費者和信息生產者的雙贏。

推薦系統的本質

通過一定的方式將用戶和物品聯繫起來,而不同的推薦系統利用了不同的方式。

推薦系統常用的3種聯繫用戶和物品的方式

推薦系統就是自動聯繫用戶和物品的一種工具,它能夠在信息過載的環境中幫助用戶發現令他們感興趣的信息,也能將信息推送給對它們感興趣的用戶。

評價指標

從產品的角度出發,評價一個推薦系統可以從以下維度出發:

  • 用戶滿意度
    用戶作爲推薦系統的重要參與者,其滿意度是評測推薦系統的最重要指標。但是,用戶滿意度沒有辦法離線計算,只能通過用戶調查或者在線實驗獲得。

  • 預測準確度
    預測準確度度量一個推薦系統或者推薦算法預測用戶行爲的能力。這個指標是最重要的推薦系統離線評測指標,從推薦系統誕生的那一天起,幾乎99%與推薦相關的論文都在討論這個指標。
    在計算該指標時需要有一個離線的數據集,該數據集包含用戶的歷史行爲記錄。然後,將該數據集通過時間分成訓練集和測試集。最後,通過在訓練集上建立用戶的行爲和興趣模型預測用戶在測試集上的行爲,並計算預測行爲和測試集上實際行爲的重合度作爲預測準確度。

  • 覆蓋率
    覆蓋率( coverage )描述一個推薦系統對物品長尾的發掘能力。覆蓋率有不同的定義方法,
    最簡單的定義爲推薦系統能夠推薦出來的物品佔總物品集合的比例。

  • 多樣性
    用戶的興趣是廣泛的,爲了滿足用戶廣泛的興趣,推薦列表需要能夠覆蓋用戶不同的興趣領域,即推薦結果需要具有多樣性。

  • 新穎性
    新穎的推薦是指給用戶推薦那些他們以前沒有聽說過的物品。在一個網站中實現新穎性的最簡單辦法是,把那些用戶之前在網站中對其有過行爲的物品從推薦列表中過濾掉。

  • 驚喜度
    與新穎性不同,如果推薦結果和用戶的歷史興趣不相似,但卻讓用戶覺得滿意,那麼就可以說推薦結果的驚喜度很高,而推薦的新穎性僅僅取決於用戶是否聽說過這個推薦結果。

  • 信任度
    對於基於機器學習的自動推薦系統,同樣存在信任度( trust )的問題,如果用戶信任推薦系統,那就會增加用戶和推薦系統的交互。同樣的推薦結果,以讓用戶信任的方式推薦給用戶就更能讓用戶產生購買慾,而以類似廣告形式的方法推薦給用戶就可能很難讓用戶產生購買的意願。
    度量推薦系統的信任度只能通過問卷調查的方式,詢問用戶是否信任推薦系統的推薦結果。

  • 實時性
    推薦系統需要實時地更新推薦列表來滿足用戶新的行爲變化,推薦系統需要能夠將新加入系統的物品推薦給用戶。這主要考驗了推薦系統處理物品冷啓動的能力。

  • 健壯性
    任何一個能帶來利益的算法系統都會被人攻擊,這方面最典型的例子就是搜索引擎。搜索引擎的作弊和反作弊鬥爭異常激烈,而健壯性(即 robust, 魯棒性)指標衡量了一個推薦系統抗擊作弊的能力。

2 基於用戶行爲推薦

2.1 用戶行爲

可以分爲顯性反饋行爲(explicit feedback)隱性反饋行爲(implicit feedback)

  • 顯性反饋行爲
    是指用戶明確表示對物品喜好的行爲,主要方式就是評分和喜歡/不喜歡,常見的顯性反饋行爲可以參考如下表格:
用戶行爲 特徵 作用
評分 整數量化的偏好,可能得取值是[0,n],n一般的取值是5或者10 通過用戶對物品的評分,可以精確得到用戶的偏好
投票 布爾值的偏好,取值是0或1 通過用戶對物品的投票,可以精確得到用戶的偏好
轉發 布爾值的偏好,取值是0或1 通過用戶對物品的投票,可以精確得到用戶的偏好
保存書籤 布爾值的偏好,取值是0或1 通過用戶對物品的投票,可以精確得到用戶的偏好
標記標籤(tag) 一些單詞,需要對單詞進行分析,得到偏好 通過分析用戶的標籤,可以得到用戶對物品的理解,用戶的情感,是喜歡還是厭惡
評論 一些文字,需要進行文本分析得到偏好 通過分析用戶的評論,可以得到用戶的情感,是喜歡還是厭惡
  • 隱性反饋行爲(implicit feedback)
    指的是那些不能明確反應用戶喜好的行爲。最具代表性的隱性反饋行爲就是頁面瀏覽行爲。用戶瀏覽一個物品的頁面並不代表用戶一定喜歡這個頁面展示的物品,比如可能因爲這個頁面鏈接顯示在首頁,用戶更容易點擊它而已。
    相比顯性反饋,隱性反饋雖然不明確,但數據量更大。在很多網站中,很多用戶甚至只有隱性反
    饋數據,而沒有顯性反饋數據。

基於用戶行爲數據設計的推薦算法一般稱爲協同過濾算法。學術界對協同過濾算法進行了深入研究,提出了很多方法,比如基於鄰域的算法( neighborhood-based )、隱語義模型( latent factor model )、基於圖的隨機遊走算法( random walk on graph )等。

下面主要展開介紹基於領域的算法和隱語義模型算法。

2.2 基於領域的算法

2.2.1 算法概述

基於鄰域的方法是最著名的、在業界得到最廣泛應用的推薦算法,而基於鄰域的方法主要包含下面兩種算法:

  • 基於用戶的協同過濾算法(UserCF)
  • 基於物品的協同過濾算法(ItemCF)

算法涉及的基本步驟如下:

  • 1 收集用戶偏好,把用戶對物品的偏好轉換成可量化的綜合評分值
  • 2 找到相似的用戶或物品
  • 3 計算推薦

2.2.2 相似度計算

計算相似度主要有以下3種計算方式:

  • 1 歐氏距離(Euclidean Distance)
    向量歐式距離:
    d(x,y) = \sqrt{( \sum(x_i-y_i)^2 ) }
    相似度:
    sim(x,y) = \frac{1}{1+d(x,y)}

  • 2 皮爾遜相關係數(Pearson Correlation Coefficient)
    協方差,用來衡量2個向量的變化趨勢是否一致:
    cov(X,Y)=\frac{\sum_n^{i=1}(X_i-\overline{X})(Y_i-\overline{Y}))}{n-1}
    標準差:
    \sigma_X=\sqrt{ \frac{1}{N} \sum_{i=1}^{N}(x_i-\overline{x})^{2} }
    皮爾遜相關係數:
    \rho_{X,Y} = corr(X,Y) = \frac{cov(X,Y)}{\sigma_X\sigma_Y}
    皮爾遜相關係數使用協方差除以2個向量的標準差得到,值的範圍[-1,1]

  • 3 Cosine 相似度(Cosine Similarity,餘弦距離)
    T(x,y) = \frac{x \cdot y}{||x||^2 \times ||y||^2 } = \frac{\sum x_i y_i}{\sqrt {\sum x_i^2} \sqrt {\sum y_i^2}}
    其實就是求2個向量的夾角

3種計算相關係數的算法中,皮爾遜相關係數在生產中最爲常用。

2.2.3 鄰居的選擇

通過相似度計算出若干個最相似的鄰居後,如何選擇鄰居?主要有以下方式:

鄰居的選擇

  • 基於固定數量的鄰居

該方式直接選擇選擇固定數量的鄰居,有可能把相似度較小的對象也引入

  • 基於相似度門檻的鄰居

該方式先用相似度門檻篩選出鄰居的一個集合,再從集合裏面挑選出相似度較大的鄰居。
可以避免把相似度較小的對象引入,效果更好

2.2.4 基於用戶的協同過濾算法(UserCF)

算法概述

簡單而言,就是給用戶推薦和他興趣相似的其他用戶喜歡的物品

在一個在線個性化推薦系統中,當一個用戶 A 需要個性化推薦時,可以先找到和他有相似興趣的其他用戶,然後把那些用戶喜歡的、而用戶 A 沒有聽說過的物品推薦給 A 。這種方法稱爲基於用戶的協同過濾算法。

基於用戶的協同過濾

用於A與用戶C的興趣比較相似,用戶C喜歡了物品4,所以給用戶A推薦物品4

數學實現

用戶評分矩陣

已知用戶評分矩陣Matrix R(一般都是非常稀疏的),推斷矩陣中問號處的評分值

UserCF模型存在問題

  • 對於一個新用戶,很難找到鄰居用戶
  • 對於一個新物品,所有最近的鄰居都在其上沒有多少打分

基礎解決方案

  • 相似度計算最好使用皮爾遜相似度
  • 計算用戶相似度考慮共同打分物品的數目
    比如乘上
    \frac{min(n,N)}{N},n爲共同打分的商品數,N爲指定閾值
    這樣可以讓2個用戶的共同打分的商品數越少,相似度越小
  • 對打分進行歸一化處理
    比如把原來分數值範圍是[0,10],歸一化後變成[0,1]
  • 設置一個相似度閾值

基於用戶的協同過濾不流行的原因

  • 數據稀疏問題,數據存取困難
  • 數百萬用戶計算,用戶之間兩兩計算相似度,計算量過大
  • 人是善變的

2.2.5 基於物品的協同過濾算法(ItemCF)

算法概述

簡單而言,就是給用戶推薦和他之前喜歡的物品相似的物品

基於物品的協同過濾算法(簡稱 ItemCF )給用戶推薦那些和他們之前喜歡的物品相似的物品。

比如,該算法會因爲你購買過《數據挖掘導論》而給你推薦《機器學習》。不過, ItemCF 算法並不利用物品的內容屬性計算物品之間的相似度,它主要通過分析用戶的行爲記錄計算物品之間的相似度。該算法認爲,物品 A 和物品 B 具有很大的相似度是因爲喜歡物品 A 的用戶大都也喜歡物品B。

物品1和物品3都被用戶A和用戶B喜歡,所以認爲是相似物品,所以當用戶C喜歡物品1,就給用戶C推薦物品3

算法主要主要步驟如下:

  • 計算物品之間的相似度
  • 根據物品的相似度和用戶的歷史行爲給用戶生成推薦列表

數學實現思路

預測用戶評分

需要用戶用戶5對物品1的評分r_15,由於物品3、物品6是與物品1最爲相似的2個物品,取相似度作爲權重,所以r_15可以預測如下:
r\_15 = (0.41*2 + 0.59*3)/ (0.41 + 0.59) = 2.6

模型優勢

  • 計算性能高,通常用戶數量遠大於物品數量
    實際計算物品之間的相似度,可以只選擇同一個大分類下的類似物品來計算,以此減少計算量
  • 可預先保留結果,物品並不善變

2.2.6 UserCF和ItemCF綜合比較

UserCF 給用戶推薦那些和他有共同興趣愛好的用戶喜歡的物品,而 ItemCF 給用戶推薦那些和他之前喜歡的物品類似的物品。從這個算法的原理可以看到:

  • UserCF 的推薦結果着重於反映和用戶興趣相似的小羣體的熱點
  • ItemCF的推薦結果着重於維繫用戶的歷史興趣。

換句話說:

  • UserCF 的推薦更社會化,反映了用戶所在的小型興趣羣體中物品的熱門程度
  • ItemCF 的推薦更加個性化,反映了用戶自己的興趣傳承
  UserCF ItemCF
性能 適用於用戶較少的場合,如果用戶很多,計算用戶相似度矩陣代價很大 適用於物品數明顯小於用戶數的場合,如果物品很多(網頁),計算物品相似度矩陣代價很大
領域 時效性較強,用戶個性化興趣不太明顯的領域 長尾物品豐富,用戶個性化需求強烈的領域
實時性 用戶有新行爲,不一定造成推薦結果的立即變化 用戶有新行爲,一定會導致推薦結果的實時變化
冷啓動 在新用戶對很少的物品產生行爲後,不能立即對他進行個性化推薦,因爲用戶相似度表是每隔一段時間離線計算的。

新物品上線後一段時間,一旦有用戶對物品產生行爲,就可以將新物品推薦給和對它產生行爲的用戶興趣相似的其他用戶
新用戶只要對一個物品產生行爲,就可以給他推薦和該物品相關的其他物品。

但沒有辦法在不離線更新物品相似度表的情況下將新物品推薦給用戶
推薦理由 很難提供令用戶信服的推薦解釋 利用用戶的歷史行爲給用戶做推薦解釋,可以令用戶比較信服
常見場景 實時新聞
突發情況
圖書
電子商務
電影
外賣

3 基於用戶標籤推薦

3.1 標籤推薦概述

推薦系統聯繫用戶和物品的3種途徑

推薦系統的目的是聯繫用戶的興趣和物品,這種聯繫需要依賴不同的媒介。目前流行的推薦系統基本上通過3種方式聯繫用戶興趣和物品:

  • 基於用戶推薦UserCF
    利用和用戶興趣相似的其他用戶,給用戶推薦那些和他們興趣愛好相似的其他用戶喜歡的物品。
  • 基於物品推薦ItemCF
    給用戶推薦與他喜歡過的物品相似的物品
  • 基於特徵
    這裏的特徵有不同的表現方式,比如可以表現爲物品的屬性集合(比如對於圖書,屬性集合
    包括作者、出版社、主題和關鍵詞等),也可以表現爲隱語義向量(latent factor vector)。

3.2 標籤相關問題

3.2.1 標籤的定義

根據維基百科的定義,標籤是一種無層次化結構的、用來描述信息的關鍵詞,它可以用來
描述物品的語義。根據給物品打標籤的人的不同,標籤應用一般分爲兩種:

  • 一種是讓作者或者專家給物品打標籤
  • 另一種是讓普通用戶給物品打標籤,也就是UGC(User Generated Content,用戶生成的內容)的標籤應用UGC的標籤系統是一種表示用戶興趣和物品語義的重要方式。
    當一個用戶對一個物品打上一個標籤,這個標籤一方面描述了用戶的興趣,另一方面則表示了物品的語義,從而將用戶和物品聯繫了起來。因此下面主要討論UGC的標籤應用,研究用戶給物品打標籤的行爲,探討如何通過分析這種行爲給用戶進行個性化推薦。

3.2.2 用戶爲什麼要打標籤

從產品的角度,我們需要理解用戶打標籤的行爲,爲什麼要打標籤,只有深入瞭解用戶的行爲,我們才能基於這個行爲設計出令他們滿意的個性化推薦系統。

用戶這個行爲背後的原因主要可以從2個維度進行探討:

  • 社會維度,有些用戶標註是給內容上傳者使用的(便於上傳者組織自己的信息),而有些用戶標註是給廣大用戶使用的(便於幫助其他用戶找到信息)。
  • 功能維度,有些標註用於更好地組織內容,方便用戶將來的查找,而另一些標註用於傳達某種信息,比如照片的拍攝時間和地點等。

3.2.3 用戶打什麼樣的標籤

  • 表明物品是什麼
  • 表明物品的種類
  • 表明誰擁有物品
    比如很多博客的標籤中會包括博客的作者等信息
  • 表達用戶的觀點
    比如用戶認爲網頁很有趣,就會打上標籤 funny (有趣),認爲很無聊,就會打上標籤 boring (無聊)
  • 用戶相關的標籤
    比如 my favorite (我最喜歡的)、 my comment (我的評論)等
  • 用戶的任務
    比如 to read (即將閱讀)、 job search (找工作)等

3.2.4 爲什麼要給用戶推薦標籤

用戶瀏覽某個物品時,標籤系統非常希望用戶能夠給這個物品打上高質量的標籤,這樣才能促進標籤系統的良性循環。因此,很多標籤系統都設計了標籤推薦模塊給用戶推薦標籤。一般認爲,給用戶推薦標籤有以下好處。

  • 方便用戶輸入標籤
    讓用戶從鍵盤輸入標籤無疑會增加用戶打標籤的難度,這樣很多用戶不願意給物品打標籤,因此我們需要一個輔助工具來減小用戶打標籤的難度,從而提高用戶打標籤的參與度。
  • 提高標籤質量
    同一個語義不同的用戶可能用不同的詞語來表示。這些同義詞會使標籤的詞表變得很龐大,而且會使計算相似度不太準確。而使用推薦標籤時,我們可以對詞表進行選擇,首先保證詞表不出現太多的同義詞,同時保證出現的詞都是一些比較熱門的、有代表性的詞。

3.2.5 如何給用戶推薦標籤

用戶 u 給物品 i 打標籤時,我們有很多方法可以給用戶推薦和物品 i 相關的標籤。比較簡單的方
法有 4 種:

  • 給用戶 u 推薦整個系統裏最熱門的標籤(這裏將這個算法稱爲 PopularTags ),這個算法太簡單了,甚至於不能稱爲一種標籤推薦算法

  • 給用戶 u 推薦物品 i 上最熱門的標籤(這裏將這個算法稱爲 ItemPopularTags )

  • 用戶 u 推薦他自己經常使用的標籤(這裏將這個算法稱爲 UserPopularTags )

  • 前面兩種的融合(這裏記爲 HybridPopularTags ),該方法通過一個係數將上面的推薦結果線性加權,然後生成最終的推薦結果

3.3 一個最簡單的算法

基本步驟如下:

  • 統計每個用戶最常用的標籤
  • 對於每個標籤,統計被打過這個標籤次數最多的物品
  • 對於一個用戶,首先找到他常用的標籤,然後找到具有這些標籤的最熱門物品推薦給這個用戶

對於上面算法,用戶u對於物品i的興趣公式如下:
p(u,i)=\sum_bn_{u,b}n_{b,i}
B(u) 是用戶u打過的標籤集合,
B(i)是物品i被打過標籤的集合,
n_{u,b} 是用戶 u 打過標籤b的次數,
n_{b,i}是物品 i 被打過標籤 b 的次數

用戶 - 標籤 - 物品

某用戶使用過“幽默”標籤10次,“搞笑”標籤3次,“諷刺”標籤6次。這3個標籤被物品A使用的次數分別的4、7、2。
由此計算用戶對物品的興趣值爲:10 * 4 + 3* 7 + 6*2 = 73

上面的計算公式會傾向於給熱門標籤對應的熱門物品很大的權重,因此會造成推薦熱門的物品給用戶,從而降低推薦結果的新穎性,還有數據稀疏性的問題,可以通過計算結果除以懲罰項來進行修正。

4 系統冷啓動問題

問題簡介

系統冷啓動(cold start)問題主要在於如何在一個新開發的網站上(還沒有用戶,也沒有用戶行爲,只有一些物品的信息)設計個性化推薦系統,從而在網站剛發佈時就讓用戶體驗到個性化推薦服務這一問題

主要可以分爲3類:

  • 用戶冷啓動
    用戶冷啓動問題主要在於如何給新用戶做個性化推薦。當新用戶到來時,我們沒有他的行爲數據,所以也無法根據他的歷史行爲預測其興趣,從而無法藉此給他做個性化推薦。

  • 物品冷啓動
    物品冷啓動問題主要在於如何解決如何將新的物品推薦給可能對它感興趣的用戶。

  • 系統冷啓動
    系統剛剛新上線,用戶、物品數據較少

解決思路

針對上述3類冷啓動問題,一般來說,可以參考如下解決方案:

  • 提供非個性化的推薦
    非個性化推薦的最簡單例子就是熱門排行榜,我們可以給用戶推薦熱門排行榜,然後等到用戶數據收集到一定的時候,再切換爲個性化推薦。這也是最常見的解決方案。

  • 利用用戶註冊時提供的年齡、性別等數據做粗粒度的個性化。

  • 要求用戶在首次登錄時提供反饋,比如輸入感興趣的標籤,或感興趣的物品。收集用戶對物品的興趣信息,然後給用戶推薦那些和這些物品相似的物品。

  • 對於新加入的物品,可以利用內容信息,將它們推薦給喜歡過和它們相似的物品的用戶。

  • 在系統冷啓動時,可以引入專家的知識,通過一定的高效方式迅速建立起物品的相關度表。

5 評估指標

R(u) 是根據用戶在訓練集上的行爲給用戶作出的推薦列表, T(u) 是用戶在測試集上的行爲列表

  • 準確率
    用於度量模型的預測值與真實值之間的誤差
    RMSE = \frac {\sqrt {\sum_{u,i\in T (r_{ui} - \hat r_{ui})^2} }}{|T|}

  • 召回率
    用於度量有多個正例被分爲正例,這裏是正確推薦的數量佔測試集合上用戶行爲列表的比例。
    Recall = \frac{\sum_{u \in U}|R(u) \bigcap T(u)|}{\sum_{u \in U}|T(u)|}

  • 覆蓋率
    用戶衡量推薦的物品佔全部商品的比例,一般我們推薦的物品希望儘可能覆蓋更多類別
    常見有2種計算方法:
    通過推薦的商品佔總商品的比例
    Coverage = \frac {U_{u \in U} R(u)}{|I|}
    或者通過推薦物品的熵值得到覆蓋率,熵值越大,覆蓋率越大
    H = - \sum_{i=1}^n p(i) \log p(i)

  • 多樣性
    用於衡量每次推薦裏面的推送的物品佔所有可能性的比率,多樣性越大,每次推薦的物品越豐富
    Diversity = 1 - \frac{\sum_{i,j \in R(u), i \neq j}s(i,j) }{\frac{1}{2}|R(u)|(|R(u)|-1)}

實際上,不同的平臺還有不同的衡量標準,例如用戶滿意度,廣告收益,需要結合實際業務情況做策略調整。

6 系統架構

6.1 基於特徵的推薦系統

再次回顧一下上面提到的推薦系統聯繫用戶和物品的3種途徑

推薦系統聯繫用戶和物品的3種途徑

如果將這3種方式都抽象一下就可以發現,如果認爲用戶喜歡的物品也是一種用戶特徵,或者和用戶興趣相似的其他用戶也是一種用戶特徵,那麼用戶就和物品通過特徵相聯繫。

基於特徵的推薦系統

用戶特徵種類特別多,主要包括一下幾類

  • 用戶註冊屬性
    年齡、性別、國籍等

  • 用戶行爲特徵
    瀏覽、點贊、評論、購買等

6.2 系統整體架構

由於推送策略本身的複雜性,如果要在一個系統中把上面提到的各種特徵和任務都統籌考慮,那麼系統將會非常複雜,而且很難通過配置文件方便地配置不同特徵和任務的權重。
因此,推薦系統需要由多個推薦引擎組成,每個推薦引擎負責一類特徵和一種任務,而推薦系統的任務只是將推薦引擎的結果按照一定權重或者優先級合併、排序然後返回。

推薦系統基本架構圖

這樣做有2個好處:

  • 1 可以方便地增加/刪除引擎,控制不同引擎對推薦結果的影響。對於絕大多數需求,只需要通過不同的引擎組合實現。

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

    • 有些用戶可能喜歡利用他的年齡性別作出的推薦
    • 有些用戶可能比較喜歡看到新加入的和他興趣相關的視頻
    • 有些用戶喜歡比較新穎的推薦
    • 有些用戶喜歡專注於一個鄰域的推薦
    • 有些用戶喜歡多樣的推薦。

我們可以將每一種策略都設計成一個推薦引擎,然後通過分析用戶對推薦結果的反饋瞭解用戶比較喜歡哪些引擎推薦出來的結果,從而對不同的用戶給出不同的引擎組合權重。

6.3 推薦引擎架構

推薦引擎使用一種或幾種用戶特徵,按照一種推薦策略生成一種類型物品的推薦列表,基本架構如下圖:

 

推薦引擎架構圖

如圖,推薦引擎架構主要包括3部分

  • 用戶行爲數據模塊
    圖中A部分,該部分負責從數據庫或者緩存中拿到用戶行爲數據,通過分析不同行爲,生成當前用戶的特徵向量。不過如果是使用非行爲特徵,就不需要使用行爲提取和分析模塊了。該模塊的輸出是用戶特徵向量。

  • 物品數據模塊
    圖中B部分,該部分負責將用戶的特徵向量通過特徵-物品相關矩陣轉化爲初始推薦物品列表。

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

其中,有幾個模塊需要特別介紹一下:

  • 候選物品集合
    特徵 — 物品相關推薦模塊還可以接受一個候選物品集合。候選物品集合的目的是保證推薦結果只包含候選物品集合中的物品。它的應用場合一般是產品需求希望將某些類型的電視劇推薦給用戶。比如有些產品要求給用戶推薦最近一週加入的新物品,那麼候選物品集合就包括最近一週新加的物品。

  • 過濾模塊
    在得到初步的推薦列表後,還不能把這個列表展現給用戶,首先需要按照產品需求對結果進行過濾,過濾掉那些不符合要求的物品。一般來說,過濾模塊會過濾掉以下物品:

    • 用戶已經產生過行爲物品
      因爲推薦系統的目的是幫助用戶發現物品,因此沒必要給用戶推薦他已經知道的物品,這樣可以保證推薦結果的新穎性。

    • 候選物品以外的物品
      候選物品集合一般有兩個來源,一個是產品需求。比如在首頁可能要求將新加入的物品推薦給用戶,因此需要在過濾模塊中過濾掉不滿足這一條件的物品。另一個來源是用戶自己的選擇,比如用戶選擇了某一個價格區間,只希望看到這個價格區間內的物品,那麼過濾模塊需要過濾掉不滿足用戶需求的物品。

    • 某些質量很差的物品
      爲了提高用戶的體驗,推薦系統需要給用戶推薦質量好的物品,那麼對於一些絕大多數用戶評論都很差的物品,推薦系統需要過濾掉。這種過濾一般以用戶的歷史評分爲依據,比如過濾掉平均分在2分以下的物品。

  • 排名模塊
    經過過濾後的推薦結果直接展示給用戶一般也沒有問題,但如果對它們進行一些排名,則可以更好地提升用戶滿意度。實際進行排名時,可以基於新穎性、多樣性、用戶反饋進行排名優化。

7 總結

除了本文介紹的模型算法,基於用戶行爲推薦還有隱語義模型,基於圖的模型比較常見,還有的基於上下文、社交網絡推薦。實際有一些常見的算法庫可以實際推薦系統運算,包括LibRec,Crab等。

參考

《推薦系統實踐》

一文讀懂推薦系統知識體系)

個性化推薦系統總結

推薦系統介紹

作者:caison
鏈接:https://www.jianshu.com/p/90b7c7d4edf2
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯繫作者獲得授權並註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章