讀書筆記 |《推薦系統實踐》- 個性化推薦系統總結

 

推薦系統實踐

對於推薦系統,本文總結內容,以下圖所示:算法

 
推薦系統.png

文章很長,你能夠跳着看你感興趣的部分。數據庫

1、什麼是推薦系統

1. 爲何須要推薦系統

結論是,爲了解決互聯網時代下的信息超載問題。緩存

看個數據:服務器

據IDC《數字宇宙》的研究報告代表,2020 年全球新建和複製的信息量將超過40ZB,是2012年的12倍;中國的數據量在2020年超過8ZB,比2012年增加22倍。網絡

單位換算是這樣的:
1ZB = 1024 EB;
1EB = 1024 PB;
1PB = 1024 TB;
1TB = 1024 GB;
1GB = 1024 MB;架構

即使坐擁海量信息,用戶卻沒法找到真正對本身有用的,可見效率之低。機器學習

從前,人們是這樣解決信息超載問題的:ide

  • 現實中,我有個東西想買(有明確目的)工具

    • 小便利店 --> 憑經驗瀏覽全部貨架;
    • 大型超市 --> 藉助分類指示牌;

    不知道買啥(沒有明確目的)佈局

    • 空間大,隨便逛
  • 引伸到互聯網,有明確目的時

    • 電商網站 --> 搜索引擎,信息檢索;

    沒有明確目的時

    • 巴掌大的地兒,靠個性化推薦

信息超載,不是互聯網獨有的,在現實生活也會存在這樣的問題,畢竟人的大腦同時可以處理的信息只有4-7個,咱們面對的問題歷來沒有變過,區別在於當下的狀況,所處的環境。

正如《大數據時代》中做者所言,這僅僅是一個開始,人們與世界的交流方式,從原來對因果關係的渴求,轉變爲如今對相關關係的發現和使用上。

2. 搜索引擎與推薦系統

衆所周知,解決信息過載問題,最有表明性的解決方案是【分類目錄】和【搜索引擎】,這兩種解決方案分別催生了互聯網領域的兩家著名公司--雅虎和谷歌。

 
搜索引擎
  • 分類目錄,是將著名網站分門別類,從而方便用戶根據類別查找公司。

但隨着互聯網規模不斷擴大,分類目錄網站只能涵蓋少數熱門網站,已沒法知足用戶需求。所以,搜索引擎誕生了。

  • 搜索引擎,用戶經過輸入關鍵字,查找本身須要的信息。

可是,用戶必須主動提供準確的關鍵詞,才能找到信息。因此用戶的其餘需求,好比用戶沒法找到準確描述本身需求的關鍵詞時,搜索引擎就無能爲力了。

  • 推薦系統,和搜索引擎同樣,是一種幫助用戶快速發展有用信息的工具。經過分析用戶的歷史行爲,給用戶的興趣建模,從而主動給用戶推薦可以知足他們興趣和需求的信息。

而且,推薦系統可以很好的發掘物品的長尾,挑戰傳統的2/8原則(80%的銷售額來自20%的熱門品牌)。

從技術角度來看,搜索引擎和推薦系統的區別在於:

1)搜索引擎,注重搜索結果之間的關係和排序;
2)推薦系統,須要研究用戶的興趣模型,利用社交網絡的信息進行個性化的計算;

3)搜索引擎,由用戶主導,須要輸入關鍵詞,自行選擇結果。若是結果不滿意,須要修改關鍵詞,再次搜索;
4)推薦系統,由系統主導,根據用戶的瀏覽順序,引導用戶發現本身感興趣的信息;

3. 推薦系統的定義

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

高質量的推薦系統會使用戶對系統產生依賴,所以,推薦系統不只能爲用戶提供個性化服務,還能與用戶創建長期穩定的關係,提升用戶忠誠度,防止用戶流失。

2、推薦系統評測

如何斷定什麼是好的推薦系統?這是評測須要解決的首要問題。

通常推薦系統的參與方有3個:

  • 用戶
  • 物品提供商
  • 推薦系統提供網站

所以,評測一個推薦系統時,須要考慮3方的利益,一個好的推薦系統是可以令三方雙贏的系統。

推薦系統評測,總結圖以下:

 
推薦系統評測.png

1. 實驗方法

得到評測指標的實驗方法,一般分3種:

  • 離線實驗(offline experiment)
  • 用戶調查(user study)
  • 在線實驗(online experiment)

咱們分別介紹3種實驗方法的優缺點。

1)離線實驗

離線實驗的方法的步驟以下:
a)經過日誌系統得到用戶行爲數據,並按照必定格式生成一個標準的數據集;
b)將數據集按照必定的規則分紅訓練集和測試集;
c)在訓練集上訓練用戶興趣模型,在測試集上進行預測;
d)經過事先定義的離線指標,評測算法在測試集上的預測結果。

從以上步驟看出,離線實驗的都是在數據集上完成的。意味着,它不須要一個實際的系統做爲支撐,只須要有一個從日誌中提取的數據集便可。

離線實驗的優勢是:

  • 不須要有對實際系統的控制權;
  • 不須要用戶參與實踐;
  • 速度快,能夠測試大量算法;
缺點是:
  • 數據集的稀疏性限制了適用範圍,例如一個數據集中沒有包含某用戶的歷史行爲,則沒法評價對該用戶的推薦結果;
  • 評價結果的客觀性,沒法獲得用戶主觀性的評價;
  • 難以找到離線評價指標和在線真實反饋(如 點擊率、轉化率、點擊深度、購買客單價、購買商 品類別等)之間的關聯關係;
2)用戶調查

用戶調查須要一些真實的用戶,讓他們在須要測試的推薦系統上完成一些任務。在他們完成任務時,須要觀察和記錄用戶的行爲,並讓他們回答一些問題。

最後,咱們經過分析他們的行爲和答案,瞭解測試系統的性能。

用戶調查的優勢是:

  • 能夠得到用戶主觀感覺的指標,出錯後容易彌補;

缺點是:

  • 招募測試用戶代價較大;
  • 沒法組織大規模的測試用戶,統計意義不足;
3)在線實驗

