1. 程式人生 > 實用技巧 >推薦系統 00:概述

推薦系統 00:概述

核心內容:
協同過濾
矩陣分解
FM
GBDT + LR
Wide&Deep

一、什麼是推薦系統

1.What

使用者:推薦系統是一種幫助使用者快速發現有用資訊的工具
公司:推薦系統是一種增加公司產品與使用者接觸,購買等行為概率的工具

2.Why

使用者:在使用者需求並不十分明確的情況下進行資訊的過濾,與搜尋系統相比,推薦系統更多的利用使用者的各類歷史資訊猜測其可能喜歡的內容

公司:解決產品能夠最大限度地吸引使用者,留存使用者,增長使用者黏性,提高使用者轉化率,從而達到公司商目標連續增長的目的.

3.Who

使用者與公司是需要推薦系統的主要物件。

二、常用評測指標

如何評價一個推薦系統的好壞?

1.使用者滿意度
2.預測準確度
3.覆蓋率
4.多樣性
5.新穎性
6.AUC曲線

1.使用者滿意度
使用者作為推薦系統的參與者,其滿意度決定了推薦系統的好壞。
但是使用者滿意度是無法離線計算的,只能通過調查線上實驗
(關於線上實驗:
比如通過使用者的線上行為統計得到的,比如電商場景中,使用者如果購買了推薦的商品說明一定程度上他們是滿意的,因此可以通過購買率度量使用者的滿意度,與購買率類似的點選率,使用者停留時間和轉化率等指標都可以用來度量使用者的滿意度.)

2.預測準確度
度量使用者的實際行為與推薦系統預測結果的準確度。
離線評價指標,常用的兩個指標如下:

A.評分預測

預測使用者對物品的評分行為成為評分預測。

評分預測模型通過對使用者的歷史物品評分記錄進行建模,進而得到使用者的興趣模型,然後使用該模型預測使用者未見過商品的評分.

評分預測的預測準確度一般通過均方根誤差(RMSE)和平均絕對誤差(MAE)計算.

對於測試集中的一個使用者 u u u和物品 i i i,令 r u i r_{ui} rui是使用者 u u u對物品 i i i的實際評分,而 r u i ^ \hat{r_{ui}} rui^是推薦模型預測出的評分,那麼RMSE可以定義為: R M S E = ∑ u , i ∈ T ( r u i − r ^ u i ) 2 ∣ T ∣ RMSE = \sqrt{\frac{\sum_{u,i \in T}(r_{ui} - \hat{r}{ui})^2}{|T|}}

RMSE=Tu,iT(ruir^ui)2 MAE定義為: M A E = ∑ u , i ∈ T ∣ r u i − r ^ u i ∣ ∣ T ∣ MAE = \frac{\sum{u,i \in T}|r_{ui} - \hat{r}_{ui}|}{|T|} MAE=Tu,iTruir^ui RMSE由於存在平方項,使得使得使用者真實評分與推薦系統預測評分相差較大的使用者加大了懲罰,即該評測指標對系統要求更加的苛刻。

疑問1:上面是我從開源連結裡複製過來的,我的理解並不是加大了懲罰,因為RMSE其實還開了根號,如果非要說平方項使得懲罰被加大了也應該是MSE——均方誤差吧?

疑問2:|T|是樣本容量嗎?

B.TopN推薦
推薦系統在給使用者推薦物品的時候,往往會給使用者一個列表的推薦物品,這種場景下的推薦成為是TopN推薦,該推薦方式最常用的預測準確率指標一般是精確率(precision)和召回率(recall),令 R ( u ) R(u) R(u)為通過推薦模型得到的推薦列表, T ( u ) T(u) T(u)為使用者在實際場景中(測試集)的行為列表.

疑問:所謂的行為列表是使用者實際購買的商品列表嗎?

精確率(precision): 分類正確的正樣本個數佔分類器判定為正樣本的樣本個數比例(這裡 R ( u ) R(u) R(u)相當於是模型判定的正樣本,即預測所得的正樣本) P r e c i s i o n = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ R ( u ) ∣ Precision= \frac{\sum_{u \in U}|R(u) \cap T(u)|}{\sum_{u \in U}|R(u)|} Precision=uUR(u)uUR(u)T(u)

