探索推薦引擎內(nèi)部的秘密:推薦引擎初探
![](http://image.woshipm.com/wp-files/img/90.jpg)
“探索推薦引擎內(nèi)部的秘密”系列將帶領(lǐng)讀者從淺入深的學(xué)習(xí)探索推薦引擎的機(jī)制,實現(xiàn)方法,其中還涉及一些基本的優(yōu)化方法,例如聚類和分類的應(yīng)用。同時在理論講解的基礎(chǔ)上,還會結(jié)合 Apache Mahout 介紹如何在大規(guī)模數(shù)據(jù)上實現(xiàn)各種推薦策略,進(jìn)行策略優(yōu)化,構(gòu)建高效的推薦引擎的方法。本文作為這個系列的第一篇文章,將深入介紹推薦引擎的工作原理,和其中涉及的各種推薦機(jī)制,以及它們各自的優(yōu)缺點和適用場景,幫助用戶清楚的了解和快速構(gòu)建適合自己的推薦引擎。
信息發(fā)現(xiàn)
如今已經(jīng)進(jìn)入了一個數(shù)據(jù)爆炸的時代,隨著 Web 2.0 的發(fā)展, Web 已經(jīng)變成數(shù)據(jù)分享的平臺,那么,如何讓人們在海量的數(shù)據(jù)中想要找到他們需要的信息將變得越來越難。
在這樣的情形下,搜索引擎(Google,Bing,百度等等)成為大家快速找到目標(biāo)信息的最好途徑。在用戶對自己需求相對明確的時候,用搜索引擎很方便的通過關(guān)鍵字搜索很快的找到自己需要的信息。但搜索引擎并不能完全滿足用戶對信息發(fā)現(xiàn)的需求,那是因為在很多情況下,用戶其實并不明確自己的需要,或者他們的需求很難用簡單的關(guān)鍵字來表述。又或者他們需要更加符合他們個人口味和喜好的結(jié)果,因此出現(xiàn)了推薦系統(tǒng),與搜索引擎對應(yīng),大家也習(xí)慣稱它為推薦引擎。
隨著推薦引擎的出現(xiàn),用戶獲取信息的方式從簡單的目標(biāo)明確的數(shù)據(jù)的搜索轉(zhuǎn)換到更高級更符合人們使用習(xí)慣的信息發(fā)現(xiàn)。
如今,隨著推薦技術(shù)的不斷發(fā)展,推薦引擎已經(jīng)在電子商務(wù) (E-commerce,例如 Amazon,當(dāng)當(dāng)網(wǎng) ) 和一些基于 social 的社會化站點 ( 包括音樂,電影和圖書分享,例如豆瓣,Mtime 等 ) 都取得很大的成功。這也進(jìn)一步的說明了,Web2.0 環(huán)境下,在面對海量的數(shù)據(jù),用戶需要這種更加智能的,更加了解他們需求,口味和喜好的信息發(fā)現(xiàn)機(jī)制。
推薦引擎
前面介紹了推薦引擎對于現(xiàn)在的 Web2.0 站點的重要意義,這一章我們將講講推薦引擎到底是怎么工作的。推薦引擎利用特殊的信息過濾技術(shù),將不同的物品或內(nèi)容推薦給可能對它們感興趣的用戶。
圖 1. 推薦引擎工作原理圖
圖 1 給出了推薦引擎的工作原理圖,這里先將推薦引擎看作黑盒,它接受的輸入是推薦的數(shù)據(jù)源,一般情況下,推薦引擎所需要的數(shù)據(jù)源包括:
- 要推薦物品或內(nèi)容的元數(shù)據(jù),例如關(guān)鍵字,基因描述等;
- 系統(tǒng)用戶的基本信息,例如性別,年齡等
- 用戶對物品或者信息的偏好,根據(jù)應(yīng)用本身的不同,可能包括用戶對物品的評分,用戶查看物品的記錄,用戶的購買記錄等。其實這些用戶的偏好信息可以分為兩類:
- 顯式的用戶反饋:這類是用戶在網(wǎng)站上自然瀏覽或者使用網(wǎng)站以外,顯式的提供反饋信息,例如用戶對物品的評分,或者對物品的評論。
- 隱式的用戶反饋:這類是用戶在使用網(wǎng)站是產(chǎn)生的數(shù)據(jù),隱式的反應(yīng)了用戶對物品的喜好,例如用戶購買了某物品,用戶查看了某物品的信息等等。
顯式的用戶反饋能準(zhǔn)確的反應(yīng)用戶對物品的真實喜好,但需要用戶付出額外的代價,而隱式的用戶行為,通過一些分析和處理,也能反映用戶的喜好,只是數(shù)據(jù)不是很精確,有些行為的分析存在較大的噪音。但只要選擇正確的行為特征,隱式的用戶反饋也能得到很好的效果,只是行為特征的選擇可能在不同的應(yīng)用中有很大的不同,例如在電子商務(wù)的網(wǎng)站上,購買行為其實就是一個能很好表現(xiàn)用戶喜好的隱式反饋。
推薦引擎根據(jù)不同的推薦機(jī)制可能用到數(shù)據(jù)源中的一部分,然后根據(jù)這些數(shù)據(jù),分析出一定的規(guī)則或者直接對用戶對其他物品的喜好進(jìn)行預(yù)測計算。這樣推薦引擎可以在用戶進(jìn)入的時候給他推薦他可能感興趣的物品。
推薦引擎的分類
推薦引擎的分類可以根據(jù)很多指標(biāo),下面我們一一介紹一下:
- 推薦引擎是不是為不同的用戶推薦不同的數(shù)據(jù)根據(jù)這個指標(biāo),推薦引擎可以分為基于大眾行為的推薦引擎和個性化推薦引擎
- 根據(jù)大眾行為的推薦引擎,對每個用戶都給出同樣的推薦,這些推薦可以是靜態(tài)的由系統(tǒng)管理員人工設(shè)定的,或者基于系統(tǒng)所有用戶的反饋統(tǒng)計計算出的當(dāng)下比較流行的物品。
- 個性化推薦引擎,對不同的用戶,根據(jù)他們的口味和喜好給出更加精確的推薦,這時,系統(tǒng)需要了解需推薦內(nèi)容和用戶的特質(zhì),或者基于社會化網(wǎng)絡(luò),通過找到與當(dāng)前用戶相同喜好的用戶,實現(xiàn)推薦。
這是一個最基本的推薦引擎分類,其實大部分人們討論的推薦引擎都是將個性化的推薦引擎,因為從根本上說,只有個性化的推薦引擎才是更加智能的信息發(fā)現(xiàn)過程。
- 根據(jù)推薦引擎的數(shù)據(jù)源其實這里講的是如何發(fā)現(xiàn)數(shù)據(jù)的相關(guān)性,因為大部分推薦引擎的工作原理還是基于物品或者用戶的相似集進(jìn)行推薦。那么參考圖 1 給出的推薦系統(tǒng)原理圖,根據(jù)不同的數(shù)據(jù)源發(fā)現(xiàn)數(shù)據(jù)相關(guān)性的方法可以分為以下幾種:
- 根據(jù)系統(tǒng)用戶的基本信息發(fā)現(xiàn)用戶的相關(guān)程度,這種被稱為基于人口統(tǒng)計學(xué)的推薦(Demographic-based Recommendation)
- 根據(jù)推薦物品或內(nèi)容的元數(shù)據(jù),發(fā)現(xiàn)物品或者內(nèi)容的相關(guān)性,這種被稱為基于內(nèi)容的推薦(Content-based Recommendation)
- 根據(jù)用戶對物品或者信息的偏好,發(fā)現(xiàn)物品或者內(nèi)容本身的相關(guān)性,或者是發(fā)現(xiàn)用戶的相關(guān)性,這種被稱為基于協(xié)同過濾的推薦(Collaborative Filtering-based Recommendation)。
- 根據(jù)推薦模型的建立方式可以想象在海量物品和用戶的系統(tǒng)中,推薦引擎的計算量是相當(dāng)大的,要實現(xiàn)實時的推薦務(wù)必需要建立一個推薦模型,關(guān)于推薦模型的建立方式可以分為以下幾種:
- 基于物品和用戶本身的,這種推薦引擎將每個用戶和每個物品都當(dāng)作獨立的實體,預(yù)測每個用戶對于每個物品的喜好程度,這些信息往往是用一個二維矩陣描述的。由于用戶感興趣的物品遠(yuǎn)遠(yuǎn)小于總物品的數(shù)目,這樣的模型導(dǎo)致大量的數(shù)據(jù)空置,即我們得到的二維矩陣往往是一個很大的稀疏矩陣。同時為了減小計算量,我們可以對物品和用戶進(jìn)行聚類, 然后記錄和計算一類用戶對一類物品的喜好程度,但這樣的模型又會在推薦的準(zhǔn)確性上有損失。
- 基于關(guān)聯(lián)規(guī)則的推薦(Rule-based Recommendation):關(guān)聯(lián)規(guī)則的挖掘已經(jīng)是數(shù)據(jù)挖掘中的一個經(jīng)典的問題,主要是挖掘一些數(shù)據(jù)的依賴關(guān)系,典型的場景就是“購物籃問題”,通過關(guān)聯(lián)規(guī)則的挖掘,我們可以找到哪些物品經(jīng)常被同時購買,或者用戶購買了一些物品后通常會購買哪些其他的物品,當(dāng)我們挖掘出這些關(guān)聯(lián)規(guī)則之后,我們可以基于這些規(guī)則給用戶進(jìn)行推薦。
- 基于模型的推薦(Model-based Recommendation):這是一個典型的機(jī)器學(xué)習(xí)的問題,可以將已有的用戶喜好信息作為訓(xùn)練樣本,訓(xùn)練出一個預(yù)測用戶喜好的模型,這樣以后用戶在進(jìn)入系統(tǒng),可以基于此模型計算推薦。這種方法的問題在于如何將用戶實時或者近期的喜好信息反饋給訓(xùn)練好的模型,從而提高推薦的準(zhǔn)確度。
其實在現(xiàn)在的推薦系統(tǒng)中,很少有只使用了一個推薦策略的推薦引擎,一般都是在不同的場景下使用不同的推薦策略從而達(dá)到最好的推薦效果,例如 Amazon 的推薦,它將基于用戶本身歷史購買數(shù)據(jù)的推薦,和基于用戶當(dāng)前瀏覽的物品的推薦,以及基于大眾喜好的當(dāng)下比較流行的物品都在不同的區(qū)域推薦給用戶,讓用戶可以從全方位的推薦中找到自己真正感興趣的物品。
深入推薦機(jī)制
這一章的篇幅,將詳細(xì)介紹各個推薦機(jī)制的工作原理,它們的優(yōu)缺點以及應(yīng)用場景。
基于人口統(tǒng)計學(xué)的推薦
基于人口統(tǒng)計學(xué)的推薦機(jī)制(Demographic-based Recommendation)是一種最易于實現(xiàn)的推薦方法,它只是簡單的根據(jù)系統(tǒng)用戶的基本信息發(fā)現(xiàn)用戶的相關(guān)程度,然后將相似用戶喜愛的其他物品推薦給當(dāng)前用戶,圖 2 給出了這種推薦的工作原理。
圖 2. 基于人口統(tǒng)計學(xué)的推薦機(jī)制的工作原理
從圖中可以很清楚的看到,首先,系統(tǒng)對每個用戶都有一個用戶 Profile 的建模,其中包括用戶的基本信息,例如用戶的年齡,性別等等;然后,系統(tǒng)會根據(jù)用戶的 Profile 計算用戶的相似度,可以看到用戶 A 的 Profile 和用戶 C 一樣,那么系統(tǒng)會認(rèn)為用戶 A 和 C 是相似用戶,在推薦引擎中,可以稱他們是“鄰居”;最后,基于“鄰居”用戶群的喜好推薦給當(dāng)前用戶一些物品,圖中將用戶 A 喜歡的物品 A 推薦給用戶 C。
這種基于人口統(tǒng)計學(xué)的推薦機(jī)制的好處在于:
- 因為不使用當(dāng)前用戶對物品的喜好歷史數(shù)據(jù),所以對于新用戶來講沒有“冷啟動(Cold Start)”的問題。
- 這個方法不依賴于物品本身的數(shù)據(jù),所以這個方法在不同物品的領(lǐng)域都可以使用,它是領(lǐng)域獨立的(domain-independent)。
那么這個方法的缺點和問題是什么呢?這種基于用戶的基本信息對用戶進(jìn)行分類的方法過于粗糙,尤其是對品味要求較高的領(lǐng)域,比如圖書,電影和音樂等領(lǐng)域,無法得到很好的推薦效果??赡茉谝恍╇娮由虅?wù)的網(wǎng)站中,這個方法可以給出一些簡單的推薦。另外一個局限是,這個方法可能涉及到一些與信息發(fā)現(xiàn)問題本身無關(guān)卻比較敏感的信息,比如用戶的年齡等,這些用戶信息不是很好獲取。
基于內(nèi)容的推薦
基于內(nèi)容的推薦是在推薦引擎出現(xiàn)之初應(yīng)用最為廣泛的推薦機(jī)制,它的核心思想是根據(jù)推薦物品或內(nèi)容的元數(shù)據(jù),發(fā)現(xiàn)物品或者內(nèi)容的相關(guān)性,然后基于用戶以往的喜好記錄,推薦給用戶相似的物品。圖 3 給出了基于內(nèi)容推薦的基本原理。
圖 3. 基于內(nèi)容推薦機(jī)制的基本原理
圖 3 中給出了基于內(nèi)容推薦的一個典型的例子,電影推薦系統(tǒng),首先我們需要對電影的元數(shù)據(jù)有一個建模,這里只簡單的描述了一下電影的類型;然后通過電影的元數(shù)據(jù)發(fā)現(xiàn)電影間的相似度,因為類型都是“愛情,浪漫”電影 A 和 C 被認(rèn)為是相似的電影(當(dāng)然,只根據(jù)類型是不夠的,要得到更好的推薦,我們還可以考慮電影的導(dǎo)演,演員等等);最后實現(xiàn)推薦,對于用戶 A,他喜歡看電影 A,那么系統(tǒng)就可以給他推薦類似的電影 C。
這種基于內(nèi)容的推薦機(jī)制的好處在于它能很好的建模用戶的口味,能提供更加精確的推薦。但它也存在以下幾個問題:
- 需要對物品進(jìn)行分析和建模,推薦的質(zhì)量依賴于對物品模型的完整和全面程度。在現(xiàn)在的應(yīng)用中我們可以觀察到關(guān)鍵詞和標(biāo)簽(Tag)被認(rèn)為是描述物品元數(shù)據(jù)的一種簡單有效的方法。
- 物品相似度的分析僅僅依賴于物品本身的特征,這里沒有考慮人對物品的態(tài)度。
- 因為需要基于用戶以往的喜好歷史做出推薦,所以對于新用戶有“冷啟動”的問題。
雖然這個方法有很多不足和問題,但他還是成功的應(yīng)用在一些電影,音樂,圖書的社交站點,有些站點還請專業(yè)的人員對物品進(jìn)行基因編碼,比如潘多拉,在一份報告中說道,在潘多拉的推薦引擎中,每首歌有超過 100 個元數(shù)據(jù)特征,包括歌曲的風(fēng)格,年份,演唱者等等。
基于協(xié)同過濾的推薦
隨著 Web2.0 的發(fā)展,Web 站點更加提倡用戶參與和用戶貢獻(xiàn),因此基于協(xié)同過濾的推薦機(jī)制因運而生。它的原理很簡單,就是根據(jù)用戶對物品或者信息的偏好,發(fā)現(xiàn)物品或者內(nèi)容本身的相關(guān)性,或者是發(fā)現(xiàn)用戶的相關(guān)性,然后再基于這些關(guān)聯(lián)性進(jìn)行推薦?;趨f(xié)同過濾的推薦可以分為三個子類:基于用戶的推薦(User-based Recommendation),基于項目的推薦(Item-based Recommendation)和基于模型的推薦(Model-based Recommendation)。下面我們一個一個詳細(xì)的介紹著三種協(xié)同過濾的推薦機(jī)制。
基于用戶的協(xié)同過濾推薦
基于用戶的協(xié)同過濾推薦的基本原理是,根據(jù)所有用戶對物品或者信息的偏好,發(fā)現(xiàn)與當(dāng)前用戶口味和偏好相似的“鄰居”用戶群,在一般的應(yīng)用中是采用計算“K- 鄰居”的算法;然后,基于這 K 個鄰居的歷史偏好信息,為當(dāng)前用戶進(jìn)行推薦。下圖 4 給出了原理圖。
圖 4. 基于用戶的協(xié)同過濾推薦機(jī)制的基本原理
上圖示意出基于用戶的協(xié)同過濾推薦機(jī)制的基本原理,假設(shè)用戶 A 喜歡物品 A,物品 C,用戶 B 喜歡物品 B,用戶 C 喜歡物品 A ,物品 C 和物品 D;從這些用戶的歷史喜好信息中,我們可以發(fā)現(xiàn)用戶 A 和用戶 C 的口味和偏好是比較類似的,同時用戶 C 還喜歡物品 D,那么我們可以推斷用戶 A 可能也喜歡物品 D,因此可以將物品 D 推薦給用戶 A。
基于用戶的協(xié)同過濾推薦機(jī)制和基于人口統(tǒng)計學(xué)的推薦機(jī)制都是計算用戶的相似度,并基于“鄰居”用戶群計算推薦,但它們所不同的是如何計算用戶的相似度,基于人口統(tǒng)計學(xué)的機(jī)制只考慮用戶本身的特征,而基于用戶的協(xié)同過濾機(jī)制可是在用戶的歷史偏好的數(shù)據(jù)上計算用戶的相似度,它的基本假設(shè)是,喜歡類似物品的用戶可能有相同或者相似的口味和偏好。
基于項目的協(xié)同過濾推薦
基于項目的協(xié)同過濾推薦的基本原理也是類似的,只是說它使用所有用戶對物品或者信息的偏好,發(fā)現(xiàn)物品和物品之間的相似度,然后根據(jù)用戶的歷史偏好信息,將類似的物品推薦給用戶,圖 5 很好的詮釋了它的基本原理。
假設(shè)用戶 A 喜歡物品 A 和物品 C,用戶 B 喜歡物品 A,物品 B 和物品 C,用戶 C 喜歡物品 A,從這些用戶的歷史喜好可以分析出物品 A 和物品 C 時比較類似的,喜歡物品 A 的人都喜歡物品 C,基于這個數(shù)據(jù)可以推斷用戶 C 很有可能也喜歡物品 C,所以系統(tǒng)會將物品 C 推薦給用戶 C。
與上面講的類似,基于項目的協(xié)同過濾推薦和基于內(nèi)容的推薦其實都是基于物品相似度預(yù)測推薦,只是相似度計算的方法不一樣,前者是從用戶歷史的偏好推斷,而后者是基于物品本身的屬性特征信息。
圖 5. 基于項目的協(xié)同過濾推薦機(jī)制的基本原理
同時協(xié)同過濾,在基于用戶和基于項目兩個策略中應(yīng)該如何選擇呢?其實基于項目的協(xié)同過濾推薦機(jī)制是 Amazon 在基于用戶的機(jī)制上改良的一種策略,因為在大部分的 Web 站點中,物品的個數(shù)是遠(yuǎn)遠(yuǎn)小于用戶的數(shù)量的,而且物品的個數(shù)和相似度相對比較穩(wěn)定,同時基于項目的機(jī)制比基于用戶的實時性更好一些。但也不是所有的場景都是這樣的情況,可以設(shè)想一下在一些新聞推薦系統(tǒng)中,也許物品,也就是新聞的個數(shù)可能大于用戶的個數(shù),而且新聞的更新程度也有很快,所以它的形似度依然不穩(wěn)定。所以,其實可以看出,推薦策略的選擇其實和具體的應(yīng)用場景有很大的關(guān)系。
基于模型的協(xié)同過濾推薦
基于模型的協(xié)同過濾推薦就是基于樣本的用戶喜好信息,訓(xùn)練一個推薦模型,然后根據(jù)實時的用戶喜好的信息進(jìn)行預(yù)測,計算推薦。
基于協(xié)同過濾的推薦機(jī)制是現(xiàn)今應(yīng)用最為廣泛的推薦機(jī)制,它有以下幾個顯著的優(yōu)點:
- 它不需要對物品或者用戶進(jìn)行嚴(yán)格的建模,而且不要求物品的描述是機(jī)器可理解的,所以這種方法也是領(lǐng)域無關(guān)的。
- 這種方法計算出來的推薦是開放的,可以共用他人的經(jīng)驗,很好的支持用戶發(fā)現(xiàn)潛在的興趣偏好
而它也存在以下幾個問題:
- 方法的核心是基于歷史數(shù)據(jù),所以對新物品和新用戶都有“冷啟動”的問題。
- 推薦的效果依賴于用戶歷史偏好數(shù)據(jù)的多少和準(zhǔn)確性。
- 在大部分的實現(xiàn)中,用戶歷史偏好是用稀疏矩陣進(jìn)行存儲的,而稀疏矩陣上的計算有些明顯的問題,包括可能少部分人的錯誤偏好會對推薦的準(zhǔn)確度有很大的影響等等。
- 對于一些特殊品味的用戶不能給予很好的推薦。
- 由于以歷史數(shù)據(jù)為基礎(chǔ),抓取和建模用戶的偏好后,很難修改或者根據(jù)用戶的使用演變,從而導(dǎo)致這個方法不夠靈活。
混合的推薦機(jī)制
在現(xiàn)行的 Web 站點上的推薦往往都不是單純只采用了某一種推薦的機(jī)制和策略,他們往往是將多個方法混合在一起,從而達(dá)到更好的推薦效果。關(guān)于如何組合各個推薦機(jī)制,這里講幾種比較流行的組合方法。
- 加權(quán)的混合(Weighted Hybridization): 用線性公式(linear formula)將幾種不同的推薦按照一定權(quán)重組合起來,具體權(quán)重的值需要在測試數(shù)據(jù)集上反復(fù)實驗,從而達(dá)到最好的推薦效果。
- 切換的混合(Switching Hybridization):前面也講到,其實對于不同的情況(數(shù)據(jù)量,系統(tǒng)運行狀況,用戶和物品的數(shù)目等),推薦策略可能有很大的不同,那么切換的混合方式,就是允許在不同的情況下,選擇最為合適的推薦機(jī)制計算推薦。
- 分區(qū)的混合(Mixed Hybridization):采用多種推薦機(jī)制,并將不同的推薦結(jié)果分不同的區(qū)顯示給用戶。其實,Amazon,當(dāng)當(dāng)網(wǎng)等很多電子商務(wù)網(wǎng)站都是采用這樣的方式,用戶可以得到很全面的推薦,也更容易找到他們想要的東西。
- 分層的混合(Meta-Level Hybridization): 采用多種推薦機(jī)制,并將一個推薦機(jī)制的結(jié)果作為另一個的輸入,從而綜合各個推薦機(jī)制的優(yōu)缺點,得到更加準(zhǔn)確的推薦。
趙晨婷,現(xiàn)就職于 IBM 中國軟件開發(fā)中心 Web 2.0 開發(fā)小組,對 SOA,J2EE,Web 2.0 應(yīng)用的開發(fā)有豐富的經(jīng)驗。主要關(guān)注點在數(shù)據(jù)處理,數(shù)據(jù)搜索,推薦算法和推薦系統(tǒng)設(shè)計等。
馬春娥,工作在 IBM CSDL web2.0 team,開發(fā)人員,曾參與 Project Zero 和 Lotus Mashup Center 的開發(fā)。主要的關(guān)注點在 web2.0 領(lǐng)域的數(shù)據(jù)的建模,數(shù)據(jù)的處理,數(shù)據(jù)的可視化,Web2.0 領(lǐng)域的數(shù)據(jù)的語義,數(shù)據(jù)的關(guān)聯(lián)等。
來源:http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html?ca=drs-
- 目前還沒評論,等你發(fā)揮!