1. 程式人生 > >推薦系統 --- 實時推薦系統

推薦系統 --- 實時推薦系統

推薦系統介紹

自從1992年施樂的科學家為了解決資訊負載的問題,第一次提出協同過濾演算法,個性化推薦已經經過了二十幾年的發展。1998年,林登和他的同事申請了“item-to-item”協同過濾技術的專利,經過多年的實踐,亞馬遜宣稱銷售的推薦佔比可以佔到整個銷售GMV(Gross Merchandise Volume,即年度成交總額)的30%以上。隨後Netflix舉辦的推薦演算法優化競賽,吸引了數萬個團隊參與角逐,期間有上百種的演算法進行融合嘗試,加快了推薦系統的發展,其中SVD(Sigular Value Decomposition,即奇異值分解,一種正交矩陣分解法)和Gavin Potter跨界的引入心理學的方法進行建模,在諸多演算法中脫穎而出。其中,矩陣分解的核心是將一個非常稀疏的使用者評分矩陣R分解為兩個矩陣:User特性的矩陣P和Item特性的矩陣Q,用P和Q相乘的結果R'來擬合原來的評分矩陣R,使得矩陣R'在R的非零元素那些位置上的值儘量接近R中的元素,通過定義R和R'之間的距離,把矩陣分解轉化成梯度下降等求解的區域性最優解問題。Netflix最新的實時推薦系統如圖9-5所示。


與此同時,Pandora、LinkedIn、Hulu、Last.fm等一些網站在個性化推薦領域都展開了不同程度的嘗試,使得推薦系統在垂直領域有了不少突破性進展,但是在全品類的電商、綜合的廣告營銷上,進展還是緩慢,仍然有很多的工作需要探索。特別是在全品類的電商中,單個模型在母嬰品類的效果還比較好,但在其他品類就可能很差,很多時候需要根據品類、推薦欄位、場景等不同,設計不同的模型。同時由於使用者、SKU不停地增加,需要定期對資料進行重新分析,對模型進行更新,但是定期對模型進行更新,無法保證推薦的實時性,一段時間後,由於模型訓練也要相當時間,可能傳統的批處理的Hadoop的方法,無法再縮短更新頻率,最終推薦效果會因為實時性問題達到一個瓶頸。

推薦演算法主要有基於人口統計學的推薦、基於內容的推薦、基於協同過濾的推薦等,而協同過濾演算法又有基於鄰域的方法(又稱基於記憶的方法)、隱語義模型、基於圖的隨機遊走演算法等。基於內容的推薦解決了商品的冷啟動問題,但是解決不了使用者的冷啟動問題,並且存在過擬合問題(往往在訓練集上有比較好的表現,但在實際預測中效果大打折扣),對領域知識要求也比較高,通用性和移植性比較差,換一個產品形態,往往需要重新構建一套,對於多媒體檔案資訊特徵提取難度又比較大,往往只能通過人工標準資訊。基於鄰域的協同過濾演算法,雖然也有冷啟動問題和資料稀疏性等問題,但是沒有領域知識要求,演算法通用性好,增加推薦的新穎性,並且對行為豐富的商品,推薦準確度較高。基於模型的協同過濾演算法在一定程度上解決了基於鄰域的推薦演算法面臨的一些問題,在RMSE(Root Mean Squared Error,即均方根誤差)等推薦評價指標上更優,但是通常演算法複雜,計算開銷大,所以目前基於鄰域的協同過濾演算法仍然是最為流行的推薦演算法。

基於鄰域的協同過濾主要分為User CF和Item CF,根據以下條件不同,各自又有不同的使用場景。

計算量大小不同。基於鄰域的協同過濾的時間複雜度為


, 其中n為使用者數,m為產品數,應用SVD等降維方法可以降低演算法複雜度,但是分解矩陣又會花費一定的時間。

資料稀疏性傾斜度不同。例如,User CF主要基於使用者對共同專案的評分,如果使用者遠遠多於物品,沒有足夠評分將導致兩個使用者很少有共同評分的專案,找最近鄰使用者非常的不準確,雖然通過基於BP神經網路、樸素貝葉斯分類、基於內容的預測等方法可以填充矩陣,但是都會不同程度地帶來的計算時間。