在完成離線實驗和用戶調查以後,能夠將系統上線作AB測試,將它和舊算法進行比較。

在線實驗最經常使用的評測算法是【A/B測試】,它經過必定的規則將用戶隨機分紅幾組,對不一樣組的用戶採用不一樣的算法,而後經過統計不一樣組的評測指標,比較不一樣算法的好壞。

它的核心思想是:
a) 多個方案並行測試;
b) 每一個方案只有一個變量不一樣;
c) 以某種規則優勝劣汰。

其中第2點暗示了A/B 測試的應用範圍:A/B測試必須是單變量。
對於推薦系統的評價中,惟一變量就是--推薦算法。

有個很棒的網站,http://www.abtests.com,裏面有不少經過實際AB測試提升網站用戶滿意度的例子。

AB測試的優勢是:

  • 能夠公平得到不一樣算法實際在線時的性能指標,包括商業上關注的指標;

缺點是:

  • 週期較長,必須進行長期的實驗才能獲得可靠的結果;

大型網站作AB測試,可能會由於不一樣團隊同時進行各類測試對結果形成干擾,因此切分流量是AB測試中的關鍵。

不一樣的層以及控制這些層的團隊,須要從一個統一的地方得到本身AB測試的流量,而不一樣層之間的流量應該是正交的。

 
AB測試系統.png
4)總結

通常來講,一個新的推薦算法最終上線,須要完成上述的3個實驗。

  • 首先,經過離線實驗證實它在不少離線指標上優於現有的算法;
  • 其次,經過用戶調查肯定用戶滿意度不低於現有的算法;
  • 最後,經過在線AB測試肯定它在咱們關心的指標上優於現有的算法;

2. 評測指標

評測指標用於評測推薦系統的性能,有些能夠定量計算,有些只能定性描述。

1)用戶滿意度

用戶滿意度是評測推薦系統的重要指標,沒法離線計算,只能經過用戶調查或者在線實驗得到。

調查問卷,須要考慮到用戶各方面的感覺,用戶才能針對問題給出準確的回答。

在線系統中,用戶滿意度經過統計用戶行爲獲得。好比用戶若是購買了推薦的商品,就表示他們在必定程度上滿意,能夠用購買率度量用戶滿意度。

通常狀況,咱們能夠用用戶點擊率、停留時間、轉化率等指標度量用戶的滿意度。

2)預測準確度

預測準確度,度量的是推薦系統預測用戶行爲的能力。 是推薦系統最重要的離線評測指標。

大部分的關於推薦系統評測指標的研究,都是針對預測準確度的。由於該指標能夠經過離線實驗計算,方便了學術界的研究人員。

因爲離線的推薦算法有不一樣的研究方向,準確度指標也不一樣,根據研究方向,可分爲:預測評分準確度和TopN推薦。

a)預測評分準確度

預測評分的準確度,衡量的是算法預測的評分與用戶的實際評分的貼近程度。
這針對於一些須要用戶給物品評分的網站。

預測評分的準確度指標,通常經過如下指標計算:

  • 平均絕對偏差(MAE)

     
    MAE.png

    MAE因其計算簡單、通俗易懂獲得了普遍的應用。但MAE指標也有必定的侷限性,由於對MAE指標貢獻比較大的每每是那種很難預測準確的低分商品。

    因此即使推薦系統A的MAE值低於系統B,極可能只是因爲系統A更擅長預測這部分低分商品的評分,即系統A比系統B能更好的區分用戶很是討厭和通常討厭的商品,顯然這樣區分的意義不大。

  • 均方根偏差(RMSE)


     
    RMSE.png

    Netflix認爲RMSE加大了對預測不許的用戶物品評分的懲罰(平方項的懲罰),於是對系統的評測更加苛刻。

    研究代表,若是評分系統是基於整數創建的(即用戶給的評分都是整數),那麼對預測結果取整數會下降MAE的偏差。

b)TopN推薦

網站提供推薦服務時,通常是給用戶一個個性化的推薦列表,這種推薦叫作TopN推薦。

TopN推薦的預測準確率,通常經過2個指標度量:

  • 準確率(precision)


     
     
  • 召回率(recall)

 
 

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

TopN推薦更符合實際的應用需求,好比預測用戶是否會看一部電影,比預測用戶看了電影以後會給它什麼評分更重要。

3)覆蓋率

覆蓋率(coverage)是描述一個推薦系統對物品長尾的發掘能力。
最簡單的定義是,推薦系統推薦出來的物品佔總物品的比例。

假設系統的用戶集合爲U,推薦系統給每一個用戶推薦一個長度爲N的物品列表R(u),覆蓋率公式爲:

 
 

覆蓋率是內容提供者關心的指標,覆蓋率爲100%的推薦系統能夠將每一個物品都推薦給至少一個用戶。

除了推薦物品的佔比,還能夠經過研究物品在推薦列表中出現的次數分佈,更好的描述推薦系統的挖掘長尾的能力。

若是分佈比較平,說明推薦系統的覆蓋率很高;若是分佈陡峭,說明分佈系統的覆蓋率較低。

信息論和經濟學中有兩個著名指標,能夠定義覆蓋率:

  • 信息熵
 
 

p(i)是物品i的流行度除以全部物品流行度之和。

  • 基尼係數(Gini Index)

     
     

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

     
     
    • 評測馬太效應

    馬太效應,是指強者越強,弱者越弱的效應。推薦系統的初衷是但願消除馬太效應,使得各物品都能被展現給對它們感興趣的人羣。

    可是,不少研究代表,如今的主流推薦算法(協同過濾)是具備馬太效應的。評測推薦系統是否具備馬太效應可使用基尼係數。

    如,G1是從初始用戶行爲中計算出的物品流行度的基尼係數,G2是從推薦列表中計算出的物品流行度的基尼係數,那麼若是G1<G2,就說明推薦算法具備馬太效應。

4)多樣性

爲了知足用戶普遍的興趣,推薦列表須要可以覆蓋用戶不一樣興趣的領域,即須要具備多樣性。

多樣性描述了推薦列表中物品兩兩之間的不類似性。假設s(i,j)在[0,1]區間定義了物品i和j之間的類似度,那麼用戶u的推薦列表R(u)的多樣性定義以下:

 
 

