【推薦系統】一、推薦系統簡介


1. 推薦系統的作用和意義

​ 在這個時代,無論信息消費者還是信息生產者都面臨巨大的挑戰。

​     信息消費者:在大量信息中找到自己感興趣的信息很困難。

​     信息生產者:將自己生產的信息讓廣大消費者關注很困難。

​ 推薦系統將用戶與信息聯系起來。

1.1 用戶角度

​    推薦系統解決在“信息過載[1]的情況下,用戶如何高效獲取感興趣的信息。

    比如:在大量電影、電視劇中無法選擇出自己喜歡的,或者不知道自己喜歡的;在購物網站,不知道哪些商品適合自己等。

​    另外,用戶大部分時候沒有特別明確的需求,因為如果有明確的需求,在搜索框找自己想要的東西就行。

搜索引擎和推薦系統區別:

  • 搜索引擎需要用戶主動提供准確的關鍵詞來尋找信息。

  • 推薦系統可以通過分析用戶的歷史行為給用戶的興趣建模,從而主動給用戶推薦能夠滿足他們興趣和需求的信息。

  • 兩者互補

1.2 公司角度

​    推薦系統解決產品能夠最大限度地吸引用戶、留存用戶、增加用戶黏性、提高用戶轉化率的問題,從而達到公司商業目的。

1.3 物品角度

​    推薦系統可以更好地發掘物品的長尾(Long Tail)[2]

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

2. 推薦系統的邏輯架構

推薦系統的本質其實就是要處理 “人”“信息” 之間的關系問題

2.1 信息(Item)

數字時代,信息是關鍵

​    這種信息,實際上是多種多樣的。在商品推薦中是指“商品信息”,在視頻推薦中是指“視頻信息”,我們將其統稱為物品信息

​    物品信息包含了物品的屬性、特點等等。

2.2 人(User)

人 才是一切服務的對象

​    從“人”的角度出發,為了更可靠地推測出“人”的興趣點,推薦系統希望可以利用大量與“人”有關的信息,我們將其統稱為用戶信息

​    用戶信息包含了用戶的歷史行為、人口屬性、關系網等等。

2.3 場景(Context)

環境千差萬別,情況也瞬息萬變

​    在具體的推薦場景中,用戶還會受到不同環境信息的影響,我們將其統稱為場景信息上下文信息

​    場景信息包含了例如時間、地點、用戶此時的狀態的等等。

2.4 推薦系統的形式化定義

​    對於某個用戶U(User),在特定的場景 C(Context) 下,針對海量的物品信息構建一個函數,預測用戶對於特定候選物品 I(Item) 的喜好程度,再根據喜好程度對所有候選物品進行排序,生成推薦列表的問題。

IMG_0234

3. 推薦系統的技術架構

3.1 兩類問題

​     深度學習推薦系統架構和經典的推薦系統架構是一脈相承的,其本質是對經典的推薦系統架構中某些特定的模塊進行改進,使之能夠支持深度學習的應用,因此經典推薦系統框架仍然具有舉足輕重的作用。

​ 實際的推薦系統中,需要着重解決的兩類問題:

  1. 數據和信息:用戶信息、物品信息、場景信息分別是什么?如何存儲、更新和處理這些數據呢?
  2. 算法和模型:推薦系統模型如何訓練、預測以及如何達成更好的推薦效果?

“數據和信息”部分逐漸發展為推薦系統中融合了數據離線批處理、實時流處理的數據流框架;

“算法和模型”部分則進一步細化為推薦系統中,集訓練(Training)、評估(Evaluation)、部署(Deployment)、線上推斷(Online Inference)為一體的模型框架。

IMG_0235

3.2 數據部分

​    數據部分主要負責用戶、物品、場景信息的收集和處理。

​    對數據處理實時性由強到弱排序依次為:客戶端與服務器端實時數據處理、流處理平台准實時數據處理、大數據平台離線數據處理。

​    即 在得到原始數據信息后,推薦系統的數據處理系統會將原始數據進一步加工。

3.3 模型部分

模型部分是推薦系統的主體

​    模型的結構一般由 召回層排序層 以及 補充策略與算法層 組成。

3.3.1 召回層[3]

​    利用高效的召回規則、算法或簡單的模型,快速從海量候選集中召回用戶可能感興趣的物品。

3.3.2 排序層[4]

​    利用排序模型對初篩的候選集進行精排序

1

3.3.3 補充策略與算法層

​    也稱為再排序層

​    在將推薦列表返回給用戶之前,針對多樣性流行度新鮮度 等指標,結合一些補充的策略以及算法對推薦列表進行適當調整,最終形成用戶可見的推薦列表。

3.3.4 總結

​    以上模塊共同組成了推薦系統模型部分的框架。

​    排序層 模型是推薦系統產生效果的重點,也是研究的重心!

