沒有真正的做過推薦系統,大部分的知識都是學習過、瞭解過,所以一些內容認識的比較淺顯,很多演算法在我看來,都比較高深。下面我就把自己有限的知識分享一下:

  • 在N多年前,用戶進入一個購物網站的時候,看到的商品都是一樣的,而現在每個用戶進入首頁的時候,看見的商品列表可能是不相同的;

  • 在N多年前,用戶進入一個新聞網站的首頁,看到的新聞都是一樣的,而現在,每個用戶進入今日頭條的時候,看到的新聞(文章)是不相同的;這些都要歸功於推薦系統。

推薦系的分類

  • 熱門推薦:相當於一個排行榜功能,銷售排行、好評排行、閱讀排行等等;

  • 相關推薦:用戶買了一個商品,系統會告訴你類似的商品;用戶閱讀了一條新聞,這時候系統提示與此相關的內容。

  • 個性化推薦:根據用戶的歷史行為,推薦給用戶想要的內容;和相關推薦不同,相關推薦的前提是,要現有一個內容。前兩種推薦都比較容易實現,這裡主要說一說個性化推薦(直說整體的架構,至於一些細節,比如推薦演算法,我也涼涼)。

個性化推薦系統的組成

  • 日誌系統:不要想像成應用日誌、Log,這裡的日誌系統可以看做對用戶信息和用戶行為的蒐集,這是個性化推薦系統的基礎數據。

  • 推薦演算法:個性化推薦演算法的核心,根據數據,分析得到推薦的結果。

  • 推送服務:得到推薦的結果之後,作用於用戶;如在什麼場景、時機下推薦。

推薦演算法的基本流程

  • A:從資料庫中拿到用戶行為和屬性等數據,通過分析不同行為,生成當前用戶的特徵向量;比如用戶特徵屬性(如性別)、用戶關係屬性(如好友關係)、用戶偏好屬性(如喜歡看足球);每個行業關注的用戶特徵是不相同的;
  • B:不同的物品,也有不同的特徵屬性,比如對於視頻來說,包含地區、導演、演員、類型等;這個模塊要做的事情就是連接用戶和內容;比如用戶喜歡某些特徵的內容;利用用戶喜歡的內容,尋找與這些內容相似的內容;根據用戶特徵尋找相似的用戶,然後看這些用戶喜歡的內容等等;
  • C:對初始的推薦列表進行過濾,排名等處理,生成最終的推薦結果。

  • 舉個比較好理解的例子,你平時使用今日頭條,看了那些文章、每篇的停留時間、閱讀進度、是否回復和點贊,然後推斷出你的閱讀偏好,進而給你推薦你感興趣的新聞(當然頭條的演算法應該更複雜)。

  • 再舉個比較出名的例子,就是【啤酒與尿布】的案例,大概意思是年輕的父親去超市買尿布,父親在購買尿布的同時,往往會順便為自己購買啤酒,所以超市嘗試將啤酒與尿布擺放在相同區域,結果提升商品銷售收入;推薦演算法也會挖掘出來事物之間隱藏的關係。

我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。


可以用Mahout來實現推薦。

Mathout是Apache的一個開源項目,提供了一些可擴展的機器學習經典演算法的實現。

只需要使用Maven引入依賴就可以直接使用推薦演算法。

這裡是使用實例代碼地址:

https://github.com/qq1311256696/Spring-Boot-in-Action/tree/master/mahout

用到的數據下載鏈接:

MovieLens 10M Dataset

運行的其中一個截圖:


對於信息的獲取有兩種方式:主動搜索,被動推薦。

主動搜索:我們有明確目的性而去搜索信息。系統會把信息的尋求轉換為精確的關鍵字,然後交給搜索引擎,最後返回給用戶一系列列表。

而當人們漫無目的的尋找信息時,推薦引擎就應運而生。

推薦系統:根據用戶的歷史行為或者用戶的興趣偏好來送給推薦演算法,然後推薦系統運用大數據的演算法來產生用戶可能感興趣的項目列表,同時用戶對於搜索引擎是被動的。這樣公司可以挖掘潛在信息的利潤。

所以做推薦系統,首先要收集信息,搭建數據地圖,然後搭建用戶模型,通過大數據演算法來形成個性化推薦。

具體的基礎搭建可參考一下圖片(張小磊分享的)

而互聯網公司就可以根據用戶的興趣特點和購買行為,向用戶推薦用戶感興趣的信息和商品,從而獲得更高的收益。


根據系統採集用戶的行為數據,通過大數據的綜合分析,前提是提前根據用戶行為繪畫不同的用戶畫像,再根據數據行為特性進行綜合匹配,形成推薦


推薦閱讀:
相關文章