推薦系統總體多樣性能夠定義爲全部用戶推薦列表多樣性的平均值:

 
 
5)新穎性

新穎性也是影響用戶體驗的重要指標之一。它指的是向用戶推薦非熱門非流行物品的能力。

評測新穎度最簡單的方法,是利用推薦結果的平均流行度,由於越不熱門的物品,越可能讓用戶以爲新穎。

此計算比較粗糙,須要配合用戶調查準確統計新穎度。

6)驚喜度

推薦結果和用戶的歷史興趣不類似,但卻讓用戶滿意,這樣就是驚喜度很高。

目前驚喜度尚未公認的指標定義方式,最近幾年研究的人不少,深刻研究能夠參考一些論文。

7)信任度

若是用戶信任推薦系統,就會增長用戶和推薦系統的交互。

提升信任度的方式有兩種:

  • 增長系統透明度
    提供推薦解釋,讓用戶瞭解推薦系統的運行機制。

  • 利用社交網絡,經過好友信息給用戶作推薦
    經過好友進行推薦解釋

度量信任度的方式,只能經過問卷調查。

8)實時性

推薦系統的實時性,包括兩方面:

  • 實時更新推薦列表知足用戶新的行爲變化;
  • 將新加入系統的物品推薦給用戶;
9)健壯性

任何能帶來利益的算法系統都會被攻擊,最典型的案例就是搜索引擎的做弊與反做弊鬥爭。

健壯性(robust,魯棒性)衡量了推薦系統抗擊做弊的能力。

2011年的推薦系統大會專門有一個推薦系統健壯性的教程,做者總結了不少做弊方法,最著名的是行爲注入攻擊(profile injection attack)。
就是註冊不少帳號,用這些帳號同時購買A和本身的商品。此方法針對亞馬遜的一種推薦方法,「購買商品A的用戶也常常購買的其餘商品」。

評測算法的健壯性,主要利用模擬攻擊:

a)給定一個數據集和算法,用算法給數據集中的用戶生成推薦列表;
b)用經常使用的攻擊方法向數據集中注入噪聲數據;
c)利用算法在有噪聲的數據集上再次生成推薦列表;
d)經過比較攻擊先後推薦列表的類似度評測算法的健壯性。

提升系統健壯性的方法:

  • 選擇健壯性高的算法;
  • 選擇代價較高的用戶行爲,如購買行爲比瀏覽行爲代價高;
  • 在使用數據前,進行攻擊檢測,從而對數據進行清理。
10)商業目標

設計推薦系統時,須要考慮最終的商業目標。不一樣網站具備不一樣的商業目標,它與網站的盈利模式息息相關。

總結:

 
 

做者認爲,對於能夠離線優化的指標,在給定覆蓋率、多樣性、新穎性等限制條件下,應儘可能優化預測準確度。

3. 評測維度

增長評測維度的目的,就是知道一個算法在什麼狀況下性能最好。

通常評測維度分3種:

  • 用戶維度
    主要包括用戶的人口統計學信息、活躍度以及是否是新用戶等;
  • 物品維度
    包括物品的屬性信息、流行度、平均分以及是否是新加入的物品等;
  • 時間維度
    包括季節,是工做日仍是週末,白天仍是晚上等;

若是推薦系統的評測報告中,包含了不一樣維度下的系統評測指標,就能幫咱們全面瞭解系統性能。

3、推薦算法通用模型

1. 推薦算法通用模型

推薦系統有3個重要的模塊:

  • 用戶建模模塊
  • 推薦對象建模模塊
  • 推薦算法模塊
 
 

通用的推薦系統模型流程如圖,技術一點的描述過程以下:
a)推薦系統經過用戶行爲,創建用戶模型;
b)經過物品的信息,創建推薦對象模型;
c)經過用戶興趣匹配物品的特徵信息,再通過推薦算法計算篩選,找到用戶可能感興趣的推薦對象,而後推薦給用戶。

  • 用戶建模模塊
    創建用戶模型以前,須要考慮下面幾個問題:
    (1)模型的輸入數據有哪些,如何獲取模型的輸入數據。
    (2)如何考慮用戶的興趣及需求的變化。
    (3)建模的對象是誰。
    (4)如何建模。
    (5)模型的輸出是什麼。

     
     

    獲取用戶信息就是解決模型輸入數據的問題,輸入數據主要有如下幾種:
    (1)用戶屬性:人口統計學信息;

    (2)用戶手動輸入的信息:包括用戶在搜索引擎中輸入的關鍵詞,用戶反饋的信息,對推薦對象的喜愛程度等;

    (3)用戶的瀏覽行爲和瀏覽內容:包括瀏覽次數、頻率、停留時間等,瀏覽頁面時的操做(收藏、保存、複製等)等。服務器端保存的日誌也能較好地記錄用戶的瀏覽行爲和內容。

    (4)推薦對象的屬性特徵:不一樣的推薦對象,用戶建模的輸入數據也不一樣。網頁等推薦對象一般考慮對象的內容和用戶之間的類似性,而產品等推薦對象一般考慮用戶對產品的評價。

    爲提升推薦質量,推薦對象的相關的屬性也要考慮進去,好比除網頁內容之外,還要考慮網頁的發佈人、時間等。

    產品類的對象還要考慮產品的品牌、價格、出售時間等。

獲取模型輸入數據的方式有顯式獲取、隱式獲取和啓發式獲取三種方式。

用戶模型的建模方法主要有遺傳算法、基於機器學習的 方法,例如 TF-IDF、自動聚類、貝葉斯分類器、決策樹概括和神經網絡方法等。

  • 推薦對象建模

考慮如下幾個問題:
(1)提取推薦對象的什麼特徵,如何提取,提取的特徵用於什麼目的。
(2)對象的特徵描述和用戶文件描述之間有關聯。
(3)提取到的每一個對象特徵對推薦結果會有什麼影響。
(4)對象的特徵描述文件可否自動更新。

2. 算法模塊

目前主要的推薦算法,以下圖所示。

 
 

推薦算法是整個推薦系統中最核心的部分,在很大程度上決定了推薦系統類型和性能的優劣。

