「探索推薦引擎內部的祕密」系列將帶領讀者從淺入深的學習探索推薦引擎的機制,實現方法,其中還涉及一些基本的優化方法,例如聚類和分類的應用。同時在理論講解的基礎上,還會結合 Apache Mahout 介紹如何在大規模數據上實現各類推薦策略,進行策略優化,構建高效的推薦引擎的方法。本文做爲這個系列的第一篇文章,將深刻介紹推薦引擎的工做原理,和其中涉及的各類推薦機制,以及它們各自的優缺點和適用場景,幫助用戶清楚的瞭解和快速構建適合本身的推薦引擎。html
現在已經進入了一個數據爆炸的時代,隨着 Web 2.0 的發展, Web 已經變成數據分享的平臺,那麼,如何讓人們在海量的數據中想要找到他們須要的信息將變得愈來愈難。web
在這樣的情形下,搜索引擎(Google,Bing,百度等等)成爲你們快速找到目標信息的最好途徑。在用戶對本身需求相對明確的時候,用搜索引擎很方便的經過關鍵字搜索很快的找到本身須要的信息。但搜索引擎並不能徹底知足用戶對信息發現的需求,那是由於在不少狀況下,用戶其實並不明確本身的須要,或者他們的需求很難用簡單的關鍵字來表述。又或者他們須要更加符合他們我的口味和喜愛的結果,所以出現了推薦系統,與搜索引擎對應,你們也習慣稱它爲推薦引擎。算法
隨着推薦引擎的出現,用戶獲取信息的方式從簡單的目標明確的數據的搜索轉換到更高級更符合人們使用習慣的信息發現。網絡
現在,隨着推薦技術的不斷髮展,推薦引擎已經在電子商務 (E-commerce,例如 Amazon,噹噹網 ) 和一些基於 social 的社會化站點 ( 包括音樂,電影和圖書分享,例如豆瓣,Mtime 等 ) 都取得很大的成功。這也進一步的說明了,Web2.0 環境下,在面對海量的數據,用戶須要這種更加智能的,更加了解他們需求,口味和喜愛的信息發現機制。dom
前面介紹了推薦引擎對於如今的 Web2.0 站點的重要意義,這一章咱們將講講推薦引擎究竟是怎麼工做的。推薦引擎利用特殊的信息過濾技術,將不一樣的物品或內容推薦給可能對它們感興趣的用戶。機器學習
圖 1 給出了推薦引擎的工做原理圖,這裏先將推薦引擎看做黑盒,它接受的輸入是推薦的數據源,通常狀況下,推薦引擎所須要的數據源包括:學習
顯式的用戶反饋能準確的反應用戶對物品的真實喜愛,但須要用戶付出額外的代價,而隱式的用戶行爲,經過一些分析和處理,也能反映用戶的喜愛,只是數據不是很精確,有些行爲的分析存在較大的噪音。但只要選擇正確的行爲特徵,隱式的用戶反饋也能獲得很好的效果,只是行爲特徵的選擇可能在不一樣的應用中有很大的不一樣,例如在電子商務的網站上,購買行爲其實就是一個能很好表現用戶喜愛的隱式反饋。測試
推薦引擎根據不一樣的推薦機制可能用到數據源中的一部分,而後根據這些數據,分析出必定的規則或者直接對用戶對其餘物品的喜愛進行預測計算。這樣推薦引擎能夠在用戶進入的時候給他推薦他可能感興趣的物品。優化
推薦引擎的分類能夠根據不少指標,下面咱們一一介紹一下:網站
根據這個指標,推薦引擎能夠分爲基於大衆行爲的推薦引擎和個性化推薦引擎
這是一個最基本的推薦引擎分類,其實大部分人們討論的推薦引擎都是將個性化的推薦引擎,由於從根本上說,只有個性化的推薦引擎纔是更加智能的信息發現過程。
其實這裏講的是如何發現數據的相關性,由於大部分推薦引擎的工做原理仍是基於物品或者用戶的類似集進行推薦。那麼參考圖 1 給出的推薦系統原理圖,根據不一樣的數據源發現數據相關性的方法能夠分爲如下幾種:
能夠想象在海量物品和用戶的系統中,推薦引擎的計算量是至關大的,要實現實時的推薦務必須要創建一個推薦模型,關於推薦模型的創建方式能夠分爲如下幾種:
其實在如今的推薦系統中,不多有隻使用了一個推薦策略的推薦引擎,通常都是在不一樣的場景下使用不一樣的推薦策略從而達到最好的推薦效果,例如 Amazon 的推薦,它將基於用戶自己歷史購買數據的推薦,和基於用戶當前瀏覽的物品的推薦,以及基於大衆喜愛的當下比較流行的物品都在不一樣的區域推薦給用戶,讓用戶能夠從全方位的推薦中找到本身真正感興趣的物品。
這一章的篇幅,將詳細介紹各個推薦機制的工做原理,它們的優缺點以及應用場景。
基於人口統計學的推薦機制(Demographic-based Recommendation)是一種最易於實現的推薦方法,它只是簡單的根據系統用戶的基本信息發現用戶的相關程度,而後將類似用戶喜好的其餘物品推薦給當前用戶,圖 2 給出了這種推薦的工做原理。
從圖中能夠很清楚的看到,首先,系統對每一個用戶都有一個用戶 Profile 的建模,其中包括用戶的基本信息,例如用戶的年齡,性別等等;而後,系統會根據用戶的 Profile 計算用戶的類似度,能夠看到用戶 A 的 Profile 和用戶 C 同樣,那麼系統會認爲用戶 A 和 C 是類似用戶,在推薦引擎中,能夠稱他們是「鄰居」;最後,基於「鄰居」用戶羣的喜愛推薦給當前用戶一些物品,圖中將用戶 A 喜歡的物品 A 推薦給用戶 C。
這種基於人口統計學的推薦機制的好處在於:
那麼這個方法的缺點和問題是什麼呢?這種基於用戶的基本信息對用戶進行分類的方法過於粗糙,尤爲是對品味要求較高的領域,好比圖書,電影和音樂等領域,沒法獲得很好的推薦效果。可能在一些電子商務的網站中,這個方法能夠給出一些簡單的推薦。另一個侷限是,這個方法可能涉及到一些與信息發現問題自己無關卻比較敏感的信息,好比用戶的年齡等,這些用戶信息不是很好獲取。
基於內容的推薦是在推薦引擎出現之初應用最爲普遍的推薦機制,它的核心思想是根據推薦物品或內容的元數據,發現物品或者內容的相關性,而後基於用戶以往的喜愛記錄,推薦給用戶類似的物品。圖 3 給出了基於內容推薦的基本原理。
圖 3 中給出了基於內容推薦的一個典型的例子,電影推薦系統,首先咱們須要對電影的元數據有一個建模,這裏只簡單的描述了一下電影的類型;而後經過電影的元數據發現電影間的類似度,由於類型都是「愛情,浪漫」電影 A 和 C 被認爲是類似的電影(固然,只根據類型是不夠的,要獲得更好的推薦,咱們還能夠考慮電影的導演,演員等等);最後實現推薦,對於用戶 A,他喜歡看電影 A,那麼系統就能夠給他推薦相似的電影 C。
這種基於內容的推薦機制的好處在於它能很好的建模用戶的口味,能提供更加精確的推薦。但它也存在如下幾個問題:
雖然這個方法有不少不足和問題,但他仍是成功的應用在一些電影,音樂,圖書的社交站點,有些站點還請專業的人員對物品進行基因編碼,好比潘多拉,在一份報告中說道,在潘多拉的推薦引擎中,每首歌有超過 100 個元數據特徵,包括歌曲的風格,年份,演唱者等等。
隨着 Web2.0 的發展,Web 站點更加提倡用戶參與和用戶貢獻,所以基於協同過濾的推薦機制因運而生。它的原理很簡單,就是根據用戶對物品或者信息的偏好,發現物品或者內容自己的相關性,或者是發現用戶的相關性,而後再基於這些關聯性進行推薦。基於協同過濾的推薦能夠分爲三個子類:基於用戶的推薦(User-based Recommendation),基於項目的推薦(Item-based Recommendation)和基於模型的推薦(Model-based Recommendation)。下面咱們一個一個詳細的介紹着三種協同過濾的推薦機制。
基於用戶的協同過濾推薦
基於用戶的協同過濾推薦的基本原理是,根據全部用戶對物品或者信息的偏好,發現與當前用戶口味和偏好類似的「鄰居」用戶羣,在通常的應用中是採用計算「K- 鄰居」的算法;而後,基於這 K 個鄰居的歷史偏好信息,爲當前用戶進行推薦。下圖 4 給出了原理圖。
上圖示意出基於用戶的協同過濾推薦機制的基本原理,假設用戶 A 喜歡物品 A,物品 C,用戶 B 喜歡物品 B,用戶 C 喜歡物品 A ,物品 C 和物品 D;從這些用戶的歷史喜愛信息中,咱們能夠發現用戶 A 和用戶 C 的口味和偏好是比較相似的,同時用戶 C 還喜歡物品 D,那麼咱們能夠推斷用戶 A 可能也喜歡物品 D,所以能夠將物品 D 推薦給用戶 A。
基於用戶的協同過濾推薦機制和基於人口統計學的推薦機制都是計算用戶的類似度,並基於「鄰居」用戶羣計算推薦,但它們所不一樣的是如何計算用戶的類似度,基於人口統計學的機制只考慮用戶自己的特徵,而基於用戶的協同過濾機制但是在用戶的歷史偏好的數據上計算用戶的類似度,它的基本假設是,喜歡相似物品的用戶可能有相同或者類似的口味和偏好。
基於項目的協同過濾推薦
基於項目的協同過濾推薦的基本原理也是相似的,只是說它使用全部用戶對物品或者信息的偏好,發現物品和物品之間的類似度,而後根據用戶的歷史偏好信息,將相似的物品推薦給用戶,圖 5 很好的詮釋了它的基本原理。
假設用戶 A 喜歡物品 A 和物品 C,用戶 B 喜歡物品 A,物品 B 和物品 C,用戶 C 喜歡物品 A,從這些用戶的歷史喜愛能夠分析出物品 A 和物品 C 時比較相似的,喜歡物品 A 的人都喜歡物品 C,基於這個數據能夠推斷用戶 C 頗有可能也喜歡物品 C,因此係統會將物品 C 推薦給用戶 C。
與上面講的相似,基於項目的協同過濾推薦和基於內容的推薦其實都是基於物品類似度預測推薦,只是類似度計算的方法不同,前者是從用戶歷史的偏好推斷,然後者是基於物品自己的屬性特徵信息。
同時協同過濾,在基於用戶和基於項目兩個策略中應該如何選擇呢?其實基於項目的協同過濾推薦機制是 Amazon 在基於用戶的機制上改良的一種策略,由於在大部分的 Web 站點中,物品的個數是遠遠小於用戶的數量的,並且物品的個數和類似度相對比較穩定,同時基於項目的機制比基於用戶的實時性更好一些。但也不是全部的場景都是這樣的狀況,能夠設想一下在一些新聞推薦系統中,也許物品,也就是新聞的個數可能大於用戶的個數,並且新聞的更新程度也有很快,因此它的形似度依然不穩定。因此,其實能夠看出,推薦策略的選擇其實和具體的應用場景有很大的關係。
基於模型的協同過濾推薦
基於模型的協同過濾推薦就是基於樣本的用戶喜愛信息,訓練一個推薦模型,而後根據實時的用戶喜愛的信息進行預測,計算推薦。
基於協同過濾的推薦機制是現今應用最爲普遍的推薦機制,它有如下幾個顯著的優勢:
而它也存在如下幾個問題:
在現行的 Web 站點上的推薦每每都不是單純只採用了某一種推薦的機制和策略,他們每每是將多個方法混合在一塊兒,從而達到更好的推薦效果。關於如何組合各個推薦機制,這裏講幾種比較流行的組合方法。
介紹完推薦引擎的基本原理,基本推薦機制,下面簡要分析幾個有表明性的推薦引擎的應用,這裏選擇兩個領域:Amazon 做爲電子商務的表明,豆瓣做爲社交網絡的表明。
推薦在電子商務中的應用 – Amazon
Amazon 做爲推薦引擎的鼻祖,它已經將推薦的思想滲透在應用的各個角落。Amazon 推薦的核心是經過數據挖掘算法和比較用戶的消費偏好於其餘用戶進行對比,藉以預測用戶可能感興趣的商品。對應於上面介紹的各類推薦機制,Amazon 採用的是分區的混合的機制,並將不一樣的推薦結果分不一樣的區顯示給用戶,圖 6 和圖 7 展現了用戶在 Amazon 上能獲得的推薦。
Amazon 利用能夠記錄的全部用戶在站點上的行爲,根據不一樣數據的特色對它們進行處理,並分紅不一樣區爲用戶推送推薦:
值得一提的是,Amazon 在作推薦時,設計和用戶體驗也作得特別獨到:
Amazon 利用有它大量歷史數據的優點,量化推薦緣由。
另外,Amazon 不少推薦是基於用戶的 profile 計算出來的,用戶的 profile 中記錄了用戶在 Amazon 上的行爲,包括看了那些物品,買了那些物品,收藏夾和 wish list 裏的物品等等,固然 Amazon 裏還集成了評分等其餘的用戶反饋的方式,它們都是 profile 的一部分,同時,Amazon 提供了讓用戶自主管理本身 profile 的功能,經過這種方式用戶能夠更明確的告訴推薦引擎他的品味和意圖是什麼。
推薦在社交網站中的應用 – 豆瓣
豆瓣是國內作的比較成功的社交網站,它以圖書,電影,音樂和同城活動爲中心,造成一個多元化的社交網絡平臺,天然推薦的功能是必不可少的,下面咱們看看豆瓣是如何推薦的。
當你在豆瓣電影中將一些你看過的或是感興趣的電影加入你看過和想看的列表裏,併爲它們作相應的評分,這時豆瓣的推薦引擎已經拿到你的一些偏好信息,那麼它將給你展現如圖 8 的電影推薦。
豆瓣的推薦是經過「豆瓣猜」,爲了讓用戶清楚這些推薦是如何來的,豆瓣還給出了「豆瓣猜」的一個簡要的介紹。
「你的我的推薦是根據你的收藏和評價自動得出的,每一個人的推薦清單都不一樣。你的收藏和評價越多,豆瓣給你的推薦會越準確和豐富。
天天推薦的內容可能會有變化。隨着豆瓣的長大,給你推薦的內容也會愈來愈準。」
這一點讓咱們能夠清晰明瞭的知道,豆瓣必然是基於社會化的協同過濾的推薦,這樣用戶越多,用戶的反饋越多,那麼推薦的效果會愈來愈準確。
相對於 Amazon 的用戶行爲模型,豆瓣電影的模型更加簡單,就是「看過」和「想看」,這也讓他們的推薦更加專一於用戶的品味,畢竟買東西和看電影的動機仍是有很大不一樣的。
另外,豆瓣也有基於物品自己的推薦,當你查看一些電影的詳細信息的時候,他會給你推薦出「喜歡這個電影的人也喜歡的電影」, 如圖 10,這是一個基於協同過濾的應用。