召回率(recall): 分類正確的正樣本個數佔真正的正樣本個數的比例(這裡的 T ( u ) T(u) T(u)相當於真正的正樣本集合,即使用者實際行為的正樣本)

R e c a l l = ∑ u ∈ U ∣ R ( u ) ∩ T ( u ) ∣ ∑ u ∈ U ∣ T ( u ) ∣ Recall= \frac{\sum_{u \in U}|R(u) \cap T(u)|}{\sum_{u \in U}|T(u)|} Recall=uUT(u)uUR(u)T(u)

有時候為了更加全面的評估TopN推薦,通常會選取不同的推薦列表長度 計算 多組精確率與召回率然後分別繪製出精確率曲線和召回率曲線,需要注意的是這裡並不是PR曲線,感興趣的可以瞭解一下PR曲線相關的知識.

3.覆蓋率

假如現在要做一個推薦系統,你希望實現什麼樣的功能?
是讓熱銷產品更加熱銷?讓冷門產品更加冷門?
還是讓所有商品出現的機率都差不多?
上面兩種場景,第二種或許才是大家期望的吧。如果推薦系統的覆蓋率是100%,就意味著任何的商品內容都有可能出現在使用者面前;而如果覆蓋率只有10%,那麼就意味著只能推薦十分之一的商品給使用者,推薦的內容就太狹窄了。

然而覆蓋率只能說明商品的種類問題,不能說明每種商品的出場頻率。因此就需要額外的指標來說明了——基尼係數

覆蓋率是用來描述一個推薦系統對物品長尾(long tail)的發掘能力,一個簡單的定義可以是:推薦系統所有推薦出來的商品集合數佔總物品集合數的比例.

主流商品往往代表了絕大多數使用者的需求,而長尾商品往往代表了一小部分使用者的個性化需求。因此,如果要通過發掘長尾提高銷售額,就必須充分研究使用者的興趣,而這正是個性化推薦系統主要解決的問題。

也有人說,長尾商品是那些銷量不高,需求不旺盛的產品。

但是對於相同的覆蓋率,不同物品的數量分佈,或者說是物品的流行度分佈是可以不一樣的.

為了更好的描述推薦系統挖掘長尾的能力,需要統計不同物品出現次數的分佈.

如果所有的物品都出現在推薦列表中,並且出現的次數都差不多,那麼推薦系統發掘長尾的能力就很好.所以可以通過研究物品在推薦列表中出現的次數分佈來描述推薦系統挖掘長尾的能力,如果這個分佈比較平緩說明推薦系統的覆蓋率比較高,而如果分佈比較陡說明推薦系統的覆蓋率比較低.下面分別使用資訊熵和基尼係數來定義覆蓋率.

資訊熵定義覆蓋率: 其中 p ( i ) p(i) p(i)是物品 i i i的流行度除以所有物品流行度之和 H = − ∑ i = 1 n p ( i ) l o g p ( i ) H = -\sum_{i=1}^n p(i) logp(i) H=i=1np(i)logp(i) 基尼係數定義覆蓋率: 其中 i j i_j ij是按照物品流行度p從小到大排序的物品列表中第 j j j個物品 G = 1 n − 1 ∑ j = 1 n ( 2 j − n − 1 ) p ( i j ) G=\frac{1}{n-1} \sum_{j=1}^{n}(2j-n-1)p(i_{j}) G=n11j=1n(2jn1)p(ij)

4.多樣性

人的興趣愛好通常是比較廣泛的,所以一個好的推薦系統得到的推薦列表中應該儘可能多的包含使用者的興趣,只有這樣才能增加使用者找到感興趣物品的概率.度量推薦列表中物品的多樣性換句話說就是度量推薦列表中所有物品之間的不相似性,可以通過不同的相似性函式來度量推薦列表中商品的相似性,比如商品基於內容的相似,基於協同過濾的相似,這樣就可以得到不同角度的多樣性.令函式 s ( i , j ) s(i,j) s(i,j)為物品 i i i和物品 j j j的相似性,那麼使用者推薦列表的多樣性可以定義為: D i v e r s i t y ( R ( u ) ) = 1 − ∑ i , j ∈ R ( u ) s ( i , j ) 1 2 ∣ R ( u ) ∣ ( ∣ R ( u ) ∣ − 1 ) Diversity(R(u))=1-\frac{\sum_{i,j \in R(u)}s(i,j)}{\frac{1}{2}|R(u)|(|R(u)|-1)} Diversity(R(u))=121R(u)(R(u)1)i,jR(u)s(i,j) 推薦系統整體的多樣性可以定義為所有使用者推薦列表多樣性的平均值: D i v e r s i t y = 1 U ∑ u ∈ U D i v e r s i t y ( R ( u ) ) Diversity = \frac{1}{U} \sum_{u\in U}Diversity(R(u)) Diversity=U1uUDiversity(R(u))