4、推薦算法詳述

 
 
1)基於內容的推薦

原理是基於用戶感興趣的物品A,找到和A內容信息相近的物品B。

利用用戶和物品自己的內容特徵,如用戶的地理位置、性別、年齡,電影物品的導演、演員、發佈時間等。
好比你喜歡看《怪奇物語I》,系統會給你推薦《怪奇物語II》。

因此提取推薦對象的特徵,是內容推薦算法的關鍵。可是對於多媒體內容,如視頻、音樂,很難找到它們之間的特性關聯性。

基於內容的推薦的優勢以下:
(1) 簡單、有效,推薦結果直觀,容易理解,不須要領域知識。
(2) 不須要用戶的歷史數據,如對對象的評價等。
(3) 沒有關於新推薦對象出現的冷啓動問題。
(4) 沒有稀疏問題。
(5) 算法成熟,如數據挖掘、聚類分析等。

基於內容的推薦的缺點以下:
(1) 受到了推薦對象特徵提取能力的限制。
好比圖像、視頻,沒有有效的特徵提取方法。即使是文本資源,特徵提取也只能反應一部份內容,難以提取內容質量,會影響用戶滿意度。

(2) 很難出現新的推薦結果。
根據用戶興趣的喜愛進行推薦,很難出現驚喜。對於時間敏感的內容,如新聞,推薦內容基本相同,體驗度較差。

(3)存在新用戶出現時的冷啓動問題。
當新用戶出現時, 系統較難得到該用戶的興趣偏好,沒法進行有效推薦。

(4) 推薦對象內容分類方法須要的數據量較大。

2)協同過濾算法

僅僅基於用戶行爲數據設計的推薦算法,稱爲協同過濾算法。此方法主要根據用戶對物品的歷史行爲,尋找用戶或物品的近鄰集合,以此計算用戶對物品的偏好。

主要的算法分3種,最普遍應用的是基於領域的方法:

a) 基於領域的模型算法

主要包含兩種算法:

 
 

i) 基於用戶的協同過濾算法(UserCF)
這種算法給用戶推薦和他興趣類似的其餘用戶喜歡的物品。

  • 算法步驟:
    (1) 找到和目標用戶興趣類似的用戶集合;
    (2) 找到這個集合中的用戶喜歡的,且目標用戶沒有據說過的物品,推薦給目標用戶。

算法的關鍵是計算兩個用戶的興趣類似度。協同過濾計算用戶興趣類似度是利用用戶行爲的類似度。

 
UserCF
  • 計算用戶類似度的方法有3種:
    • 餘弦類似性
    • 相關類似性(皮爾森係數相關)
    • 修正的餘弦類似性

計算用戶興趣類似度時,要避免熱門物品自帶馬太效應的影響。換句話說,兩個用戶對冷門物品採起過一樣行爲,更能說明他們的興趣類似。

  • 缺點:
    • 用戶數目越大,計算用戶興趣類似度越複雜,時間、空間複雜度的增加和用戶數的增加近似於平方關係。
    • 解釋性不強

ii) 基於物品的協同過濾算法(ItemCF)
這種算法給用戶推薦和他以前喜歡的物品類似的物品。

該算法是目前業界應用最多的算法,如亞馬遜、Netflix、YouTube,都是以該算法爲基礎。

  • ItemCF 與 基於內容的推薦算法的區別

    • 基於內容的推薦算法,計算的是物品內容屬性之間的類似度。如,電影的導演是否是同一我的;
    • ItemCF是經過用戶的行爲計算物品之間的類似度。如,物品A、B具備很大類似度,是由於喜歡物品A的用戶也大都喜歡物品B。
  • 算法步驟:
    (1) 根據用戶的歷史行爲,計算物品之間的類似度;
    (2) 根據物品的類似度和用戶的歷史行爲給用戶生成推薦列表。

兩個物品產生類似度,是由於它們共同被不少用戶喜歡,也就是說,每一個用戶均可以經過它們的歷史興趣列表給物品「貢獻」類似度。

 
ItemCF
  • 用戶活躍度對物品類似度的影響
    IUF(Inverse User Frequence),用戶活躍度對數的倒數的參數。
    論文提出的觀點是,活躍用戶對物品類似度的貢獻應該小於不活躍的用戶。用IUF修正物品類似度的計算。

  • 物品類似度的歸一化
    研究代表,將ItemCF的類似度矩陣按最大值歸一,能夠提升推薦的準確率。

  • UserCF 與 ItemCF 的優缺點

 
 
b) 隱語義模型算法

LFM(latent factor model)隱語義模型是最近幾年推薦系統領域最熱門的話題,它的核心思想是經過隱含特徵聯繫用戶興趣和物品。

i)隱語義模型解決了什麼問題

好比,用戶A的興趣列表裏,有關於偵探小說、科普圖書和計算機技術圖書。用戶B的興趣列表集中在數學和機器學習方面。

如何給用戶A和B推薦圖書?

除了UserCF與ItemCF,還能夠對書和物品的興趣進行分類。對於某個用戶,首先獲得他的興趣分類,而後從分類中挑選他可能喜歡的物品。

  • 基於興趣分類的方法,大概須要解決的問題:

    • 如何給物品進行分類?
    • 如何肯定用戶對哪類物品感興趣,以及感興趣程度?
    • 對於一個給定的分類,選擇哪些屬於這個類的物品推薦給用戶,以及如何肯定這些物品在一個類中的權重?
  • 人工編輯分類存在的問題:

    • 編輯的意見不能表明各類用戶的意見。
    • 編輯很難控制分類的粒度。
    • 編輯很難給一個物品多個分類。
    • 編輯很難給出多維度的分類。
    • 編輯很難決定一個物品在某一個分類的權重。
  • 隱語義分析技術解決了上述5個問題:

    • 用戶的行爲表明了用戶對物品分類的見解。好比,若是兩個物品被不少用戶同時喜歡,這個兩個物品極可能屬於同一類。
    • 隱語義技術容許咱們指定最終的分類數目,分類數越多,分類粒度越細。
    • 隱語義技術能夠計算出物品屬於每一個類的權重,由於每一個物品不是硬性地被分到一個類目中。
    • 隱語義技術給出的每一個分類都不是一個維度,它根據用戶的共同興趣計算得出。
    • 隱語義技術能夠經過統計用戶行爲決定物品在每一個類中的權重,若是喜歡某個類的用戶都會喜歡某個物品,那麼這個物品在這個類中的權重就可能較高。