​    召回層就好比歌唱比賽的海選,對於所有數據快速進行篩選。

​    排序層就好比歌唱比賽的晉級賽,從海選通過的選手中選出最好的一部分。

​    最后的補充層就好比決賽,對於本來已經很好的選手,進行最后地選擇。

4. 深度學習與推薦系統

深度學習到底給推薦系統帶來了什么革命性的影響呢?

​    在邏輯架構中我們知道,居於中心位置的抽象函數 \(f(U,I,C)\) ,負責對用戶的內心想法進行“猜測”,為用戶可能感興趣的產品進行打分,最終得到推薦物品列表,這個函數一般稱為“推薦系統模型”

​    深度學習應用在推薦系統中,極大地增強了推薦模型的 擬合能力[5]表達能力[6]

​    什么意思呢?

​     如果我們說 \(f(U,I,C)\) 這個函數具有最優的表達形式,那么傳統模型只能夠擬合出此函數的近似形式,而深度學習模型則可以極大程度地接近這個最優的表達形式。

​     另外,深度學習模型還具備一個無法替代的優勢:我們可以讓深度學習模型的神經網絡模擬很多用戶興趣的變遷過程,甚至用戶做出決定的思考過程。(這也是深度學習模型的恐怖之處)

5. 推薦系統評測

什么是好的推薦系統?

​     最開始很多人認為,好的推薦系統就是能夠准確預測的推薦系統。實則不然,比如一件商品,某用戶早就有想買的打算,不管推薦給他與否他都會買,這樣的推薦結果並沒有增加此商品的潛在購買人數,因此准確率看起來是很好的指標,但其實是一個很失敗的推薦。

​     舉一個極端例子:某系統預測明天太陽將在東方升起,雖然准確率可以達到100%,但是這樣的預測卻沒有任何意義。

​     好的推薦系統不僅能夠准確預測用戶的行為,還可以幫助用戶找到自己感興趣但是卻不容易發現的東西。

5.1 推薦系統實驗方法

分為 離線實驗用戶調查在線實驗

5.1.1 離線實驗

5.1.1.1 步驟

  1. 獲得用戶行為數據,生成數據集
  2. 將數據集分成訓練集和測試集
  3. 在訓練集上訓練用戶興趣模型,在測試集上進行預測
  4. 通過事先定義的指標評測算法在測試集上的預測結果。

​ 和傳統機器學習訓練模型過程類似

5.1.1.2 優缺點

優點 缺點
不需要有對實際系統的控制權 無法計算商業上關心的指標
不需要用戶參與實驗 離線實驗的指標和商業指標存在差距
速度快,可以測試大量算法

5.1.2 用戶調查

離線實驗的指標和商業指標有差距,即高預測准確率並不代表高用戶滿意度。

​     需要一個較為真實的環境測試算法,最好的辦法就是上線測試,但是具有較高的風險,因此上線測試前一般需要做一次用戶調查。

5.1.2.1 注意事項

控制成本

​    用戶調查的成本很高,需要用戶大量時間完成任務並回答問題,有時候甚至需要花錢雇用測試用戶。一般大量測試用戶耗費成本,而少量測試用戶得出的結論往往沒有統計意義。因此需要一方面控制成本,一方面保證測試結果。

雙盲實驗

​    不要讓實驗人員和用戶事先知道測試的目標,以免用戶的回答和實驗人員的測試受主觀成分的影響。

相同分布

​    測試用戶需要盡量保證測試用戶的分布和真實用戶的分布相同,比如男女各半,以及年齡、活躍度的分布都和真實用戶分布盡量相同。

5.1.2.2 優缺點

優點 缺點
可以獲得很多體現用戶主觀感受的指標 招募測試用戶代價較大、成本較高
相對於在線實驗風險較低,容易彌補錯誤 設計雙盲實驗困難

5.1.3 在線實驗

​     當完成離線測試和用戶調查后,可以將推薦系統上線做AB測試[7],將它和舊的算法進行比較。

5.1.3.1 優缺點

優點 缺點
可以公平獲得不同算法實際在線是的性能指標 周期較長,需要長期實驗才能得到可靠的結果

​     一般不會用AB測試測試所有的算法,只會測試在離線實驗和用戶調查中表現很好的算法。 一個大型網站的AB測試系統的設計也是一項復雜的工程。

5.1.4 總結

​     一個新的推薦系統最終上線,需要完成如上的三個實驗

  1. 需要通過離線實驗證明它在很多指標上優於現有算法
  2. 需要通過用戶調查確定它的用戶滿意度不低於現有算法
  3. 需要通過AB測試確定它在我們關心的指標優於現有算法

5.2 評測指標

在以上三種測試中,使用各種評測指標來評價推薦系統各方面的性能。

5.2.1 用戶滿意度