5.新穎性

滿足推薦的新穎性最簡單的方法就是給使用者推薦他們之前沒有看過的物品,但是每個使用者沒見過的物品數量是非常龐大的,所以一般會計算推薦物品的平均流行度,流行度越低的物品越有可能讓使用者覺得新穎,因此,如果推薦結果中的物品平均熱門程度比較低說明推薦的結果就可能比較新穎.

6.AUC曲線

AUC(Area Under Curve),ROC曲線下與座標軸圍成的面積

在講AUC前需要理解混淆矩陣,召回率,精確率,ROC曲線等概念
在這裡插入圖片描述
TP:真的真了(真實值是真的,預測也是真)

FN:真的假了(真實值是真的,預測為假了)

FP:假的真了(真實值是假的,預測為真了)

TN:假的假了(真實值是假的,預測也是假)

召回率與準確率(上述已經進行了說明),下面是另一種形勢的定義,本質上都是一樣的: R e c a l l = T P T P + F N P r e c i s e = T P T P + F P Recall = \frac{TP}{TP+FN}\ Precise=\frac{TP}{TP+FP} Recall=TP+FNTPPrecise=TP+FPTP ROC(Receiver Operating Characteristic Curve)曲線:

在這裡插入圖片描述
ROC曲線的橫座標為假陽性率(False Positive Rate, FPR),N是真實負樣本的個數, FP是N個負樣本中被分類器預測為正樣本的個數。

縱座標為真陽性率(True Positive Rate, TPR),P是真實正樣本的個數,TP是P個正樣本中被分類器預測為正樣本的個數。

注:還有其他的評價指標具體可以參考項亮的《推薦系統實踐》

三、召回

3.1 召回層在推薦系統架構中的位置及作用
在推薦系統架構中召回層與排序層是推薦系統的核心演算法層,而將推薦過程分成召回層與排序層主要是基於工程上的考慮,其中召回階段負責將海量的候選集快速縮小為幾萬到幾千的規模;而排序層則負責對縮小後的候選集進行精準排序。所以在召回階段往往會利用少量的特徵和簡單的模型對大規模的資料集進行快速的篩選,而在排序層一般會使用更多的特徵和更加複雜的模型進行精準的排序。

下面是召回層與排序層的特點

**召回層:**待計算的候選集合大、計算速度快、模型簡單、特徵較少,儘量讓使用者感興趣的物品在這個階段能夠被快速召回,即保證相關物品的召回率

**排序層:**首要目標是得到精準的排序結果。需要處理的物品數量少,可以利用較多的特徵,使用比較複雜的模型。

在設計召回層時,“計算速度”和“召回率”其實是矛盾的兩個指標,為提高“計算速度”,需要使召回策略儘量簡單一些;而為了提高“召回率”,要求召回策略儘量選出排序模型所需要的候選集,這也就要求召回策略不能過於簡單。在權衡計算速度和召回率後,目前工業界主流的召回方法是採用多個簡單策略疊加的“多路召回策略”

3.2 多路召回策略
所謂的“多路召回”策略,就是指採用不同的策略、特徵或簡單模型,分別召回一部分候選集,然後把候選集混合在一起供後續排序模型使用,可以明顯的看出,“多路召回策略”是在“計算速度”和“召回率”之間進行權衡的結果。其中,各種簡單策略保證候選集的快速召回,從不同角度設計的策略保證召回率接近理想的狀態,不至於損傷排序效果。