對於使用者數量遠遠大於產品,並且產品相對穩定的電商系統,計算產品相似度計算量小,適用Item CF,否則使用者量大,並且如果使用者購買頻繁,計算使用者相似度計算量很大,極端情況下,100個使用者對應2個產品,一個要計算C1002次相似度,一個只要計算C22,即一次相似度;反之,對於更新頻繁,物品數量海量的新聞、部落格、微博等系統,User CF效果更好。

當然,雖然SVD在分解矩陣上花費了一定時間,同時降維也會導致使用者-專案矩陣中的資訊丟失,但是使用者-專案矩陣降維後, 運算複雜度大大降低,同時矩陣稀疏性問題得到了較好地解決,作為Netflix比賽中最終提升效果較好的兩個方法之一,被眾多網站採用。使用者-專案矩陣中的資訊丟失問題可以通過選取合適的保留維數k在一定程度上得到緩解。

在一個電商系統中,有商品、類目、品牌、團購、閃購、搜尋、店鋪、廣告、促銷活動、抵用券等諸多實體;有首頁的大輪播、猜你喜歡欄位,詳情頁的看了還看、看了還買、推薦品牌等欄位,購物車頁面的買了還買、湊單免郵等欄位。如何在不同的欄位融入不同的推薦演算法給使用者推薦相應的實體,構建出屬於電商自己的場景引擎,實現全站精準化,讓網站的GMV或者利潤達到最高,是每一個電商需要思考的問題。在實際中,很多推薦演算法不一定要求實時,實時推薦在哪些場景下能帶給欄位更高的GMV轉化率,也是需要一定時間摸索和試錯的。

目前基於使用者畫像的推薦,主要用在基於內容的推薦,從最近的RecSys大會(ACM Recommender Systems)上來看,不少公司和研究者也在嘗試基於使用者畫像做Context-Aware的推薦(情境感知,又稱上下文感知)。利用使用者的畫像,結合時間、天氣等上下文資訊,給使用者做一些更加精準化的推薦是一個不錯的方向。

9.2.2 實時推薦系統的方法

目前的商用推薦系統,當用戶數和商品數達到一定數目時,推薦演算法都面臨嚴重的可擴充套件性問題,推薦的實效性變得非常差,如何在演算法和架構上提高推薦速度是很多公司不得不思考的問題。目前,在演算法上主要通過引入聚類技術和改進實時協同過濾演算法提高推薦速度;在架構上,目前實時推薦主要有基於Spark、Kiji框架和Storm的流式計算3種方法。

1.聚類技術和實時協同過濾演算法

在演算法上,一般採用EM(Expectation-Maximization)、K-means、吉布斯(Gibbs Sampling)、模糊聚類等聚類技術提高推薦速度。因為使用聚類技術可以大大縮小使用者或專案的最近鄰居搜尋範圍,從而提高推薦的實時性,如表9-1所示。


除此之外,實時協同過濾演算法本身一直是人們研究的熱點,早在2003年,Edward F. Harrington就第一次提出了基於感知器的實時協同過濾演算法,但是這種方法需要所有使用者的偏好,實用性較差;2010年,楊強等提出了實時進化的協同過濾演算法,給予新得分更高的權重來增量更新User和Item的相似度;2011年,UC Berkeley的Jacob Abernethy等人提出了OCF-SGD演算法,我們知道傳統的矩陣分解把使用者評分矩陣R分解成多個矩陣,比如R≈P*Q,該方法提出當新來一個User到Item的得分,把更新R矩陣的問題轉換成更新P和Q矩陣,從而達到實時協同過濾;近幾年的RecSys大會上,實時協同過濾也是討論的熱點,OCF-SGD演算法每次只考慮一個使用者,忽略了使用者之間的關係,Jialei Wang等人提出了基於多工學習的實時協同過濾演算法,把每一個使用者當做一個任務,定義一個表示各個任務間相似性和互動程度的矩陣A,當新來一個User到Item的得分,通過矩陣A來更新其他使用者的得分。