​     用戶作為推薦系統的重要參與者,用戶滿意度是最重要的指標,但是其無法離線計算,只能在用戶調查或在線測試中獲得。

​     在在線系統中,用戶滿意度主要由一些對用戶行為的統計得到。比如:

  1. 使用購買率度量用戶滿意度
  2. 使用用戶反饋界面收集用戶滿意度
  3. 更一般的情況,使用點擊率、用戶停留時間、轉化率等指標度量用戶滿意度

5.2.2 預測准確度

​     預測准確度度量了一個推薦系統或算法預測用戶行為的能力,是最重要的推薦系統離線評測指標

5.2.2.1 評分預測

預測用戶對物品的評分

均方根誤差(RMSE)

\[\mathrm{RMSE} = \frac{\sqrt{\sum_{u,i\in T}(r_{ui}-\hat{r}_{ui})^2}}{\big|T\big|} \]

平均絕對誤差(MAE)

\[\mathrm{MAE} = \frac{\sum_{u,i\in T}\big|r_{ui}-\hat{r}_{ui}\big|}{\big|T\big|} \]

​    其中,\(r_{ui}\) 表示用戶u對物品i的實際評分,\(\hat{r}_{ui}\) 代表推薦算法給出的預測評分。

兩個指標優缺點

​     RMSE加大了對預測不准的用戶評分的懲罰(平方項),因此對系統評測更苛刻。

​     如果評分系統是基於整數建立,對預測結果取整會降低MAE的誤差。

5.2.2.2 TopN推薦

給用戶一個個性化推薦列表,就是TopN推薦

召回率(Recall)

\[\mathrm{Recall} = \frac{\sum_{u\in U}\big|R(u)\cap T(u)\big|}{\sum_{u\in U}\big|T(u)\big|} \]

准確率(Precision)

\[\mathrm{Precision} =\frac{\sum_{u\in U}\big|R(u)\cap T(u)\big|}{\sum_{u\in U}\big|R(u)\big|} \]

​     有時,為了全面評測兩個指標,一般選取不同推薦列表長度N,計算一組准確率/召回率,畫出PR曲線[8]

5.2.2.3 關於評分預測和TopN的問題

​     雖然評分預測一直是推薦系統的研究熱點,且絕大多數的推薦系統研究都是基於用戶評分數據的評分預測。

​     但是有一個十分顯而易見的問題,比如:電影推薦的目的是找到用戶可能感興趣的電影,而不是預測用戶看了某個電影后會給電影什么樣的評分。即預測用戶想看什么電影更重要。

​     所以TopN推薦往往比評分預測更有現實意義。

5.2.3 覆蓋率

描述一個推薦系統對物品長尾的發掘能力。

​     定義方法不同,一般使用推薦系統能夠推薦出的物品占總物品集合的比例來代表覆蓋率。

\[\mathrm{Coverage} =\frac{{\Large |} \bigcup_{u \in U} R(u){\Large|}}{\big|I\big| } \]

​     覆蓋率是內容提供商較為關心的指標。

​     熱門排行榜的推薦覆蓋率很低,因為它只會推薦那些熱門物品,而這些物品占總物品比例很小。

​     但是以上覆蓋率定義過於粗糙,為了更細致地描述推薦系統發掘長尾的能力,需統計推薦列表中不同物品出現次數的分布,如果所有物品都出現在推薦列表中,那么證明發掘長尾的能力較好,即這個分布越平緩,推薦系統的覆蓋率越高;這個分布越陡峭,推薦系統的覆蓋率越低。

​     使用兩種指標定義覆蓋率。

信息熵(Information Entropy)

\[H = -\sum_{i=1}^n p(i)\log p(i) \]

​     其中,\(p(i)\) 是物品 \(i\) 的流行度除以所有物品流行度之和。

基尼系數(Gini Index)

\[G = \frac{1}{n-1} \sum_{j=1}^n (2j-n-1)p(i_j) \]

​     其中,\(i_j\) 是按照物品流行度 \(p()\) 從小到大排序的物品列表中第 \(j\) 個物品。

基尼系數計算原理:

IMG_0251

​     我們將物品按照熱門程度進行從低到高排序,如上圖所示,黑色曲線表示最不熱門的 \(x\%\) 物品的總流行度占系統的比例 \(y\%\) 。這條曲線在 \(y=x\) 之下,與 \(y=x\) 相交在 \((0,0)\)\((1,0)\)

​     令 \(S_A\) 表示 A 的面積,\(S_B\) 表示 B 的面積,那么基尼系數為 \(\frac{S_A}{S_A+S_B}\) ,即 基尼系數在區間 \([0,1]\)

​     若系統的流行度很平均,那么 \(S_A\) 就會很小,從而基尼系數會很小,若系統的流行度不平均,那么 \(S_A\) 就會很大,從而基尼系數也會很大。

