-- 原創,未經授權,禁止轉載 2017.11.15 --
推薦系統實踐
對于推薦系統,本文總結內容,如下圖所示:
推薦系統.png
文章很長,你可以跳著看你感興趣的部分。
一、什么是推薦系統
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;
即便坐擁海量信息,用戶卻無法找到真正對自己有用的,可見效率之低。
從前,人們是這樣解決信息超載問題的:
現實中,我有個東西想買(有明確目的)
小便利店 --> 憑經驗瀏覽所有貨架;
大型超市 --> 借助分類指示牌;
不知道買啥(沒有明確目的)
空間大,隨便逛
引申到互聯網,有明確目的時
電商網站 --> 搜索引擎,信息檢索;
沒有明確目的時
巴掌大的地兒,靠個性化推薦
信息超載,不是互聯網獨有的,在現實生活也會存在這樣的問題,畢竟人的大腦同時能夠處理的信息只有4-7個,我們面對的問題從來沒有變過,區別在于當下的情況,所處的環境。
正如《大數據時代》中作者所言,這僅僅是一個開始,人們與世界的交流方式,從原來對因果關系的渴求,轉變為現在對相關關系的發現和使用上。
2. 搜索引擎與推薦系統
眾所周知,解決信息過載問題,最有代表性的解決方案是【分類目錄】和【搜索引擎】,這兩種解決方案分別催生了互聯網領域的兩家著名公司--雅虎和谷歌。
搜索引擎
分類目錄,是將著名網站分門別類,從而方便用戶根據類別查找公司。
但隨著互聯網規模不斷擴大,分類目錄網站只能涵蓋少數熱門網站,已無法滿足用戶需求。因此,搜索引擎誕生了。
搜索引擎,用戶通過輸入關鍵字,查找自己需要的信息。
但是,用戶必須主動提供準確的關鍵詞,才能找到信息。所以用戶的其他需求,比如用戶無法找到準確描述自己需求的關鍵詞時,搜索引擎就無能為力了。
推薦系統,和搜索引擎一樣,是一種幫助用戶快速發展有用信息的工具。通過分析用戶的歷史行為,給用戶的興趣建模,從而主動給用戶推薦能夠滿足他們興趣和需求的信息。
并且,推薦系統能夠很好的發掘物品的長尾,挑戰傳統的2/8原則(80%的銷售額來自20%的熱門品牌)。
從技術角度來看,搜索引擎和推薦系統的區別在于:
1)搜索引擎,注重搜索結果之間的關系和排序;
2)推薦系統,需要研究用戶的興趣模型,利用社交網絡的信息進行個性化的計算;
3)搜索引擎,由用戶主導,需要輸入關鍵詞,自行選擇結果。如果結果不滿意,需要修改關鍵詞,再次搜索;
4)推薦系統,由系統主導,根據用戶的瀏覽順序,引導用戶發現自己感興趣的信息;
3. 推薦系統的定義
推薦系統通過發掘用戶的行為,找到用戶的個性化需求,從而將長尾物品準確推薦給需要它的用戶,幫助用戶找到他們感興趣但很難發現的物品。
高質量的推薦系統會使用戶對系統產生依賴,因此,推薦系統不僅能為用戶提供個性化服務,還能與用戶建立長期穩定的關系,提高用戶忠誠度,防止用戶流失。
二、推薦系統評測
如何判定什么是好的推薦系統?這是評測需要解決的首要問題。
一般推薦系統的參與方有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種:
用戶維度
主要包括用戶的人口統計學信息、活躍度以及是不是新用戶等;
物品維度
包括物品的屬性信息、流行度、平均分以及是不是新加入的物品等;
時間維度
包括季節,是工作日還是周末,白天還是晚上等;
如果推薦系統的評測報告中,包含了不同維度下的系統評測指標,就能幫我們全面了解系統性能。
三、推薦算法通用模型
1. 推薦算法通用模型
推薦系統有3個重要的模塊:
用戶建模模塊
推薦對象建模模塊
推薦算法模塊
通用的推薦系統模型流程如圖,技術一點的描述過程如下:
a)推薦系統通過用戶行為,建立用戶模型;
b)通過物品的信息,建立推薦對象模型;
c)通過用戶興趣匹配物品的特征信息,再經過推薦算法計算篩選,找到用戶可能感興趣的推薦對象,然后推薦給用戶。
用戶建模模塊
建立用戶模型之前,需要考慮下面幾個問題:
(1)模型的輸入數據有哪些,如何獲取模型的輸入數據。
(2)如何考慮用戶的興趣及需求的變化。
(3)建模的對象是誰。
(4)如何建模。
(5)模型的輸出是什么。
獲取用戶信息就是解決模型輸入數據的問題,輸入數據主要有以下幾種:
(1)用戶屬性:人口統計學信息;
(2)用戶手動輸入的信息:包括用戶在搜索引擎中輸入的關鍵詞,用戶反饋的信息,對推薦對象的喜好程度等;
(3)用戶的瀏覽行為和瀏覽內容:包括瀏覽次數、頻率、停留時間等,瀏覽頁面時的操作(收藏、保存、復制等)等。服務器端保存的日志也能較好地記錄用戶的瀏覽行為和內容。
(4)推薦對象的屬性特征:不同的推薦對象,用戶建模的輸入數據也不同。網頁等推薦對象通常考慮對象的內容和用戶之間的相似性,而產品等推薦對象通常考慮用戶對產品的評價。
為提高推薦質量,推薦對象的相關的屬性也要考慮進去,比如除網頁內容以外,還要考慮網頁的發布人、時間等。
產品類的對象還要考慮產品的品牌、價格、出售時間等。
獲取模型輸入數據的方式有顯式獲取、隱式獲取和啟發式獲取三種方式。
用戶模型的建模方法主要有遺傳算法、基于機器學習的 方法,例如 TF-IDF、自動聚類、貝葉斯分類器、決策樹歸納和神經網絡方法等。
推薦對象建模
考慮以下幾個問題:
(1)提取推薦對象的什么特征,如何提取,提取的特征用于什么目的。
(2)對象的特征描述和用戶文件描述之間有關聯。
(3)提取到的每個對象特征對推薦結果會有什么影響。
(4)對象的特征描述文件能否自動更新。
2. 算法模塊
目前主要的推薦算法,如下圖所示。
推薦算法是整個推薦系統中最核心的部分,在很大程度上決定了推薦系統類型和性能的優劣。
四、推薦算法詳述
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個關鍵指標~
1、支持度 (Support):支持度是兩件商品(A∩B)在總銷售筆數(N)中出現的概率,即A與B同時被購買的概率。類似于中學學的交集,需要原始同時滿足條件。
公式:
例子說明:
比如某超市2016年有100w筆銷售,顧客購買可樂又購買薯片有20w筆,顧客購買可樂又購買面包有10w筆,那可樂和薯片的關聯規則的支持度是20%,可樂和面包的支持度是10%。
2、置信度 (Confidence):置信度是購買A后再購買B的條件概率。簡單來說就是交集部分C在A中比例,如果比例大說明購買A的客戶很大期望會購買B商品。
公式:
例子說明:
某超市2016年可樂購買次數40w筆,購買可樂又購買了薯片是30w筆,顧客購買可樂又購買面包有10w筆,則購買可樂又會購買薯片的置信度是75%,購買可樂又購買面包的置信度是25%,這說明買可樂也會買薯片的關聯性比面包強,營銷上可以做一些組合策略銷售。
3、提升度 (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)混合推薦
每個算法都不是完美的,因此實際應用中,可以混合使用各種推薦算法,各取所長。
五、推薦算法數據來源
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的允許;
基于社區的社交網絡數據,用戶之間并沒有明確的關系,但是這種數據包含了用戶屬于不同社區的數據。比如豆瓣小組,屬于同一個小組可能代表了用戶興趣的相似性;
社會化推薦的優點
好友推薦可以增加推薦的信任度
社交網絡可以解決冷啟動問題
六、冷啟動問題
1)冷啟動主要分3類:
用戶冷啟動
一個新用戶,沒有任何歷史行為數據,怎么做推薦。
物品冷啟動
一個新上線的物品,沒有用戶對它產生過行為,怎么推薦給感興趣的用戶。
系統冷啟動
一個新開發的網站,沒有用戶數據,怎么做個性化推薦。
2)解決方案:
提供非個性化推薦,如熱門排行。等有了數據之后再推薦。
利用用戶注冊信息,做粗粒度的個性化。
利用用戶的社交網絡賬號,導入用戶的好友,推薦好友喜歡的物品。
用戶初次登錄時,對一些物品進行反饋,根據這些信息做個性化。
對于新上線的物品,利用內容信息,推薦給喜歡類似物品的用戶。
系統冷啟動,可以引入外部資源,如專家知識,建立起物品的相關度。
3)冷啟動,啟動用戶興趣的物品需要具有以下特點:
比較熱門
具有代表性和區分性
啟動物品集合需要有多樣性
4)選擇啟動物品集合的系統
如何設計一個選擇啟動物品集合的系統?Nadav Golbandi在論文中提出用一個決策樹解決。
首先,給定一群用戶,用這群用戶對物品評分的方差度量這群用戶興趣的一致程度。如果方差很小,說明這一群用戶的興趣不太一致,也就是物品具有比較大的區分度,反之則說明這群用戶的興趣比較一致。
再根據用戶的評分方差計算物品的區分度。
也就是說,對于物品i,將用戶分為3類--喜歡物品i的用戶,不喜歡物品i的用戶和不知道物品i的用戶。如果這3類用戶集合內的用戶對其他的物品興趣很不一致,說明物品i具有較高的區分度。
算法首先從所有用戶中找到具有最高區分度的物品i,然后將用戶分成3類。然后在每類用戶中再找到最具區分度的物品,然后將每一類用戶又各自分為3類,也就是將總用戶分為9類,然后繼續這樣下去,最終可以通過對一系列物品的看法將用戶進行分類。
在冷啟動時,從根節點開始詢問用戶對該節點物品的看法,然后根據用戶的選擇將用戶放到不同的分枝,直到進入最后的葉子節點,此時對用戶的興趣有了比較清楚的了解,從而可以開始對用戶進行比較準確地個性化推薦。
5)利用物品的內容信息
就是基于內容的推薦,很適合解決物品冷啟動問題。
物品冷啟動對諸如新聞網站等時效性很強的網站的推薦非常重要,因為那些網站中時時刻刻都有新加入的物品,而且每個物品必須能夠在第一時間展現給用戶,否則經過一段時間后,物品的價值就大大降低了。
一般來說,物品的內容可以通過向量空間模型表示,該模型會將物品表示成一個關鍵詞向量。
如果物品的內容是諸如導演、演員等實體,可以直接將實體作為關鍵詞。
如果內容是文本,需要引入自然語言的技術抽取關鍵詞。如何建立文章、話題和關鍵詞的關系是話題模型研究的重點,代表性的話題模型有LDA。
LDA有3種元素,文檔、話題、詞語。詳細內容可參考相關論文。
向量空間模型的優點是簡單,缺點是丟失了一些信息,比如關鍵詞之間的關系信息。
七、推薦系統實例
推薦系統和其他系統之間的關系
3種聯系用戶和物品的推薦系統
3)推薦系統架構
推薦系統需要由多個推薦引擎組成,每個推薦引擎負責一類特性和一種任務,推薦系統的任務是將推薦引擎的結果按照一定權重或者優先級合并,排序然后返回。如下圖:
推薦系統架構圖
優點:
方便增加或刪除引擎,控制不同引擎對推薦結果的影響。
可以實現推薦引擎級別的用戶反饋。對不同用戶給出不同引擎組合權重。
4)推薦引擎架構
推薦引擎架構主要包括三部分:
圖中A部分負責從數據庫或緩存中拿到用戶行為數據,通過分析不同行為,生成當前用戶的特征向量,如果使用非行為特征,就不需要行為提取和分析模塊了,該模塊的輸出就是用戶特征向量。
圖中B部分負責將用戶的特征向量通過特征-物品相關矩陣轉化為初始推薦物品列表。
圖中C部分負責對初始的推薦列表進行過濾、排名等處理,從而生成該引擎的最終推薦結果。
推薦引擎架構圖
生成用戶特性向量
用戶行為的種類
用戶行為產生的時間
用戶行為的次數
物品的熱門程度
過濾模塊過濾掉以下物品
用戶已經產生過行為的物品
候選物品以外的物品(不符合用戶篩選條件的物品)
某些質量很差的物品
以上,就是所有內容的總結。內容主要來自于《推薦系統實踐》,以及相關論文、博客。
《推薦系統實踐》中提到的papaer總結:
https://book.douban.com/review/5514664/
參考論文:
http://blog.csdn.net/qingqingpiaoguo/article/details/60882309
https://www.zhihu.com/question/27141495/answer/161027882
最后,想成為一名AI產品經理,求推薦~
-- 原創,未經授權,禁止轉載 2017.11.15 --
作者:rui_liu
鏈接:http://www.lxweimin.com/p/319e4933c5ba
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。