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