與購物網站內部的搜索對應,購物網站通常還會有推薦引擎。由於在不少狀況下,用戶其實並不明確本身的須要,或者他們的需求很難用簡單的關鍵字來表述。又或者他們須要更加符合他們我的口味和喜愛的結果。最先將推薦引擎投入大規模使用的是亞馬遜,它採用了一種關聯推薦機制:當用戶購買了一本書以後,頁面上會出現這樣一個框:你可能對這幾本書也有興趣。 html
根據推薦引擎是否爲不一樣的用戶推薦不一樣的數據可分爲基於大衆行爲的推薦引擎(千人一面)和個性化推薦引擎(相似千人千面),題主說的應該主要是個性化的推薦引擎。算法
a1. 根據大衆行爲的推薦引擎,對每一個用戶都給出一樣的推薦,這些推薦能夠是靜態的由系統管理員人工設定的,或者基於系統全部用戶的反饋統計計算出的當下比較流行的物品。網絡
a2.個性化推薦引擎,對不一樣的用戶,根據他們的口味和喜愛給出更加精確的推薦,這時,系統須要瞭解需推薦內容和用戶的特質,或者基於社會化網絡,經過找到與當前用戶相同喜愛的用戶,實現推薦。學習
1、推薦引擎的工做原理網站
通常狀況下,推薦引擎所須要的數據源包括:編碼
要推薦物品或內容的元數據,例如關鍵字,基因描述等;spa
系統用戶的基本信息,例如性別,年齡等設計
用戶對物品或者信息的偏好,根據應用自己的不一樣,可能包括用戶對物品的評分,用戶查看物品的記錄,用戶的購買記錄等。3d
顯式的用戶反饋能準確的反應用戶對物品的真實喜愛,但須要用戶付出額外的代價,而隱式的用戶行爲,經過一些分析和處理,也能反映用戶的喜愛,只是數據不是很精確,有些行爲的分析存在較大的噪音。但只要選擇正確的行爲特徵,隱式的用戶反饋也能獲得很好的效果,只是行爲特徵的選擇可能在不一樣的應用中有很大的不一樣,例如在電子商務的網站上,購買行爲其實就是一個能很好表現用戶喜愛的隱式反饋。rest
2、個性化推薦引擎的分類
主要根據不一樣的數據源發現數據相關性的方法能夠分爲如下幾種:
1. 基於人口統計學的推薦(Demographic-based Recommendation)
根據系統用戶的基本信息發現用戶的相關程度區分【基於人的背景上的類似度】
好處是適合新用戶、不依賴物品自己數據,
缺點是粗糙且涉及一些敏感我的信息。
2. 基於內容的推薦(Content-based Recommendation)
根據推薦物品或內容的元數據,發現物品或者內容的相關性,【有點愛屋及烏的意思】
這是在推薦引擎出現之初應用最爲普遍的推薦機制,核心思想是根據推薦物品或內容的元數據,發現物品或者內容的相關性,而後基於用戶以往的喜愛記錄,推薦給用戶類似的物品。
【根據物品的相關性和用戶的喜愛記錄推薦類似物品】
即如甲喜歡金庸的武俠,而古龍的書和金庸的武俠像,那麼把古龍的書也推薦給甲。
這種基於內容的推薦機制的好處在於它能很好的建模用戶的口味,能提供更加精確的推薦。也很適用於新產品。
但它也存在如下幾個問題:
·須要對物品進行分析和建模,推薦的質量依賴於對物品模型的完整和全面程度(關鍵詞和標籤Tag被認爲是描述物品元數據的一種簡單有效的方法)——需設定物品的關鍵詞和標籤化
·分析僅僅依賴於物品自己的特徵,沒有考慮人對物品的態度;
·由於須要基於用戶以往的喜愛歷史作出推薦,因此對於新用戶有「冷啓動」的問題,
雖然這個方法有不少不足和問題,但他仍是成功的應用在一些電影,音樂,圖書的社交站點,有些站點還請專業的人員對物品進行基因編碼。
3.基於協同過濾的推薦(Collaborative Filtering-based Recommendation)【有點志趣相投的意思】
根據用戶對物品或者信息的偏好,發現物品或者內容自己的相關性,或者是發現用戶的相關性,而後再基於這些關聯性進行推薦,這種被稱爲基於協同過濾的推薦。
能夠分爲三個子類:基於用戶的推薦、基於商品的推薦和基於模型的推薦。
3.1基於用戶的協同過濾推薦(User-based Recommendation)
基於用戶的協同過濾推薦的基本原理是,根據全部用戶對物品或者信息的偏好,發現與當前用戶口味和偏好類似的「鄰居」用戶羣,在通常的應用中是採用計算「K- 鄰居」的算法;而後,基於這K 個鄰居的歷史偏好信息,爲當前用戶進行推薦。【基於個體偏好而非背景上的人的類似度】
甲乙愛好類似(「鄰居」),且甲喜歡AB,乙喜歡ABC,那麼把C推薦給A(C可能和AB毫無關係)。
——與基於人口統計學的推薦的區別:基於人口統計學的機制只考慮用戶自己的特徵,而基於用戶的協同過濾機制但是在用戶的歷史偏好的數據上計算用戶的類似度,它的基本假設是,喜歡相似物品的用戶可能有相同或者類似的口味和偏好。
3.2基於商品的協同過濾推薦(Item-based Recommendation,又稱基於項目的)
基於商品的協同過濾推薦的基本原理也是相似的,只是說它使用全部用戶對物品或者信息的偏好,發現物品和物品之間的類似度,而後根據用戶的歷史偏好信息,將相似的物品推薦給用戶。【基於全體偏好發現物的類似度,再根據個體偏好推薦】
——與基於內容的推薦的區別:基於內容的推薦僅根據物的類似度,不考慮個體偏好。
即如:發現金庸和古龍的武俠比較類似,甲喜歡金庸和古龍的武俠,而乙喜歡金庸的武俠,那麼把古龍的武俠也推薦給乙(甲乙可能毫無關係)
——與機遇用戶的協同過濾推薦的對比:其實基於商品的協同過濾推薦機制是Amazon 在基於用戶的機制上改良的一種策略,由於在大部分的Web 站點中,物品的個數是遠遠小於用戶的數量的,並且物品的個數和類似度相對比較穩定,同時基於商品的機制比基於用戶的實時性更好一些。但如在一些新聞推薦系統則相反。
3.3基於模型的協同過濾推薦(Model-based Recommendation)
基於模型的協同過濾推薦就是基於樣本的用戶喜愛信息,訓練一個推薦模型,而後根據實時的用戶喜愛的信息進行預測,計算推薦。【降維建模,有點高大上的AI向】
基於用戶和基於商品的協同過濾推薦有一個大問題:它們太死了,就是說,它們能發現都喜歡同同樣東西的人,但卻忽略了愛好很是類似的潛在用戶組合。好比說你喜歡莫奈的睡蓮。那麼,在這個法國印象派大師畫的 250 幅睡蓮中,你最喜歡哪一幅?在一羣喜歡莫奈的人當中,徹底可能每一個人喜歡的睡蓮都不相同,而基本的算法就有可能識別不出這些人都有着共同的愛好。【基於屬性的表象而非內涵?】
此時須要降維(Dimensionality Reduction)的方法。咱們來看看你愛吃的東西,以及如何把它跟其餘一百萬人愛吃的東西作比較。你能夠把這些信息用一個巨型矩陣表示出來,每一條豎線表明同樣食物,每一個人愛吃什麼東西就天然造成了一行。在你的這一行上面或許會顯示你給了烤牛排 5 顆星、紅燒小排 4 星半、烤雞翅 2 顆星、凍豆腐卷 1 顆星、奶酪烤蘑菇 5 顆星、鹽水毛豆 4 顆星,等等。
然而,使用這個矩陣的推薦算法並不關心你給哪一種食物評了多少顆星。它想要了解的是你通常而言的喜愛,這樣它能夠將這個信息應用到更豐富多樣的食物上。好比說,基於你上面給出的信息,算法可能會認爲你喜歡牛肉、鹹的東西和烤制菜品,不喜歡雞肉和任何油炸的東西,不喜歡也不討厭蔬菜,依此類推【降維找到本質!】。你愛吃的食物所擁有的特色或者說維度,它的數量和符合你要求的食物的數量比起來要小得多——至多可能 50 或 100。經過查對這些維度,推薦算法能夠迅速決定你是否會喜歡一種新的食物(比方說鹽焗排骨),方法就是把這種食物的各項維度(鹹的、牛肉作的、不是雞肉、不是炒的、不是蔬菜、不是烤的)同你的資料進行比對。這種更爲通常性的呈現使得推薦算法能準確的發現有着類似但不一樣喜愛的用戶。並且,它大幅壓縮了矩陣的規模,使算法變得更加高效。
不過,你愛吃的食物的維度該上哪兒去找呢?確定不是去問廚師。推薦系統會使用一種稱爲奇異值分解的數學方法來計算維度,這種方法涉及到建立兩個保存原始數據的巨型矩陣,這也是這種方法的主要缺點。建立矩陣所須要的時間會隨着客戶和產品數量的增多而飛速增加——建立一個擁有 2.5 億名客戶和 1000 萬種產品的矩陣,須要花上建立一個 25 萬名客戶和 1 萬種產品的矩陣 10 億倍那麼多的時間。並且這一過程還須要常常重複。一旦收到新的評分,矩陣就已通過時;在像亞馬遜這樣的公司,每一秒鐘都會收到新的評論。幸運的是,就算略微過期,矩陣仍然能以一個挺不錯的水平運做。研究人員們也已經在設計新的算法,爲奇異值分解提供可用的近似值並顯著縮短計算時間。
基於協同過濾的推薦應用最普遍,而它也存在如下幾個問題:
方法的核心是基於歷史數據,因此對新物品和新用戶都有「冷啓動」的問題。
推薦的效果依賴於用戶歷史偏好數據的多少和準確性。
在大部分的實現中,用戶歷史偏好是用稀疏矩陣進行存儲的,而稀疏矩陣上的計算有些明顯的問題,包括可能少部分人的錯誤偏好會對推薦的準確度有很大的影響等等。
對於一些特殊品味的用戶不能給予很好的推薦。
因爲以歷史數據爲基礎,抓取和建模用戶的偏好後,很難修改或者根據用戶的使用演變,從而致使這個方法不夠靈活。
3.1 Amazon
Amazon 做爲推薦引擎的鼻祖,其推薦的核心是經過數據挖掘算法和比較用戶的消費偏好與其餘用戶進行對比,藉以預測用戶可能感興趣的商品。Amazon 採用的是分區的混合的機制,並將不一樣的推薦結果分不一樣的區顯示給用戶。
今日推薦(Today's Recommendation For You): 一般是根據用戶的近期的歷史購買或者查看記錄,並結合時下流行的物品給出一個折中的推薦。
新產品的推薦(New For You): 採用了基於內容的推薦機制(Content-based Recommendation),將一些新到物品推薦給用戶。在方法選擇上因爲新物品沒有大量的用戶喜愛信息,因此基於內容的推薦能很好的解決這個「冷啓動」的問題。
捆綁銷售(Frequently Bought Together): 採用數據挖掘技術對用戶的購買行爲進行分析,找到常常被一塊兒或同一我的購買的物品集,進行捆綁銷售,這是一種典型的基於項目的協同過濾推薦機制。
別人購買/ 瀏覽的商品(Customers Who Bought/See This Item Also Bought/See): 這也是一個典型的基於項目的協同過濾推薦的應用,經過社會化機制用戶能更快更方便的找到本身感興趣的物品。
另外,Amazon 不少推薦是基於用戶的profile 計算出來的,用戶的profile 中記錄了用戶在Amazon 上的行爲,包括看了那些物品,買了那些物品,收藏夾和wish list 裏的物品等等,固然Amazon 裏還集成了評分等其餘的用戶反饋的方式,它們都是profile 的一部分,同時,Amazon 提供了讓用戶自主管理本身profile 的功能,經過這種方式用戶能夠更明確的告訴推薦引擎他的品味和意圖是什麼。
3.2 豆瓣
豆瓣的推薦是經過「豆瓣猜」,官方介紹——"你的我的推薦是根據你的收藏和評價自動得出的,每一個人的推薦清單都不一樣。你的收藏和評價越多,豆瓣給你的推薦會越準確和豐富。天天推薦的內容可能會有變化。隨着豆瓣的長大,給你推薦的內容也會愈來愈準。」
這一點讓咱們能夠清晰明瞭的知道,豆瓣必然是基於社會化的協同過濾的推薦,這樣用戶越多,用戶的反饋越多,那麼推薦的效果會愈來愈準確。
相對於Amazon 的用戶行爲模型,豆瓣電影的模型更加簡單,就是「看過」和「想看」,這也讓他們的推薦更加專一於用戶的品味,畢竟買東西和看電影的動機仍是有很大不一樣的。
另外,豆瓣也有基於物品自己的推薦,當你查看一些電影的詳細信息的時候,他會給你推薦出「喜歡這個電影的人也喜歡的電影」,這是一個基於協同過濾的應用。