隱語義技術有不少著名的模型和方法,其中耳熟能詳的名詞有pLSA、LDA、隱含類別模型、隱含主題模型、矩陣分解。這些技術和方法在本質上是相同的,均可以用於個性化推薦系統。

ii)LFM算法詳解

 
LFM公式

推薦系統的用戶行爲分爲顯性反饋和隱性反饋,LFM在顯性反饋數據(評分數據)上解決評分預測問題達到了很好的精度。

對於隱性反饋數據,這種數據集的特色是,只有正樣本(用戶喜歡什麼物品),沒有負樣本(用戶對什麼物品不感興趣)。

在隱性反饋數據集上應用LFM解決TopN推薦,第一個關鍵問題是如何給每一個用戶生成負樣本。

  • 對於這個問題,Rong Pan在文章中作了不少探討,對比了以下幾種方法:
    • 1)對於一個用戶,用他全部沒有過行爲的物品做爲負樣本。
    • 2)對於一個用戶,從他沒有過行爲的物品中均勻採樣出一些物品做爲負樣本。
    • 3)對於一個用戶,從他沒有過行爲的物品中採樣出一些物品做爲負樣本,但採樣時,保證每一個用戶的正負樣本數目至關。
    • 4)對於一個用戶,從他沒有過行爲的物品中採樣出一些物品做爲負樣本,但採樣時,偏重採樣不熱門的物品。

對於1),它的明顯缺點是負樣本太多,正負樣本數目相差懸殊,於是計算複雜度很高,最終結果的精度也不好。另外三種方法的效果,做者表示,3)> 2)> 4)。

  • 對負樣本的採樣還應該遵循如下原則:
    • 對每一個用戶,要保證負樣本的平衡(數目類似)
    • 對每一個用戶採樣負樣本時,要選取那些很熱門,而用戶卻沒有行爲的物品。
 
 

經過離線實驗對比LFM在TopN推薦中的性能,在LFM中,有4個重要參數:

  • 隱特徵的個數F;
  • 學習速率alpha;
  • 正則化參數lambda;
  • 負樣本/正樣本比例ratio;
    實驗代表,ratio參數對LFM的性能影響最大。

iii)基於LMF的實際系統的例子

雅虎的研究人員公佈過一個使用LFM進行雅虎首頁個性化設計的方案。

LFM的缺點是,很難實現實時的推薦。
經典的LFM模型每次訓練時,須要掃描全部用戶的行爲記錄,這樣才能計算出用戶隱類向量和物品隱類向量。因此通常天天只訓練一次。

雅虎的解決方案是:

  • 利用新聞連接的內容屬性(關鍵詞、類別等)獲得連接的內容特徵向量;
  • 實時收集用戶對連接的行爲,並用這些數據獲得連接的隱特徵向量;
  • 利用公式預測用戶是否會單擊連接。

iiii)LFM和基於領域的方法區別

總結以下圖:

 
 
c) 基於圖的模型

用戶行爲很容易用二分圖表示,所以不少圖的算法均可以用到推薦系統中。也能夠把基於領域的模型看作是基於圖的模型的簡單形式。

i)用戶行爲數據的二分圖表示

基於圖的模型(graph-based model)是推薦系統中的重要內容,其基本思想是將用戶行爲數據表示爲一系列的二元組。

每個二元組(u,i)表明用戶u對物品 i 產生過行爲,這樣即可以將這個數據集表示爲一個二分圖。

下圖是一個簡單的用戶物品二分圖模型,其中圓形節點表明用戶,方形節點表明物品,圓形節點和方形節點之間的邊表明用戶對物品的行爲。好比圖中用戶節點A和物品節點a、b、d相連,說明用戶A對物品a、b、d產生過行爲。

 
 

ii)基於圖的推薦算法

基於用戶行爲二分圖,給用戶u推薦物品,能夠轉化爲計算用戶頂點u和與全部物品頂點之間的相關性,而後取與用戶沒有直接邊相連的物品,按照相關性的高低生成推薦列表。

其實,這是一個圖上的排名問題,最著名的就是Google的pageRank算法。

  • 度量圖中兩個頂點之間相關性,通常取決於3個因素:

    • 兩個頂點之間的路徑數;
    • 兩個頂點之間的路徑長度;
    • 兩個頂點之間的路徑通過的頂點;
  • 相關性高的兩個頂點,通常具備如下特徵:

    • 兩個頂點之間有不少路徑相連;
    • 連接兩個頂點之間的路徑長度都比較短;
    • 連接兩個頂點之間的路徑不會通過出度比較大的頂點。

iii)PageRank算法簡介

PageRank是Larry Page 和 Sergey Brin設計的,用來衡量特定網頁相對於搜索引擎中其餘網頁的重要性的算法,其計算結果做爲Google搜索結果中網頁排名的重要指標。

網頁之間經過超連接相互鏈接,互聯網上不可勝數的網頁就構成了一張超大的圖。

PageRank假設用戶從全部網頁中隨機選擇一個網頁進行瀏覽,而後經過超連接在網頁直接不斷跳轉。到達每一個網頁後,用戶有兩種選擇:到此結束或者繼續選擇一個連接瀏覽。

算法令用戶繼續瀏覽的機率爲d,用戶以相等的機率在當前頁面的全部超連接中隨機選擇一個繼續瀏覽。

這是一個隨機遊走的過程。
當通過不少次這樣的遊走以後,每一個網頁被訪問用戶訪問到的機率就會收斂到一個穩定值。這個機率就是網頁的重要性指標,被用於網頁排名。算法迭代關係式以下所示:

 
 

上式中PR(i)是網頁i的訪問機率(也就是重要度),d是用戶繼續訪問網頁的機率,N是網頁總數。in(i)表示指向網頁i的網頁集合,out(j)表示網頁j指向的網頁集合。