如下圖是多路召回的一個示意圖,在多路召回中,每個策略之間毫不相關,所以一般可以寫併發多執行緒同時進行,這樣可以更加高效。

在這裡插入圖片描述
上圖只是一個多路召回的例子,也就是說可以使用多種不同的策略來獲取使用者排序的候選商品集合,而具體使用哪些召回策略其實是與業務強相關的,針對不同的任務就會有對於該業務真實場景下需要考慮的召回規則。例如視訊推薦,召回規則可以是“熱門視訊”、“導演召回”、“演員召回”、“最近上映“、”流行趨勢“、”型別召回“等等。

多路召回存在的問題

雖然多路召回權衡了計算速度和召回率的問題,可以使得用於排序的候選商品更加的豐富,但是實際的多路召回仍然存在一些問題。如上圖所示,對於每一路召回都會從商品集合中拉回K個商品,這裡的K是一個超引數,對於K的選擇一般需要通過離線評估加線上的A/B測試來確定合理的K值。除此之外,對於不同的任務具體策略的選擇也是人工基於經驗的選擇,選擇的策略之間的資訊是割裂的,無法總和考慮不同策略對一個物品的影響。

基於上述問題,Embedding召回是一個綜合性強且計算速度也能滿足需求的召回方法。
3.3 Embedding召回
在當前的主流推薦系統中,Embedding的身影已經無處不在,從一定意義上可以說,把Embedding做好了,整個推薦系統的一個難題就攻克了,下面會從什麼是Embedding,常見的Embedding技術有哪些,以及如何用Embedding做召回進行一個簡單的總結。

Embedding是什麼?

Embedding其實是一種思想,主要目的是將稀疏的向量(如one-hot編碼)表示轉換成稠密的向量,下圖直觀的顯示了one-hot編碼和Embedding表示的區別於聯絡,即Embedding相當於是對one-hot做了平滑,而onehot相當於是對Embedding做了max pooling。
常見的Embedding技術有哪些?
目前主流的Embedding技術主要可以分為三大類。

  • text embedding
  • image embedding
  • graph embedding

在推薦系統領域,text embedding技術是目前使用最多的embedding技術,對於文字特徵可以直接使用該技術,對於非文字的id類特徵,可以先將其轉化成id序列再使用text embedding的技術獲取id的embedding再做召回。

常見的text Embedding的技術有:

  • 靜態向量:word2vec, fasttext, glove
  • 動態向量:ELMO, GPT, BERT

對於image embedding其實主要是對於有圖或者視訊的特徵,目前計算機視覺模型已經發展的比較成熟了,對於影象與視訊的識別都有效果比較好的模型,大部分都是卷積模組通過各種連線技巧搭建的高效模型,可以使用現有的預訓練模型提取影象或者視訊的向量特徵,然後用於召回。

對於社交網路相關的推薦,進行推薦的使用者與用於之間或者商品之間天然的存在某種複雜的圖結構的關係,如何利用圖中節點與節點之間的關係對其進行向量化是非常關鍵的,在這種場景下基於序列的text embedding和基於卷積模型的image embedding都顯得力不從心,在這樣的背景下Graph Embedding逐漸在推薦系統中流行起來。經典的Graph Embedding模型有, Deep Walk, Node2Vec,LINE以及比較新的阿里巴巴2018年公佈的EGES graph Embedding模型。

四、 課後思考

1.為什麼使用AUC

例如0.7的AUC,其含義可以大概理解為:給定一個正樣本和一個負樣本,在70%的情況下,模型對正樣本的打分高於對負樣本的打分。可以看出這個解釋下,我們關心的只有正負樣本之間的分數高低,而具體的分支則無關緊要

【多高的AUC才算高】:

參考文章 https://zhuanlan.zhihu.com/p/24217322

2.如何使用Embedding做召回?

參考騰訊的推薦系統 embedding 技術實踐總結

References:
1.https://github.com/datawhalechina/team-learning-rs/blob/master/RecommendationSystemFundamentals/01%20%E6%A6%82%E8%BF%B0.md

2.關於推薦系統中的長尾商品:
https://www.cnblogs.com/shenxiaolin/p/10450503.html

3.覆蓋率與基尼係數參考:https://cloud.tencent.com/developer/article/1076245