2.基於Spark的方式

在架構上,第一種是使用Spark把模型計算放在記憶體中,加快模型計算速度,Hadoop中作業的中間輸出結果是放到硬碟的HDFS中,而Spark是直接儲存在記憶體中,因此Spark能更好地適用於資料探勘與機器學習等需要迭代的模型計算,如表9-2所示。


3.基於Kiji框架的方式

第二種是使用Kiji,它是一個用來構建大資料應用和實時推薦系統的開源框架,本質上是對HBase上層的一個封裝,用Avro來承載物件化的資料,使得使用者能更容易地用HBase管理結構化的資料,使得使用者姓名、地址等基礎資訊和點選、購買等動態資訊都能儲存到一行,在傳統資料庫中,往往需要建立多張表,在計算的時候要關聯多張表,影響實時性。Kiji與HBase的對映關係如表9-3所示。


Kiji提供了一個KijiScoring模組,它可以定義資料的過期策略,如綜合產品點選次數和上次的點選時間,設定資料的過期策略把資料重新整理到KijiScoring伺服器中,並且根據自己定義的規則,決定是否需要重新計算得分。如使用者有上千萬瀏覽記錄,一次的行為不會影響多少總體得分,不需要重新計算,但如果使用者僅有幾次瀏覽記錄,一次的行為,可能就要重新訓練模型。Kiji也提供了一個Kiji模型庫,使得改進的模型部署到生產環境時不用停掉應用程式,讓開發者可以輕鬆更新其底層的模型。

4.基於Storm的方式

最後一種基於 Storm 的實時推薦系統。在實時推薦上,演算法本身不能設計的太複雜,並且很多網站的資料庫是TB、PB級別,實時讀寫大表比較耗時。可以把演算法分成離線部分和實時部分,利用Hadoop離線任務儘量把查詢資料庫比較多的、可以預先計算的模型先訓練好,或者把計算的中間資料先計算好,比如,線性分類器的引數、聚類演算法的群集位置或者協同過濾中條目的相似性矩陣,然後把少量更新的計算留給Storm實時計算,一般是具體的評分階段。

基於Storm的實時推薦系統

基於本章前面的學習,我們可以設計圖9-6所示的實時推薦系統。


圖9-6 實時推薦系統(圖片來源PRANAB GHOSH,Big Data Cloud meetup。版權歸原書作者所有)

用HBase或HDFS儲存歷史的瀏覽、購買行為資訊,用Hadoop基於User CF的協同過濾,先把使用者的相似度離線生成好,使用者到商品的矩陣往往比較大,運算比較耗時,把耗時的執行先離線計算好,實時呼叫離線的結果進行輕量級的計算有助於提高產品的實時性。

我們來簡單回顧一下協同過濾演算法(如圖9-7所示):首先程式獲取使用者和產品的歷史偏好,得到使用者到產品的偏好矩陣,利用Jaccard相似係數(Jaccard coefficient)、向量空間餘弦相似度(Cosine similarity)、皮爾遜相關係數(Pearson correlation coefficient)等相似度計算方法,得到相鄰的使用者(User CF)或相似商品(Item CF)。在User CF中,基於使用者歷史偏好的相似度得到鄰居使用者,將鄰居使用者偏好的產品推薦給該使用者;在Item CF中,基於使用者對物品的偏好向量得到相似產品,然後把這款產品推薦給喜歡相似產品的其他使用者。


圖9-7 協同過濾演算法過程

然後通過Kafka或者Redis佇列,儲存前端的最新瀏覽等事件流,在Storm的Topology中實時讀取裡面的資訊,同時獲取快取中使用者topN個鄰居使用者,把鄰居使用者喜歡的商品存到快取中,前端從快取中取出商品,根據一定的策略,組裝成推薦商品列表。

當然除了相似性矩陣,其他模型大體實現也相似,比如實際的全品類電商中不同的品類和欄位,往往要求不同的推薦演算法,如母嬰產品,如圖9-8所示,如果結合商品之間的序列模式和母嬰年齡段的序列模式,效果會比較好,可以把模型通過Hadoop預先生成好,然後通過Storm實時計算來預測使用者會買哪些產品。