馬太效應

強者更強,弱者更弱

​     熱門排行榜就有馬太效應,因為越熱門的東西曝光機會就越高,就越有人知道,就會越流行。

​     推薦系統的初衷就是希望消除馬太效應,使得各種物品都可以展現給對它們感興趣的用戶,但是一些主流算法是具有馬太效應的。

​     看推薦系統是否有馬太效應的辦法就是使用基尼系數。若 \(G_1\) 表示從初始用戶行為中計算出的物品流行度的基尼系數,\(G_2\) 表示從推薦列表中計算出物品流行度的基尼系數,若 \(G_2 \gt G_1\) ,就說明推薦算法具有馬太效應。

5.2.4 多樣性

用戶的興趣是廣泛的,推薦系統需要能覆蓋用戶不同的興趣領域。

​     多樣性描述了推薦列表中物品兩兩之間的不相似性。

\[\mathrm{Diversity} = 1-\frac{\sum_{i,j\in R(u),i\ne j}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} \]

​     其中,\(s(i,j)\) 代表物品 \(i\) 和物品 \(j\) 之間的相似度。

​     推薦系統整體的多樣性可以表示為所有推薦列表多樣性的平均值

\[\mathrm{Diversity} = \frac{1}{|U|}\sum_{u\in U} \mathrm{Diversity(R(u))} \]

多樣性推薦也要兼顧主次。比如:

​     某用戶 \(80\%\) 的時間在看武打片,\(20\%\) 的時間在看動畫片,那么如果按照比例進行推薦,既考慮了多樣性又沒有忽略用戶的主要興趣。

5.2.5 新穎性

推薦給用戶他們從來沒有聽說過的物品。

​     新穎的推薦不應該給用戶推薦他們已經使用過或評價過的物品。

​     或許越不熱門的物品可能會讓用戶更覺得新穎,因此有考慮使用平均流行度度量新穎性的想法,但這種方法較為粗略,因為不同用戶不知道的東西是不一樣的,可能有些人就是很熟知冷門物品。

​     要准確度量新穎性,需要進行用戶調查。

​     通過犧牲推薦精度來提高多樣性和新穎性很容易,比較困難的是如何在不犧牲精度的情況下提高多樣性和新穎性。

5.2.6 驚喜度

如果推薦結果與用戶歷史興趣不相似,但是卻讓用戶感覺很滿意

​     注意與新穎性不同,因為新穎性僅僅取決於用戶是否聽說過這個推薦結果。

5.2.7 信任度

如果用戶信任推薦系統,那么就會增加用戶與推薦系統之間的交互

​     度量信任度只能通過用戶調查的方式。

​     提升信任度兩個方法:

  • 增加推薦系統的透明度
  • 考慮用戶社交網絡信息,利用好友信息給用戶做推薦

5.2.8 實時性

許多物品具有較強的時效性(新聞,微博等),因此需要在物品還有時效性時推薦給用戶

  • 推薦系統需要實時地更新推薦列表滿足用戶新的行為變化
  • 推薦系統需要能夠將新加入系統的物品推薦給用戶(冷啟動)

5.2.9 健壯性

能夠帶來利益的算法就會被人攻擊

​     推薦系統也會遇到作弊的問題,比如行為注入攻擊

​     水軍、刷分等等都是攻擊的體現。

​     提高健壯性的方法

  • 選擇健壯性高的算法。
  • 設計推薦系統時盡量使用代價較高的用戶行為,比如用戶購買行為和用戶瀏覽行為,顯然購買行為的權重更高。
  • 在使用數據前,進行攻擊檢測,從而對數據進行清理。

5.2.10 商業目標

不同網站具有不同的商業目標

5.2.11 總結

IMG_0252

​     對於可以離線優化的指標,在給定覆蓋率、多樣性、新穎性等限制條件下,盡可能優化預測准確度。


  1. 信息時代,信息過於豐富產生的副作用,大量有用無用的信息充斥在我們的生活中,讓我們無法正常處理。 ↩︎

  2. 指那些原來不受到重視的銷量小但種類多的產品或服務由於總量巨大,累積起來的總收益超過主流產品的現象 ↩︎

  3. 實際上就是快速粗選,在巨大數量級的數據集中迅速找到合適的少部分信息用以備選。 ↩︎

  4. 主要以提高推薦效果為目標,對推薦列表進行精准排序。 ↩︎

  5. 深度學習模型具備理論上擬合任何函數的能力。 ↩︎

  6. 讓模型更豐富,預測地更准。 ↩︎

  7. 通過一定規則將用戶隨機分為幾組,每組采用不同的算法,通過統計不同組用戶的各個不同評測指標比較不同算法。 ↩︎

  8. 准確率和召回率曲線。 ↩︎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM