在線購買率轉化高達60%,Amazon推薦系統是如何作到的?

本文由 「AI前線」原創,原文連接: 在線購買率轉化高達60%,Amazon推薦系統是如何作到的?
做者 | 袁源
編輯 | Vincent

AI 前線導讀:根據美國財富雜誌的報道, Amazon 的銷售額高速增加,得益於它將系統整合進用戶購買, 從產品發現到付款的整個流程。根據華爾街分析師的估計, Amazon 的在線推薦系統的購買轉化率高達 60%。 那麼 Amazon 推薦系統的成功祕訣在哪兒呢,讓咱們爲您揭開其神祕面紗。程序員


聲明 | 本文整理自 AI 前線 2018 年 3 月 1 日直播分享,未經許可不得轉載!算法

你們好!很高興今天有機會跟你們一塊兒分享個性化的智能推薦系統。數據庫

我先自我介紹一下,我叫袁源,2011 年得到博士學位,曾經在亞馬遜工做有兩年半的時間。在這些工做中,我有一些經驗能夠給你們分享,因此趁今天這個機會跟你們聊一聊。網絡

時間有限,我可能會講的比較抽象,若是你們但願瞭解具體的內容,能夠掃咱們的二維碼,來咱們貪心科技的網絡課程,在裏面我會把今天講的每個算法用最詳細的語言和最清晰的、最有條理的方式給你們講解,而且每一種算法我都會用 Python 寫好代碼分享給你們,因此說你們不但可以從理論上學到一個算法、可以理解它,而且可以看到這個算法怎麼實現的。我在實現算法的時候,會盡可能不用任何第三方的庫,我儘可能不用那些已經打包好的,可能不少現成的人工智能的庫是 C++ 寫的,而且爲了效率可能用上了 GPU。我會用最純粹的 Python 寫,這樣的話,你們就能夠看到很詳細的每個步驟是怎麼實現的。架構

若是你們有興趣,知道詳細內容的能夠繼續掃咱們二維碼,到咱們貪心科技的網站上了解更多細節。分佈式

weixin.qq.com/r/eCqPl5XE6… (二維碼自動識別)ide

今天和我一塊兒和你們分享的還有咱們的 CEO,李文哲,文哲如今你能夠給你們打個招呼嗎?oop

李文哲:你們好,我叫李文哲,我目前是貪心科技的 CEO 也是創始人。我以前也是在美國讀人工智能博士的,我以前是在 USC。在國內多家企業也作過首席科學家,因此我對整個的 AI 領域仍是比較熟悉的。學習

我建立這樣的一家公司是但願把這種 AI 的技術還有 AI 的知識普及起來,讓國內的不少人能夠去學習,而後在實戰中可以用起來,今天咱們也很高興邀請到了 Jerry 老師來分享推薦系統這樣的一個課題,但願你們在今天的課程當中學到一些知識。若是有任何問題,咱們能夠一塊兒討論,也能夠給我提問,到課程結束以後,咱們一塊兒在論壇裏面再互動一下。接下來咱們就把時間給 Jerry 老師。測試

袁源:那咱們如今正式開始咱們今天的分享。

我今天的主要內容以下:

首先我給你們介紹一下推薦系統的概述,它表明什麼,有哪些具體的推薦系統實現咱們能夠借鑑;

第二是我給你們推薦一下經常使用的推薦算法,若是你本身正要作一個系統的話,你能夠從這些最經常使用的算法開始嘗試;

而後我想強調一下你們可能不過重視的一點,就是如何評價一個推薦系統?只有你創建一個比較好的評價標準,你纔有辦法不斷的改進你的算法,讓你的系統運行的愈來愈好;

最後,我會介紹一下如今已經存在的一些推薦系統它們通常會怎麼來架構的,以及如何從軟件系統上來描述它。


推薦系統概述

首先什麼是推薦系統?

咱們要先定義一下,咱們今天到底講什麼。

推薦系統其實就是一種信息處理的系統,用來預測一個用戶對某個東西是否是很喜歡,若是喜歡的話,喜歡的程度是什麼樣的,是很是喜歡,仍是通常般喜歡,仍是一點都不喜歡。推薦系統用的領域確定不少,我舉一些例子:如今的今日頭條給用戶推薦個性化的新聞;優酷土豆 YouTube 給用戶推薦視頻;蝦米音樂給用戶推薦喜歡的音樂,固然還有淘寶、京東商城推薦圖書、食品、衣服還有其餘各類商品。除此以外在社交網絡裏面 Twitter、Facebook,還有像新浪微博,都會給用戶推薦朋友。

固然,推薦的方式也是用推薦系統來實現的。如今金融很火,若是你在作金融類的產品,確定但願作 P2P 金融給你的客戶推薦股票、基金理財、基金證券和理財產品。固然單身狗們不要忘了在婚戀市場裏面的各類相親網站裏面,也會給單身的朋友推薦合適的另外一半,一樣是用的推薦系統。

因此說咱們能夠看到推薦系統如今已經成爲不少網站、手機 APP 不可獲缺的一部分。這些 APP 和網站依靠推薦系統來提升銷量,吸引用戶注意力,提升用戶活躍度和吸引新的用戶。

由於我曾經在亞馬遜工做,咱們來看一個具體的一個公司它是怎麼使用推薦系統的。

我如今顯示的是 Google felines 里亞馬遜的股價,能夠看到,它最近簡直像發射火箭同樣,股價一直上漲的很是厲害。從 2015 年大概 300 美圓一股,如今漲到了 1500 美圓一股。

那它這麼成功它靠的是什麼?咱們看看美國著名的《財富》雜誌是怎麼價值它的:它說亞馬遜的成功取決於它把它的推薦系統放到了從產品發現,到產品購買的整個過程。

財富雜誌還提到說,亞馬遜的推薦系統在進行推薦之後,用戶購買率、轉化率會達到 60% 的程度。

那咱們來具體看一下亞馬遜都使用了哪些推薦呢?

若是你登陸到亞馬遜網站上,第一個你會看到,它會按照不一樣的產品類別進行推薦,好比說左上角,它推薦給當前登陸的 taomas 這個用戶,給他推薦健身器材,左下角又推薦咖啡和茶,還有其餘的圖書,這是第一個:按照類別給每一個人推薦。

第二個是常常購買的商品。

假設一個用戶如今購買了左邊的這一個訓練機構的這個健身棒,它就會推薦你買右邊的這個橘黃色的這個健身的按摩球,爲何呢?這兩個東西根據它們的歷史顯示常常被人一塊兒購買,這也是個經典的案例,你們可能會知道 MBA 裏面的一個經典案例:研究人員發現,超市應該把嬰兒尿布和啤酒放在相鄰處,由於不少父親去買嬰兒尿布,同時看到旁邊有啤酒,就會一塊兒購買,這也是採用樣的策略。

第三,亞馬遜推薦的方式是按照你最近的歷史推薦。

你最近看了什麼?我最近看了健身用的健身棒,因此推薦的一堆用來健身相關的物品。

第四是什麼?不是推薦你曾經沒看過的,而是告訴你今天看了什麼、前幾天看了什麼、某月某日看了什麼,把你曾經看過,可是並無下單的東西再給你看一遍,也許你就有下單的衝動了。

第五是什麼呢?也是按照你的瀏覽歷史給你推薦,不是按照你如今的瀏覽歷史,好比我最近看的是健身器材,可是給我推薦的第二個商品是沙丁魚,他是按照我曾經久遠的歷史來給我推薦的。

還有第六種推薦,就是按照其餘跟你購物習慣相同的用戶推薦,好比他和我買了一樣商品,他接下來又買了什麼,根據其餘跟我買相同商品的用戶購買的物品的推薦。

第七是,系統知道個人購買歷史,知道我曾經買了一個 kindle,而後告訴我說,如今 kindle 出了新版本,那我會不會想要購買,這是根據用戶的購買歷史推薦同一個商品新版本。

還有第八,它根據個人購買歷史推薦周邊產品。系統知道我買了 kindle,他就推薦我說你要不要其餘周邊產品,好比保護套。

第九,就跟我我的購買歷史和我我的的瀏覽歷史無關的,而是根據在亞馬遜網站上賣的比較好的那些商品進行推薦。

除了登錄網站,系統會給你推薦以外,它還會主動進行推薦。在美國你們用郵件用的比較多,都是用郵件來登錄的,因此說亞馬遜知道美國用戶的郵件,就會給用戶發郵件進行推薦。

好比說這個例子:我最近看了一下佳能的數碼照相機,它就會給我發郵件,給我推薦佳能最近賣的比較好的照相機給我。

若是我無動於衷,它又會有推薦:佳能的你可能不感興趣,推薦柯達的數碼相機給你看你會不會感興趣?這就是跟我曾經瀏覽類似的東西,可是呢,只是侷限於柯達這個品牌。

若是我還無動於衷,他還會給我發郵件說,你看佳能的相機,這裏有一個便宜的一個套件,包括相機的殼子、包括記憶卡,一塊兒買會比較便宜,你會不會感興趣?推薦系統會按照你曾經瀏覽的物品推薦周邊產品,作一套件給用戶購買。

最後,若是用戶還無動於衷,它還會給你推薦,好比直接告訴你,賣得最好的數碼相機是什麼。除了我曾經本身看的佳能,還有索尼的,這就是它給我推薦的東西。

我每種推薦的算法標了一個數字,到這裏一共是 13 種,也就是說:簡簡單單的一個購物網站,僅對每件商品的,就用了 13 種不一樣的推薦策略

咱們高屋建瓴來看一下,各類推薦到底背後的算法是什麼呢?

若是咱們把推薦系統來分類的話,其實咱們每一個人都接觸到推薦系統,這是一個很原始的技術。

早期的門戶網站,好比說新浪、雅虎,還有人民日報也是有推薦系統的,只不過裏面的內容是網站編輯,或者是報社的編輯幫讀者手工選擇的,它也是一種推薦,只不過是手工生成的推薦。

第二類推薦,是一些簡單的聚合系統。好比說你去 KTV,點唱面板上就會有 KTV 的最近點唱的排行榜,若是你去書店就有暢銷書排行榜,去買電影票,貓眼電影之類的系統也會告訴你熱賣電影是什麼;包括豆瓣裏面會有電影票房排行榜。

還有按照物品的時間順序,按照時間性質給用戶推薦,好比說新上架的物品優先推薦。

這些推薦系統只是基於最簡單的統計來進行推薦,他們雖說看起來方式很簡單,但不少時候頗有效。

最後一個就是咱們關注的重點,就是真正個性化的千人千面的推薦系統。

不管是第一種,仍是第二種,你會看出來不管是人工生成的推薦系統,仍是簡單的聚合,它 都不是針對我的的。每一個人打開人民日報看到的是同樣的內容,每一個人去 KTV 裏面點歌看到的排行榜是同樣的。那咱們如今最關心的就是千人千面的推薦系統,好比說每一個人打開 Amazon 主頁,每一個人打開 Netflix 他會看到這些商品,或者電影的推薦是不同的,那這就是咱們今天想要關注的重點。

若是咱們從數學上來抽象一個推薦系統,應該從理論上來看是個什麼樣的?有什麼樣的要素、要解決什麼樣的問題呢?

首先咱們用 U 表明全部用戶的集合,咱們有一堆的用戶,而後咱們用 S 表明全部物品的集合,好比說我有一堆用戶,我有一堆東西,這些東西多是電影,多是音樂,多是人,多是其餘的物品。個人推薦系統模型也就是說:U×S,推薦出來 R,這個乘積在這裏表示笛卡爾積。意思就是說:每一個用戶和每一個物品我給它一個 R,這個 R 的值就是推薦值,就是說每個用戶對一個物品他的喜好程度是多少,不少的網站會有,讓你打分就是一到五顆星星這種方式來表達,也有像 Facebook 用點讚的方式,或者是鄙視這種方式來表達,這就是 R 表明的值,推薦系統說到底也就是一堆用戶對於一堆物品的喜歡的程度的值

舉一個你們都能明白的實例:假設我有小明、小李,韓美美和小靜這四我的。有四個電影做爲個人物品:《大話西遊》、《夏洛特煩惱》、《黃飛鴻》、《笑傲江湖》。那我能掌握的數據、可以收集到的作推薦系統的數據是哪些呢?

首先是推薦值裏面記錄了每一行是每一個用戶對於各個物品的喜愛程度。好比:小李對於《夏洛特煩惱》喜歡程度是 2,對《黃飛鴻》喜愛程度是 5。

在這個推薦矩陣裏,你會看到有的人數值是已知的,有的是未知的,好比說小明對《大話西遊》他的喜愛程度是什麼呢?咱們不知道,這就是咱們想要的,一樣也是推薦系統的一個關鍵問題:咱們怎麼從咱們這些已知的這些推薦值推導出這些未知的值? 好比小明對《大話西遊》的喜愛程度,除此以外咱們還能獲取哪些數據呢?固然咱們獲取用戶的數據,每一個用戶有性別、年齡和其餘的屬性,這些是咱們能夠得到的;還有物品的屬性,好比咱們能輕易的獲取這個電影的類別,是武俠仍是文藝片,仍是喜劇,這也是後續另一些物品的屬性。

有這三個矩陣,這些值就是咱們能夠利用的值,而後咱們要解決的問題就是利用這些獲取的數據推導那些位置的值,好比小明對《大話西遊》的喜愛程度。

我強調一下推薦系統要解決的關鍵問題:

第一是 收集數據。推薦系統本質上說,固然是一種人工智能系統,人工智能系統須要 Training,須要訓練,它固然須要訓練數據了,因此說收集數據很是重要。我以爲有一點要注意:收集數據不是一蹴而就的,須要常常更新的,數據有時效性的。好比說一我的對一個東西的喜愛程度是隨着時間變化而變化的,每個人童年喜歡的書籍電影在成年後可能就不喜歡了;可能你去年喜歡的東西和今年就不同,也許你的興趣愛好變了。還有好比說一個用戶他如今小孩出生了,他可能關注更多的嬰兒物品,好比說尿不溼,因此說收集數據很重要,並且收集數據是常常須要更新的。

第二,推薦系統要解決的關鍵問題固然就是如何預測那些未知的數據

第三個就是 怎麼創建評價系統。只有創建一個評價系統,才能知道如今個人推薦系統到底好很差,若是很差,咱們調整,怎麼調整算是好?


收集數據

收集數據有一種方式,是顯示收集,就是直接讓用戶打分,或者是點贊,或者讓用戶留言評價。這有一個很大的問題,就是不少用戶不肯意,或者懶得點贊、寫評論,或者是打分。好比說我本身,好比我在 YouTube 上看了不少視頻,我歷來沒有給他們點過贊,或者是寫過評價說:「很是不錯」或者是「很討厭」,我歷來不評價,我相信不少人會這樣子。

在沒有辦法收集數據的狀況下,有沒有其餘方式來收集呢?這就是愈來愈多的 隱性收集 數據,那怎麼隱性收集呢?好比說一個視頻網站,若是一個用戶看了一部電影,過了一段時間發現他又在看那部電影,表示他很喜歡這個電影;若是他在觀影時一直快進,或者中途就跳開了,那就說明他不喜歡,這就是隱性收集的一個策略。

購物網站就更簡單,若是一個用戶買了某個東西,固然就表示他喜歡某個東西,若是他退貨了,確定就表示不喜歡。隱性收集如今愈來愈重要,並且隱形收集的數據遠遠高於顯性收集的數據。


如何預測

獲得了數據以後,咱們如何來預測呢?它關鍵的挑戰有哪些?

咱們獲得的推薦值矩陣就是一個用戶到底喜歡什麼東西,但實際上,獲得的數據基本上是很是稀疏的,意思就是說大多數用戶對大的物品喜不喜歡我是不知道的。咱們只知道,每一個用戶可能對少許物品的喜愛程度,或者是某一個物品只有少許的用戶喜歡,因此他表達出喜愛。

還有就是冷啓動物體,這是什麼?假設我如今有一個新的物品,好比說 iPhone11 要放在個人購物網站上,沒有任何用戶爲他打高分,由於它剛出來,沒有人用過,天然沒有反饋了,你怎麼推薦它?你怎麼知道人家是喜歡 iPhone11,仍是喜歡華爲 P11?

還有就是新的用戶。若是有個新的用戶上來,他沒有任何的交互行爲,你根本不可能知道他到底喜歡或者不喜歡什麼,這就是一個很大的挑戰。

那經常使用的推薦方法有哪些呢?若是你如今要負責公司,作一個推薦系統,我建議你在我先要介紹這個列表裏逐一試過來,再去使用更 Fashion,更先進的方法。

我會逐一把它們作些簡單的介紹。

第一是 基於內容 的,這裏有一個圖來簡單介紹,表達它的意思。

假設一我的他喜歡這種酸酸的啤酒,就讓系統找跟這種啤酒全部類似的口味的其餘啤酒,若是找到另一個,固然就能夠推薦給他。

基於內容推薦看起來是最簡單最容易實現的,效果反而也是還不錯的,可是它的問題在於不少狀況:很難獲取一個物品的屬性。若是基於內容,基於產品的屬性找到兩個類似的產品作推薦,怎麼判斷兩個產品類似呢?不是一件容易的事情。

好比給用戶推薦兩篇新聞,怎麼判斷兩個新聞相相似呢,須要用到天然語言理解,系統須要知道這篇新聞裏面包含了哪些人物、哪些事件、哪些地點、哪些時間,這篇新聞裏邊是否是有國家元首,若是這兩篇沒有國家元首,至少某種程度上是類似的;或者這兩篇文章是否是都包含了好比北京的事情,是否是都包含了一樣的主題,它們是都在談政治、都在談軍事,或者都在談經濟呢。基於內容這種推薦方法,最關鍵的問題是怎麼獲取這個物品的屬性,對於文字,可能會用到天然語言處理;對於圖像,可能須要用到深度學習的圖像識別技術,知道這個圖像圖片裏面到底包含了哪些物體是人、是狗、仍是貓,若是是貓的話,這兩個方式類似的,是否是橘黃色貓?這就是基於內容的方法。

第二種方法是 協同過濾 的方法。

我給你們舉個最簡單的例子,可是你立刻就能理解協同過濾。

假設我有三個用戶和四個物品,分別是橘子、草莓、蘋果和香蕉。我知道第三個用戶他購買蘋果,接下來,我問你:在其餘的三個他沒有購買的物品,橘子,草莓和香蕉裏面,第三個用戶可能會最喜歡的哪一個?

基於協同過濾的考慮方式是這樣子:咱們但願給第三個用戶推薦的物品應該是跟他已經購買的蘋果類似的物品,那什麼物品能夠和蘋果類似呢?咱們能夠這樣思考,什麼物品在用戶購買蘋果以後,被同時購買的次數是最多的

咱們先看香蕉,香蕉有沒有跟蘋果同時購買?有,第一個用戶,他同時購買了橘子、蘋果和香蕉,香蕉咱們算它得了一分,由於跟蘋果同時購買了,因此加一分;那咱們再看草莓,草莓沒有任何人買草莓的同時也買過蘋果,草莓得分是 0 分;那麼再看橘子,第一個用戶,他同時購買了蘋果,和橘子,第二人也同時購買了蘋果和橘子,因此說橘子得兩分,它跟蘋果的類似度是 2。這樣咱們就發現蘋果跟橘子類似度是 2,蘋果和草莓類似度是 0,蘋果跟香蕉類似度是 1,得出結論:橘子跟蘋果最類似,咱們就給第三個用戶推薦橘子,這就是協同過濾的精髓。

接下來咱們再介紹 矩陣分解 方式。

舉個例子,這裏面 ABCD 四個用戶,咱們有 WXYZ,四個產品,咱們知道用戶對產品的喜愛程度,好比說 A 對 X 的喜愛程度 4.5,就給咱們這樣一個打分的矩陣,咱們怎麼來預測好比說 A 對對 W 它的喜愛程度是多少呢?

矩陣分解的最好方式是這樣子的:我但願找到另外兩個矩陣,分別叫作 用戶矩陣和物品矩陣,用戶矩陣行的個數是等於我這個打分矩陣裏面用戶的個數,物品矩陣裏面列的個數是等於物品的總數;至於用戶矩陣的列,它必定要等於這個物品的矩陣的行數,那它的列數和行數具體等於什麼值呢,是一個參數裏你能夠預設的,能夠是 2,能夠是 3,能夠是 10,能夠是 100。

這兩個矩陣用戶矩陣和物品矩陣應該有怎樣的屬性?咱們但願他們的屬性是這樣子:當這兩個矩陣相乘,他們乘的積確定是一個矩陣,和個人打分矩陣是一樣的行,一樣的列;我但願他們兩個乘積裏面對應的值,它跟個人這個打分矩陣,應該一樣行,一樣列,那麼就對應的值。

好比說第一行第二個值,我但願它的值是接近於 4.5 的,在 AX 位置接近 4.五、在 AY 位置接近 2.0、在 BW 這個位置接近 4.0,也就是說我但願這兩個矩陣乘積的一個最終的矩陣,跟我打分矩陣裏面已知的值是類似的。

若是能夠作到這一點,那乘積的矩陣,它在這裏是確定是會對應值的,我認爲這兩個矩陣乘積之後對應的值就是個人預測的值,這就是矩陣分解的基本思想。

你立刻能夠發現矩陣分解它有一個問題:它只利用了用戶對物品的打分的值,其實咱們是知道用戶的屬性,好比說用戶是男是女,是總是少,咱們也知道物品的一些屬性,好比說這個物品,若是是電影的話,咱們知道它導演是誰,演員主演有哪些,他的風格是什麼,可是咱們沒有辦法在矩陣分解裏面提供一些信息,由於數據沒有辦法提供,咱們就沒有辦法利用它們來提升咱們的系統。

因此就有人提出另一種算法,叫因子分解機。

它的思路是:把用戶對物品的喜愛變成我下面定義的這樣一個公式形式。它的意思是什麼呢?

好比我這裏有三個用戶:湯姆、傑克和艾麗斯,咱們有電影、圖書和音樂,有他們互相之間的喜愛程度,我把這個用戶做爲讀者編碼,每一行只有一個,人數爲 1,1 就表示表明湯姆,而後另外一行這一個 1 是表明傑克;而後是物品進行讀者編碼,每一行也是隻有一個物品爲 1,再把用戶的屬性,好比說年齡、性別放在這裏,再把物品的屬性放在這裏;而後每一行,這些 X 數據分別表明是哪一個用戶,是哪一個物品,以及這個用戶的年齡是什麼、性別是什麼,這個物品的屬性分別是什麼;這個用戶對於這個物品它的喜愛程度是什麼,這就是 Y 的值。也就是說,咱們但願這些 X 的值經過下面這樣一個公式的計算產生一個 Y 的值

有一點跟矩陣分解很不同的是:X 之間是有乘積的,是有相關性的。好比:湯姆的 X 值要跟湯姆的年齡、性別相乘;湯姆的值也要跟這個物品的屬性相乘,性別或者年齡也要跟物品相乘,再互相交叉相乘,才能獲得咱們的變量。

這裏面已知的值是 Y、X,未知的是 W,V 的值。咱們只要經過計算知道 W 和 V 的值,就能對未知的那些 Y 作計算,由於 X 是已知的,這就是因子分解機的工做原理。

跟前面相比,這種方法就是同時利用對物品的喜愛,也同時利用了物品的屬性和用戶的屬性。

固然咱們如今絕對不能忽略的一件事情就是深度學習的推薦系統。

我能想到的最簡單的,用深度學習作推薦模型就是這樣子的:輸入式用戶 ID,好比有一百個用戶,分別對用戶編碼從 0 到 99;若是有一千個物品,就把物品編碼從 0 到 999,做爲深度學習網絡的輸入,而後加一個嵌入層,再把嵌入層輸出的兩個向量鏈接在一塊兒,加入一個全鏈接層、加正則化,再加一個全鏈接層、再加正則化,再加兩個全鏈接層,而後用 softmax 做爲預測。

它預測的值分別是輸出 000,或者假設想要的評分是從 0 到 5 打分,輸出就是五個元素,分別是值爲 0 和 1 的數。若是我預測它的打分是 1 分的話,那就是第一個元素爲 1,其餘元素爲 0,若是我預測打分數目,那就是第五個元素爲 1 其餘元素爲 0。

這就是一個最簡單的深度學習模型,它惟一的數據就是輸入就是用戶 ID、物品 ID 和這個用戶對這個物品打分的值,而後虛擬網絡最後就會告訴你,若是你把一個新的用戶 ID 和一個沒有打過度的物品 ID 告訴它,它會預測一個打分的值。

講一個實際使用的例子,這個稍微複雜一點,可是跟前面我介紹的大同小異。

這是 Google Play,至關於蘋果的 APP Store,用來下載 APP 的,可能中國用的比較少。它用了這樣一個深度學習的方式來作推薦:輸入分別是用戶的性別、年齡、用戶一共裝了多少個 APP、跟這個系統之間的交互是什麼樣子的,這些直接送到它的嵌入層裏;而後是用戶的設備,三星、華爲、或者其餘設備;以及用戶安裝了哪些 APP,和用戶的對 APP 的打分狀況是什麼,這些都加入一個額外的一個嵌入層,跟前面的這些屬性直接連在一塊兒,加了三層的深度學習網絡,以後直接把用戶安裝了 APP,和用戶對已經安裝的 APP 的打分兩兩相乘的積,做爲它最後的輸入。訓練這樣一個結構的神經網絡,用在 Google Play 的 APP 推薦裏面。

還有一種推薦的算法,是由於你們已經花了不少工夫來研究搜索引擎,搜索引擎本質上就是一個推薦系統。

好比輸入「黃曉明」這個詞到搜索引擎裏面,無論百度仍是 Google,會反饋不少的頁面,第一個頁面就是推薦系統認爲,你會最喜歡的一篇關於黃曉明的文章或者網頁,第二個頁面是系統認爲用戶次喜歡的文章。

本質上來講,這種推薦就是:把一堆物品給某一個用戶呈現的時候排序的過程,用戶具體喜歡的物品不重要,重要的是用戶比較而言更喜歡的物品。

若是收集了用戶數據和用戶打分的數據,就能夠用傳統的搜索引擎方式,去爲每個物品打分,而後進行排序,這是很傳統可是頗有用的一種方式。

還有一種方式,不用任何數據支持都能想到的一種,就是 探索與利用。聽起來很 fancy,但其實原理很簡單,這裏舉個例子:假設有 5 個用戶,他們是一類的,就是很類似的用戶,隨機把用戶 1 和用戶 2 抽取出來,做爲小白鼠作實驗,給他們推薦兩部電影,看看他們對電影的反應是怎麼樣的。

給第一個用戶推薦一部,給第二個用戶推薦另一個部影,咱們發現第一個用戶沒有點擊電影,沒有看電影,但第二個用戶看了,就表示說這個電影更適合第二個用戶這類羣體的口味。那我就知道了,原來給第二個用戶推薦的這部電影好,因而就能夠給其餘用戶推薦被第二個用戶點擊過的電影。

爲何呢?很簡單,由於這五個用戶是類似的,我已經拿用戶一和用戶二做爲小白鼠實驗了,實驗反映這個電影好,那我就應該給這些其餘的用戶推薦這個電影了。

可是還要注意一點:你也看到咱們也給用戶推薦了一部沒有被用戶一一點擊的電影,爲何?若是咱們只給全部的用戶推薦,不用戶點擊的電影,萬一用戶一直點錯了,他其實也是喜歡那個電影但他沒點,或者他如今正忙,有什麼緣由看不了呢?那不就丟掉了這個好電影被用戶看到的機會嗎?咱們仍是要把它顯示給某些用戶看到,可是隻能在顯示的時候,顯示的選擇它的機率低一點,由於它明顯被用戶喜歡過。

最後不得不提就是 集成學習 的方法。

咱們有不少不一樣的推薦算法,若是我把這些推薦算法所有加起來,合在一塊兒,對用戶會不會更好呢?現實的反映是會更好。

怎麼來把這些不一樣的算法輸出合在一塊兒呢?第一個方式就是投票。假設有三個推薦系統,其中兩個認爲某一個用戶對物品的喜歡程度是 5,只有一個認爲是 4,那我確定相信這兩個了,投票多的就認爲是它。或者取平均值,但我認爲第一個算法更好,累計一個見解的輸出,給它更大的權重。

第二種集成學習的方式就是堆疊。假設有兩種推薦算法,我把第一種算法的輸出的結果做爲第二種算法的輸入或者輸入的一部分,再訓練第二種算法。

第三種就是提高,我把一個推薦算法的輸出值和我想要的真實的值的誤差再做爲個人訓練數據進行推理、進行訓練,這也是一種集成學習的方法。


如何評估推薦系統

而後我想給你們談一下,怎麼評估推薦系統。

說到推薦系統的評估的方式,立刻能想到 離線評估。根據有歷史數據,一個用戶喜不喜歡某個東西,我把歷史數據分紅兩部分,一部分做爲訓練數據,一部分做爲測試數據,我用訓練數據的值來預測測試數據集裏面的值,若是推薦的值跟我測試數據裏面真實值相差少,就認爲我是對的,這是很常見的一個方法,叫離線評估的方法。

第二個是 問卷調查,就是在網站或者頁面上放置一個按紐,直接告訴用戶:我如今給你推薦這個電影,你以爲好或者很差?用戶就直接給作評價。或者是搞個問卷調查,問用戶願不肯意作個問卷調查。在設計問卷調查的時候要注意一下:同一個問題的兩種形式,好比說問用戶喜不喜歡《夏洛特煩惱》這個電影,能夠首先用一個句子問:《夏洛特煩惱》是否是你喜歡的電影;第二個問題是:你是否是特別討厭《夏洛特煩惱》這個電影,由於有這樣兩個加起來可讓用戶從新思考,而且防止他有的時候只是點錯了。還有就是所言非所意,這是什麼意思?其實人有情感有理智,也有一些潛意識,他在問卷裏告訴你他喜歡某個東西,不必定是他真的喜歡,這也是值得注意的一個問題。

第三個評估推薦系統方法是 用戶學習。請一堆用戶,作一個小規模的測試,他測試的不僅是推薦系統好很差,還包括這個推薦系統最後呈現的用戶界面好很差。這是針對整個用戶體驗進行測試,只是幾十個用戶小範圍的測試,可能會發現系統 90% 左右的大問題,這是一個很是好的評估推薦系統的方法。

而後就是最近很是流行的所謂 A/B 測試,或者所謂 在線測試。一個新的模型出來,一個新的算法出來了,隨機選擇一些用戶,好比 10% 的用戶,用新算法的結果,另外 90% 仍是用原來的算法的結果,而後比較新算法的 10% 的用戶最後是否是得到了更好的推薦效果,好比說有購買更多的商品,或者是更踊躍的來訪問咱們的網站。


推薦系統架構 & 總結

接下來,我想總結一下。

有一個理論叫作:No free lunch theory,天下沒有免費午飯。就是說 世界上沒有一種算法在解決任何問題的狀況下都比另一種算法好,即便是如今最火熱的深度學習算法,也並不意味着它會比傳統的學習算法在解決任何問題下都好。因此組合多種不一樣的算法,就顯得很重要,就是我前面提到的集成學習的方法。

Netflix 是美國的一個電影網站,至關於愛奇藝這種收費的電影網站,它的推薦系統很是有名,他們以前搞了個比賽,獎金有一百萬美金,讓你們比賽誰可以比他們原來的推薦算法提升 10% 的效果。最後贏得這個比賽的是當時 AT&T 的一個團隊,他們用了幾十種算法,把這幾十種算法結合起來,作一個推薦系統,提升了 10.09% 的效果。這就是你們要注意的,把多種算法合在一塊兒。

最後呢,我想談的就是在架構,我以 Netflix 爲架構爲主說若是要作一個推薦系統,應該怎麼來選擇軟件系統。

分別要把你的系統分紅:離線的部分,近實時的部分和在線的部分。

離線的部分可使用 Hadoop,Hive、Pig 或者 Spark 這種方式來作大規模的計算,由於這種計算都須要很長的時間。近實施的系統呢,他們使用 Cassandra 這種分佈式數據庫,MySQL,還有 Catch。還有實時系統,就是在內存裏面計算這個系統,在這個部分的系統要求是:數據量比較少,算法比較簡單,反饋通常都是毫秒爲單位,在這個在實時系統裏邊通常都只作排序,在離線這部分可能要作比較複雜的事。

那這就是我今天要講的全部內容,由於今天時間有限,我只能點到爲止,若是你對推薦系統感興趣,對我前面講到的那些推薦系統想要有個更深刻的瞭解,從算法到實現,都感興趣的話,你能夠掃咱們貪心科技的二維碼,進入咱們的公衆號,咱們會在裏面提交更多的內容。

weixin.qq.com/r/eCqPl5XE6… (二維碼自動識別)

問答環節

Q1. 深度學習用戶 ID 加 embedding 怎麼操做?

A:Embeding 的本質是對輸入的特徵進行固定長度的編碼。 用戶 ID 的值多是從 0 到 10000, 是一個整數, 經過 Embeding 層, 輸出變爲一個預先設定長度的向量。 這樣作的目的是爲了經過訓練數據獲得更豐富的信息, 這個向量能包含了對應用戶 ID 的信息。

Q2. 探索和利用 和協同過濾 區別

A:探索和利用這種算法比較適合物品種類比較少的狀況, 一般使用在推薦系統的最後一個階段。 就是使用其它算法找出最有可能被某個類別用戶接受的物品之後, 再使用探索和利用來對物品從新排序。協同過濾相對計算量小,更適合大規模數據的狀況。

Q3:PPT 能共享嗎?

A:請關注咱們公衆號,咱們會在裏面分享。

Q4. 能具體說一下集成學習中的堆疊和 boosting 嗎?

A:堆疊:前一個算法的輸出做爲下一個算法的輸入,或者輸入的一部分Boosting:請一個算法的輸出和實際值的差,做爲本算法或者其餘算法的輸入

Q5:在線排序的算法如今主要應用比較普遍的都有哪些?

A:我不太明白你的具體問題。我假設你的問題是「Learning to rank」裏面最流行的算法, 個人答案是:LambdaMART

Q6:請問用 spark 作推薦系統,除了 mllib 的 ALS 算法,還有什麼實現方法呢?

A:Spark 官方只提供了協同過濾的 ALS 算法。 其餘算法還須要本身實現。

Q7: 深度學習的輸入層請詳細講解下?

A:這個問題太寬泛,須要具體狀況具體分析。

Q8:item2item 協同過濾 跟矩陣分解 應用環境分別是什麼樣的?

A:item2item 的協同過濾算是一種最近鄰方法 (Neighborhood Method), 相對矩陣分解, 比較容易實現, 比較容易微調, 可解釋性也比較好。

Q9: 推薦算法一般都和用戶畫像一塊兒使用嗎?

A:若是你可以獲取用戶畫像,固然應該利用。高質量的用戶畫像必定會提升推薦的效果。

Q10: 老師我想問下關於 LFM,在矩陣分解後再相乘,和目標矩陣作差的過程當中,目標矩陣中沒有過的值是怎麼補了?

A:目標中沒有的值不用補,作差的過程只須要考慮存在的值。

Q11:embedding 簡單用 one hot?

A:理論上講, 你能夠直接使用全鏈接層和 one hot 編碼代替 Embedding 層。 可是在許多狀況下, 直接使用 one hot 編碼做爲輸入計算量會大增。 例如在天然語言處理裏面, 輸入的 ID 值可能在百萬級別, 若是直接 one hot 編碼, 輸入的向量就是百萬級別的長度, 若是還須要使用 batching(批處理)來提升運輸效率,那麼內容佔用和計算量都是巨大的。

Q12: 推薦系統有在工業(電力、化工、製造)領域的應用麼?

A:我尚未發現推薦系統在電力,化工和製造業的應用。我想在工業 4.0, 先進製造業, 私人訂製的領域,推薦系統應該是大有可爲的。

Q13:剛纔其實整個的這個課程講了不少的算法,從協同過濾到深度學習,好比說一個工程師面對一個推薦系統的這樣一個問題,大概有沒有一個 guideline,對這類問題,咱們須要採用這種一個協同過濾的方式,而後可能對另外一個沒問題可能採用深度學習的方式,有沒有大概這樣一個 guideline?

A:個人建議是先從基於內容的開始,基於內容的推薦系統和基於協同過濾的推薦系統開始,爲何呢?即便你用深度,即便你開始上更 fancy 的算法,你也不知道你的算法是否是比傳統的算法好,若是你用一個轉動的算法先作出來了,你再用更先進的算法,這至少讓你有一個比較說這個算法好,否則的話,你都雲裏霧裏,你即便用了更先進的算法,你不知道先進的算法是否是真的好,這是其一;

其二是越先進的算法越難以實現,好比說我講到 Netflix 花一了一百萬美金,獲得了 AT&T 貝爾實驗室得冠軍的算法,但實際上他們並無在他們的系統裏面使用,爲何?由於太複雜了,一個算法在學術界裏面能夠很複雜,在工業界裏面實現,要考慮到內存,考慮到計算量,考慮到一個程序員能不能看懂那個算法,考慮到你的代碼是否是比較容易 maintain,那考慮到這些之後,Netflix 最後沒有使用那個算法,也就是說,若是要着手的話,我建議你從前面的算法開始,最早使用的是基於內容的推薦和基於協同過濾的推薦,接下來纔是更先進的算法。

Q14:還有一個問題:由於深度學習這種技術在圖像識別這種領域已經很成熟了,可是我想了解一下好比說在工業界裏面深度學習目前的在推薦系統這塊應用狀況究竟是怎麼樣的?

A:如今深度學習很火了,那如今是否是有向深度學習作推薦系統的這樣一個趨勢呢?是有的,爲何有呢?好比說有的圖片分享網站,或者像 YouTube 這種視頻分享網站,你們往上面發東西,並無人告訴你裏面的內容是什麼樣,上傳短片上去,這個系統它並不知道這個短片做者是誰,風格是什麼,有哪些演員在裏面,那什麼都不知道,怎麼知道這裏面的相關性呢?

圖片也同樣,怎麼知道推薦什麼圖片呢?深度學習,好比說 CNN 卷積神經網絡,它能夠作圖像和視頻裏面的物質的識別、提取,他能夠告訴你這個圖片是奧巴馬,這個圖片是特朗普或者是其餘人。包括音樂他會告訴你這個音樂的風格是什麼。

因此說如今的確是有向深度學習進展的一個趨勢,並且像 LSTM、RNN 它能夠獲取時間信息,就是時間上的相關性。好比說一我的他喜歡看《甄鬟傳》,還喜歡看《紙牌屋》,可是他更喜歡看《紙牌屋》,那傳統的推薦系統,我在看甄鬟傳的 21 集,看完了我推薦什麼呢?推薦《紙牌屋》,爲何?由於它更喜歡紙牌屋,可是在這個前提下,我告訴你:我正在看《甄鬟傳》的 21 集,你是應該推薦我《紙牌屋》嗎?你應該推薦我《甄鬟傳》的 22 集,由於我正在看《甄鬟傳》的 21 集。這種時間上的,時間序列上的這種預測,顯然是用這種 LSTM、遞歸神經網絡會比較好。

講師介紹

袁源,英文名:Jerry,美國微軟總部資深工程師、主導多款核心推薦系統的研發,是人工智能、分佈式系統、雲計算方面的專家。博士畢業於美國新澤西理工,擁有 14 年人工智能、推薦系統、天然語言處理、數字圖像和視頻處理項目經驗。曾師從中國科學院王守覺院士從事人臉識別研究、共同發表論文。在美國博士期間,主要研究 NASA(美國航天局)支持的基於人工智能的空間天氣預測項目。

更多幹貨內容,可關注AI前線,ID:ai-front,後臺回覆「AI」、「TF」、「大數據」可得到《AI前線》系列PDF迷你書和技能圖譜。

相關文章
相關標籤/搜索