iiii)PersonalRank算法簡介

對於推薦系統,咱們須要計算的是物品節點相對於某一個用戶節點u的相關性。

Standford的Haveliwala於2002年在他《Topic-sensitive pagerank》一文中提出了PersonalRank算法,該算法可以爲用戶個性化的對全部物品進行排序。它的迭代公式以下:

 
 

咱們發現PersonalRank跟PageRank的區別只是用ri替換了1/N,也就是說從不一樣點開始的機率不一樣。

咱們從新描述一下算法的過程:

假設要給用戶u進行個性化推薦,能夠從用戶u對應的節點Vu開始在用戶物品二分圖上進行隨機遊走。

遊走到任何一個節點時,首先按照機率α決定是繼續遊走,仍是中止此次遊走並從Vu節點開始從新遊走。若是決定繼續遊走,那麼就從當前節點指向的節點中按照均勻分佈隨機選擇一個節點做爲遊走下次通過的節點。

這樣,通過不少次隨機遊走後,每一個物品節點被訪問到的機率會收斂到一個數。最終的推薦列表中物品的權重就是物品節點的訪問機率。

  • 缺點
    PersonalRank每次都須要在全圖迭代,因此時間複雜度很是高。
    解決辦法是,
    • 減小迭代次數,在收斂前中止。會影響精度,但影響不大。
    • 從矩陣論出發,從新設計算法。
3)基於關聯規則的推薦

主要用於購物車分析。

(如下內容摘自網絡)

關聯規則是反映一個事物與其餘事物之間的相互依存性和關聯性,經常使用於實體商店或在線電商的推薦系統:經過對顧客的購買記錄數據庫進行關聯規則挖掘,最終目的是發現顧客羣體的購買習慣的內在共性。

例如購買產品A的同時也連帶購買產品B的機率,根據挖掘結果,調整貨架的佈局陳列、設計促銷組合方案,實現銷量的提高,最經典的應用案例莫過於<啤酒和尿布>。

關聯規則分析中的關鍵概念包括:支持度(Support)、置信度(Confidence)與提高度(Lift)。首先,咱們簡單溫故下這3個關鍵指標~

一、支持度 (Support):支持度是兩件商品(A∩B)在總銷售筆數(N)中出現的機率,即A與B同時被購買的機率。相似於中學學的交集,須要原始同時知足條件。

 
 

公式:

 
 

例子說明:

好比某超市2016年有100w筆銷售,顧客購買可樂又購買薯片有20w筆,顧客購買可樂又購買麪包有10w筆,那可樂和薯片的關聯規則的支持度是20%,可樂和麪包的支持度是10%。

二、置信度 (Confidence):置信度是購買A後再購買B的條件機率。簡單來講就是交集部分C在A中比例,若是比例大說明購買A的客戶很大指望會購買B商品。

公式:

 
 

例子說明:

某超市2016年可樂購買次數40w筆,購買可樂又購買了薯片是30w筆,顧客購買可樂又購買麪包有10w筆,則購買可樂又會購買薯片的置信度是75%,購買可樂又購買麪包的置信度是25%,這說明買可樂也會買薯片的關聯性比麪包強,營銷上能夠作一些組合策略銷售。

三、提高度 (Lift):提高度表示先購買A對購買B的機率的提高做用,用來判斷規則是否有實際價值,即便用規則後商品在購物車中出現的次數是否高於商品單獨出如今購物車中的頻率。若是大於1說明規則有效,小於1則無效。

公式:

 
 

例子說明:

可樂和薯片的關聯規則的支持度是20%,購買可樂的支持度是3%,購買薯片的支持度是5%,則提高度是1.33>1, A-B規則對於商品B有提高效果。

4)基於知識推薦

基於知識的推薦(Knowledge-based Recommendation),主要應用於知識型的產品中,主要解決的問題是,爲你量身定製升級打怪的進階路線圖。

好比你想學習鋼琴,若是你是剛入門的小白,那你最好從簡單的譜子學起。但這樣帶來一個問題,是由於你的歷史行爲都在初級範圍以內,根據興趣偏好,推薦給你的信息也都在初級範圍。沒法知足你的升級需求。

這個時候就須要基於知識的推薦。推薦系統知道你如今所處的知識級別(用戶知識),也知道學習鋼琴全部的級別(產品知識),而後根據你如今的狀況爲你推薦適合你進階的信息。

以上爲我的理解,百度百科的解釋爲:

使用用戶知識和產品知識, 經過推理什麼產品能知足用戶需求來產生推薦。這種推薦系統不依賴於用戶評分等關於用戶偏好的歷史數據, 故其不存在冷啓動方面的問題。基於知識的推薦系統響應用戶的即時需求, 當用戶偏好發生變化時不須要任何訓練。

舉例:
針對海量習題帶來的信息過載致使學習針對性不強、效率不高等問題,提出了基於知識點層次圖的個性化習題推薦算法(A Personalized Exercises Recommendation Algorithm based on Knowledge Hierarchical Graph,ReKHG)。

首先,借鑑課程知識點體系結構的特色,構建了表徵知識點層次關係的權重圖,該權重圖有效反映知識點間的層次關係。

而後,根據學生對知識點的掌握狀況,在知識點層次圖的基礎上提出了一種個性化習題推薦算法。該算法經過更新學生-知識點失分率矩陣,獲取學生掌握薄弱的知識點,以此實現習題推薦。

ps:以上舉例來自於某論文,沒有用於實際案例中。關於知識推薦,沒有找到太多實際案例,國外的論文論述的比較多一些。

5)混合推薦

每一個算法都不是完美的,所以實際應用中,能夠混合使用各類推薦算法,各取所長。

5、推薦算法數據來源

 
 

1. 利用用戶行爲信息

用戶行爲數據通常存於日誌中。
用戶行爲能夠分爲:顯性反饋行爲和隱性反饋行爲。
互聯網上的不少數據分佈知足一種稱爲Power Law的分佈,稱爲長尾分佈。

2. 利用用戶標籤數據

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

推薦系統的目的是聯繫用戶的興趣和物品,這種聯繫須要依賴不一樣的媒介。目前流行的有3種方式:物品、用戶、特徵。