文/出版圈郭志敏(簡書作者)
原文連結:http://www.jianshu.com/p/356656ce2901
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。

相關推薦

推薦系統 --- 實時推薦系統

推薦系統介紹 自從1992年施樂的科學家為了解決資訊負載的問題,第一次提出協同過濾演算法,個性化推薦已經經過了二十幾年的發展。1998年,林登和他的同事申請了“item-to-item”協同過濾技術的專利,經過多年的實踐,亞馬遜宣稱銷售的推薦佔比可以佔到整個銷售GMV(Gr

大數據-實時推薦系統最主流推薦系統itemCF和userCF

我們 ase 混合推薦 相似度 .net div == 其他 moto 推薦系統的分類: 基於應用領域分類:電子商務推薦,社交好友推薦,搜索引擎推薦,信息內容推薦基於設計思想:基於協同過濾的推薦,基於內容的推薦,基於知識的推薦,混合推薦基於使用何種數據:基於用戶行為數據的推

大資料推薦系統實時架構和離線架構

生活中無論有什麼閃失,統統是自己的錯,與人無尤,從錯處學習改過,精益求精,直至不犯同一錯誤,從不把過失推諉到他人肩膀上去,免得失去學乖的機會。——《阿修羅》 1、概述         推薦系統是大資料中最常見和最容易理解的應用之一,比如說淘寶的

Flink + 強化學習 搭建實時推薦系統

如今的推薦系統,對於實時性的要求越來越高,實時推薦的流程大致可以概括為這樣: 推薦系統對於使用者的請求產生推薦,使用者對推薦結果作出反饋 (購買/點選/離開等等),推薦系統再根據使用者反饋作出新的推薦。這個過程中有兩個值得關注的地方: + 這可被視為是一個推薦系統和使用者不斷互動、互相影響的過程。 + 推

【好文推薦】公司管理系統含義、類型、功能及價格的詳細分析!

管理系統 企業在公司管理系統選型時,都想選性價比高、物有所值的。但市場上公司管理系統品牌眾多,價格各不相同,所以選型時,企業常被這些問題困擾:常用的公司管理系統有哪些?好用的公司管理系統價格多少合適?公司管理系統排行?……每個企業都迫切想知道答案。本文集中整理和逐一解答了大家最關註的一些問題,希望能給各

推薦系統-02-推薦技術

出現 育兒 歷史 ID 混合 用戶需求 目標 相同 需要 前題 要做推薦系統的前題,就是要信息出現過載, 即如何從成千上萬的物品中,選出最合適的物品供用戶參考。 如果可供選擇的基數僅有幾個, 就不需要推薦系統了, 直接把所有選項提供給用戶就行了。 推薦技術 基於內容推薦 基

系統架構推薦專題文章及書籍-會持續更新

1. 在伯樂線上部落格裡看完了《關於大型網站技術演講的思考》系列文章,深有體會,總共20篇文章,由淺入深寫的非常細緻,又通俗易懂,特推薦給大家。 2. 看了一本‘構建高效能WEB站點(完整版)’ ,整本書通俗易懂,章節清晰,講述了構建高效能WEB站點的核心知識點,在網上大家應該也可以搜

推薦系統及廣告系統相關演算法綜述

文章目錄 線上學習 ftrl CTR預測演算法 ftrl References embedding 目前,推薦系統領域主流的演算法主要包括: ftrl, 2013年, Google公司, 《Ad c

Linux 的虛擬檔案系統(強烈推薦)

1 引言 Linux 中允許眾多不同的檔案系統共存,如 ext2, ext3, vfat 等。通過使用同一套檔案 I/O 系統 呼叫即可對 Linux 中的任意檔案進行操作而無需考慮其所在的具體檔案系

推薦系統_推薦系統的常用評測指標

為了評估推薦演算法的好壞需要各方面的評估指標。         對使用者u推薦N個物品(記為R(u)),令使用者u在測試集上喜歡的物品集合為T(u) 準確率 準確率就是最終的推薦列表中有多少是推薦對了的。描述最終的推薦列表中有多少比例是發生過的使用者-物品評分記錄

推薦系統--相似性推薦

相似性推薦 沒有歷史資料的支援,對於新使用者A,沒有他的歷史行為資料,在他點選了item-X的場景下,可以將與item-x最相似的item集合推薦給新使用者A 問題轉化為,如何用一種通用的方法,表達item之間的相似性 仍以電影推薦為例,新使用者A進入

推薦系統推薦系統常用資料集

最近在做融合評論資訊的推薦系統,找到了許多資料集,就在這裡總結一下吧。 Retailrocket 商品評論和推薦資料 The dataset consists of three files: a f

基於內容的推薦演算法(推薦系統)(二)

距離上次更新已經不知道有多久了,因為過幾日就是中期答辯了,為了不太監開始堅持把這個專案往後做一做。 這次我們要做的是什麼呢,要先搭建整個開發環境,目前用到的如下:mysql,idea,IKAnalyzer2012_u6(一個開源的分詞包,完全夠用了) 這次我計劃先完成最簡單

基於內容的推薦演算法(推薦系統)(三)

因為要報賬,趕著做出來一個用來展示的網站,用來申請軟體著作權然後拿到發票趕緊報銷去。所以用了幾個小時的時間弄出來一個醜不拉幾的網站,還好之前web作業做過一部分。現在的話是這樣弄得: 整體架構如下用了IDEA開發,基於Java EE,tomcat和MySQL(

【強烈推薦】:關於系統學習資料探勘(Data Mining)的一些建議!!

微信公眾號 關鍵字全網搜尋最新排名 【機器學習演算法】:排名第一 【機器學習】:排名第一 【Python】:排名第三 【演算法】:排名第四 關於資料探勘 提到收據挖掘(Data Mining, DM),很多想學習的同學大多數都會問我: 什麼是資料探勘? 怎麼培養資料分析的能力? 如何成為一名資料科學家? (

用MovieLens資料集做推薦(Python推薦系統二)

              思路:下載MovieLens的資料集,對資料集進行函式定義,定義各資料列的名稱,根據上一篇Python寫出簡單的推薦系統(一) 文中的recommendations.py 的使用者相似度進行推薦。               下載MovieLe

資料科學個人筆記:推薦系統推薦演算法(基於內容+標籤+半監督學習模型)

一、基於內容的模型 (一)推薦系統冷啟動問題 使用者冷啟動:給新使用者推薦 物品冷啟動:新物品被推薦 系統冷啟動:為新開發的網站(還沒有使用者和使用者行為,只有一些物品資訊)設計推薦系統 冷啟動問題的一些解決方案:1.推薦熱門;2.用註冊資訊進行粗粒度的個性化;3.

圖書推薦系統推薦演算法測試

測試目的 1.我們想要確認現在使用的推薦演算法到底效果如何,能否達到使用者的期望 2.由於推薦系統中廣泛使用的有三種主要的距離計算方法,分別是pearson相似度,歐氏距離和角距離,這三種演算法在推薦系統中都具有良好的使用性,為了測試哪種距離計算方法是最適合這個圖書推薦系統

資料科學個人筆記:推薦系統推薦演算法(基於圖+隱語義)

一、隱語義模型(LFM演算法) (一)基礎演算法 隱語義分析採取基於使用者行為統計的自動聚類,計算出使用者和隱類的關係和物品和隱類的關係。 此處使用LFM演算法,通過如下公式計算使用者u對物品i的興趣: Preference(u,i)=r(ui)=sum(p(u,k)

開發基於約束條件的推薦系統---《推薦系統技術、評估及高效演算法》---讀書筆記(6)

一、目錄組織圖(單擊可放大)二、補充筆記1、基於約束的推薦系統是在資訊不完全的情況下,導致基於內容和協同過濾的方法可能失效情況下的一種推薦系統設計方法。它建立在使用者的需求和願望能夠明確表述的情況下。我認為這個實際上可以看成一個多型別關鍵字搜尋的過程(比如在X東購買膝上型電腦