前兩種咱們都很熟悉,特徵有不一樣的表現形式,能夠是物品的屬性集合,能夠是隱語義向量,這裏咱們用標籤表示。

  • 標籤分兩類
    • 讓做者或者專家給物品打標籤
    • 讓普通用戶給物品打標籤,即UGC標籤應用,既描述了用戶的興趣又將表達了物品的語義。

以豆瓣爲例,打標籤做爲一種用戶重要的行爲,蘊含了豐富的用戶興趣信息。

  • 標籤推薦系統算法

    • 統計每一個用戶最經常使用的標籤
    • 對於每一個標籤,統計被打過這個標籤次數最多的物品
    • 對於一個用戶,首先找到他經常使用的標籤,而後找到具備這些標籤的最熱門物品推薦給這個用戶
  • 算法改進:

    • TF-IDF,下降熱門標籤的權重,使推薦結果更準確
    • 數據稀疏性:對於新用戶或者新物品來講,其標籤數量可能過少,須要對標籤進行擴展,即對每一個標籤找到和它類似的標籤,也就是計算標籤類似度。(拓展方法--話題模型)
    • 標籤清理:清理掉同義詞、無義詞,方便作出推薦解釋
  • 給用戶推薦標籤

    • 推薦的好處

      • 方便用戶輸入標籤
      • 提升標籤質量
    • 推薦方法

      • 推薦系統中最熱門的標籤(PopularTags)
      • 推薦物品最熱門的標籤(Item PopularTags)
      • 推薦用戶常用的標籤(User PopularTags)
      • 前面兩種融合(Hybrid PopularTags)
    • 冷啓動物品的推薦方法

      • 從物品的內容數據中抽取關鍵詞做爲標籤
      • 根據僅有的標籤作拓展

3. 利用上下文信息

用戶所處的上下文,包括用戶訪問推薦系統的時間、地點、心情等,有助於提升推薦系統的性能。

好比,用戶夏天喜歡過的T恤,冬天再推薦就不合適了。
用戶在中關村,打開美食推薦,若是給的結果是國貿是不合適了。

1) 時間上下文信息
  • 時間對用戶興趣的影響:

    • 用戶興趣是變化的
    • 物品也是有生命週期的
    • 季節效應
  • 推薦系統的實時性
    用戶興趣是不斷變化的,其變化體如今用戶不斷增長的新行爲中。一個實時的推薦系統須要可以實時響應用戶新的行爲,讓推薦列表不斷變化,從而知足用戶不斷變化的興趣。

    實現推薦系統的實時性除了對用戶行爲的存取有實時性要求,還要求推薦算法自己具備實時性,而推薦算法自己的實時性意味着:

    • 實時推薦系統不能天天都給全部用戶離線計算推薦結果,而後在線展現昨天計算出來的結果。因此,要求在每一個用戶訪問推薦系統時,都根據用戶這個時間點前的行爲實時計算推薦列表
    • 推薦算法須要平衡考慮用戶的近期行爲和長期行爲,即要讓推薦列表反應出用戶近期行爲所體現的興趣變化,又不能讓推薦列表徹底受用戶近期行爲的影響,要保證推薦列表對用戶興趣預測的延續性。
  • 推薦算法的時間多樣性
    推薦系統天天推薦結果的變化程度被定義爲推薦系統的時間多樣性。時間多樣性高的推薦系統中用戶會常常看到不一樣的推薦結果。

    提升推薦結果的時間多樣性須要分兩步解決:

    • 首先,須要保證推薦系統可以在用戶有了新的行爲後及時調整推薦結果,使推薦結果知足用戶最近的興趣;
    • 其次,須要保證推薦系統在用戶沒有新的行爲時也能常常變化一下結果,具備必定的時間多樣性

    若是用戶沒有行爲,推薦思路:

    • 在生成推薦結果時加入必定的隨機性。好比從推薦列表前20個結果中隨機挑選10個結果展現給用戶,或者按照推薦物品的權重採樣10個結果展現給用戶。
    • 記錄用戶天天看到的推薦結果,而後在天天給用戶進行推薦時,對他前幾天看到過不少次的推薦結果進行適當地降權。
    • 天天給用戶使用不一樣的推薦算法。能夠設計不少推薦算法,好比協同過濾算法、內容過濾算法等,而後在天天用戶訪問推薦系統時隨機挑選一種算法給他進行推薦。

協同過濾算法能夠利用時間信息提升預測的準確度。

  • 時間上下文相關的ItemCF算法

    • 物品類似度
      用戶在相隔很短的時間內喜歡的物品具備更高類似度。
    • 在線推薦
      用戶近期的行爲比用戶好久以前的行爲,更能體現用戶如今的興趣。
  • 時間上下文相關的UserCF算法

    • 用戶興趣類似度
      若是兩個用戶【同時】喜歡相同的物品,則他們有更大的興趣類似度。
    • 類似興趣用戶的最近行爲
      給用戶推薦和他興趣類似的用戶最近喜歡的物品。
2)地點上下文信息
  • 用戶興趣和地點相關的兩種特徵:
    • 興趣本地化,不一樣地方的用戶興趣存在着很大的差異,不一樣國家和地區用戶的興趣存在着必定的差別性。
    • 活動本地化,一個用戶每每在附近的地區活動。所以,在基於位置的推薦中咱們須要考慮推薦地點和用戶當前地點的距離,不能給用戶推薦太遠的地方。

4. 利用社交網絡數據

  • 獲取社交網絡數據的途徑

    • 電子郵件
    • 用戶註冊信息
    • 用戶位置數據
    • 論壇和討論組
    • 即時聊天工具
    • 社交網站
      • Facebook中的絕大多數用戶聯繫基於社交圖譜:因爲人們之間的親屬關係、工做關係而造成;
      • Twitter中的絕大多數用戶聯繫基於興趣圖譜:經過人們之間的共同興趣和信念造成;
  • 社交網絡數據的分類

    • 雙向確認的社交網絡數據,以Facebook和人人網爲表明,用戶之間造成好友關係須要經過雙方的確認;
    • 單向關注的社交網絡數據,以Twitter和新浪微博爲表明,用戶A能夠關注用戶B,而不用獲得用戶B的容許;
    • 基於社區的社交網絡數據,用戶之間並無明確的關係,可是這種數據包含了用戶屬於不一樣社區的數據。好比豆瓣小組,屬於同一個小組可能表明了用戶興趣的類似性;
  • 社會化推薦的優勢

    • 好友推薦能夠增長推薦的信任度
    • 社交網絡能夠解決冷啓動問題

6、冷啓動問題

1)冷啓動主要分3類:

  • 用戶冷啓動
    一個新用戶,沒有任何歷史行爲數據,怎麼作推薦。
  • 物品冷啓動
    一個新上線的物品,沒有用戶對它產生過行爲,怎麼推薦給感興趣的用戶。
  • 系統冷啓動
    一個新開發的網站,沒有用戶數據,怎麼作個性化推薦。

2)解決方案:

  • 提供非個性化推薦,如熱門排行。等有了數據以後再推薦。
  • 利用用戶註冊信息,作粗粒度的個性化。
  • 利用用戶的社交網絡帳號,導入用戶的好友,推薦好友喜歡的物品。
  • 用戶初次登陸時,對一些物品進行反饋,根據這些信息作個性化。
  • 對於新上線的物品,利用內容信息,推薦給喜歡相似物品的用戶。
  • 系統冷啓動,能夠引入外部資源,如專家知識,創建起物品的相關度。

3)冷啓動,啓動用戶興趣的物品須要具備如下特色:

  • 比較熱門
  • 具備表明性和區分性
  • 啓動物品集合須要有多樣性

4)選擇啓動物品集合的系統

如何設計一個選擇啓動物品集合的系統?Nadav Golbandi在論文中提出用一個決策樹解決。

首先,給定一羣用戶,用這羣用戶對物品評分的方差度量這羣用戶興趣的一致程度。若是方差很小,說明這一羣用戶的興趣不太一致,也就是物品具備比較大的區分度,反之則說明這羣用戶的興趣比較一致。

再根據用戶的評分方差計算物品的區分度。

也就是說,對於物品i,將用戶分爲3類--喜歡物品i的用戶,不喜歡物品i的用戶和不知道物品i的用戶。若是這3類用戶集合內的用戶對其餘的物品興趣很不一致,說明物品i具備較高的區分度。

算法首先從全部用戶中找到具備最高區分度的物品i,而後將用戶分紅3類。而後在每類用戶中再找到最具區分度的物品,而後將每一類用戶又各自分爲3類,也就是將總用戶分爲9類,而後繼續這樣下去,最終能夠經過對一系列物品的見解將用戶進行分類。

在冷啓動時,從根節點開始詢問用戶對該節點物品的見解,而後根據用戶的選擇將用戶放到不一樣的分枝,直到進入最後的葉子節點,此時對用戶的興趣有了比較清楚的瞭解,從而能夠開始對用戶進行比較準確地個性化推薦。

5)利用物品的內容信息

就是基於內容的推薦,很適合解決物品冷啓動問題。

物品冷啓動對諸如新聞網站等時效性很強的網站的推薦很是重要,由於那些網站中時時刻刻都有新加入的物品,並且每一個物品必須可以在第一時間展示給用戶,不然通過一段時間後,物品的價值就大大下降了。

通常來講,物品的內容能夠經過向量空間模型表示,該模型會將物品表示成一個關鍵詞向量。

若是物品的內容是諸如導演、演員等實體,能夠直接將實體做爲關鍵詞。
若是內容是文本,須要引入天然語言的技術抽取關鍵詞。如何創建文章、話題和關鍵詞的關係是話題模型研究的重點,表明性的話題模型有LDA。

LDA有3種元素,文檔、話題、詞語。詳細內容可參考相關論文。

向量空間模型的優勢是簡單,缺點是丟失了一些信息,好比關鍵詞之間的關係信息。

7、推薦系統實例

 
推薦系統和其餘系統之間的關係
 
3種聯繫用戶和物品的推薦系統

3)推薦系統架構
推薦系統須要由多個推薦引擎組成,每一個推薦引擎負責一類特性和一種任務,推薦系統的任務是將推薦引擎的結果按照必定權重或者優先級合併,排序而後返回。以下圖:

 
推薦系統架構圖
  • 優勢:
    • 方便增長或刪除引擎,控制不一樣引擎對推薦結果的影響。
    • 能夠實現推薦引擎級別的用戶反饋。對不一樣用戶給出不一樣引擎組合權重。

4)推薦引擎架構

  • 推薦引擎架構主要包括三部分:
    • 圖中A部分負責從數據庫或緩存中拿到用戶行爲數據,經過分析不一樣行爲,生成當前用戶的特徵向量,若是使用非行爲特徵,就不須要行爲提取和分析模塊了,該模塊的輸出就是用戶特徵向量。
    • 圖中B部分負責將用戶的特徵向量經過特徵-物品相關矩陣轉化爲初始推薦物品列表。
    • 圖中C部分負責對初始的推薦列表進行過濾、排名等處理,從而生成該引擎的最終推薦結果。
 
推薦引擎架構圖
  • 生成用戶特性向量

    • 用戶行爲的種類
    • 用戶行爲產生的時間
    • 用戶行爲的次數
    • 物品的熱門程度
  • 過濾模塊過濾掉如下物品

    • 用戶已經產生過行爲的物品
    • 候選物品之外的物品(不符合用戶篩選條件的物品)
    • 某些質量不好的物品

以上,就是全部內容的總結。內容主要來自於《推薦系統實踐》,以及相關論文、博客。

《推薦系統實踐》中提到的papaer總結:
https://book.douban.com/review/5514664/
參考論文:
http://t.cn/RjXktmC
http://t.cn/RjXkiFP
http://blog.csdn.net/qingqingpiaoguo/article/details/60882309
https://www.zhihu.com/question/27141495/answer/161027882

最後,想成爲一名AI產品經理,求推薦~

 

做者:rui_liu連接:https://www.jianshu.com/p/319e4933c5ba來源:簡書簡書著做權歸做者全部,任何形式的轉載都請聯繫做者得到受權並註明出處。

相關文章
相關標籤/搜索