如果說(shuō)過(guò)去的十年是搜索技術(shù)大行其道的十年,那么個(gè)性化推薦技術(shù)將成為未來(lái)十年中最重要的革新之一。目前幾乎所有大型的電子商務(wù)系統(tǒng),如Amazon、CDNOW、Netflix等,都不同程度地使用了各種形式的推薦系統(tǒng)。而近來(lái)以“發(fā)現(xiàn)”為核心的網(wǎng)站正開(kāi)始在互聯(lián)網(wǎng)上嶄露頭角,比如側(cè)重于音樂(lè)推薦的八寶盒,側(cè)重于圖書(shū)推薦的豆瓣等等。
那么,一個(gè)好的推薦系統(tǒng)需要滿足什么目標(biāo)呢?
個(gè)性化推薦系統(tǒng)必須能夠基于用戶之前的口味和喜好提供相關(guān)的精確的推薦,而且這種口味和喜歡的收集必須盡量少的需要用戶的勞動(dòng)。推薦的結(jié)果必須能夠?qū)崟r(shí)計(jì)算,這樣才能夠在用戶離開(kāi)網(wǎng)站前之前獲得推薦的內(nèi)容,并且及時(shí)的對(duì)推薦結(jié)果作出反饋。實(shí)時(shí)性也是推薦系統(tǒng)與通常的數(shù)據(jù)挖掘技術(shù)顯著不同的一個(gè)特點(diǎn)。
一個(gè)完整的推薦系統(tǒng)由三部分構(gòu)成:行為記錄模塊、模型分析模塊和推薦模塊。行為記錄模塊負(fù)責(zé)記錄能夠體現(xiàn)用戶喜好的行為,比如購(gòu)買、下載、評(píng)分等。這部分看起來(lái)簡(jiǎn)單,其實(shí)需要非常仔細(xì)的設(shè)計(jì)。比如說(shuō)購(gòu)買和評(píng)分這兩種行為表達(dá)潛在的喜好程度就不盡相同完善的行為記錄需要能夠綜合多種不同的用戶行為,處理不同行為的累加。模型分析模塊的功能則實(shí)現(xiàn)了對(duì)用戶行為記錄的分析,采用不同算法建立起模型描述用戶的喜好信息。最后,通過(guò)推薦模塊,實(shí)時(shí)的從內(nèi)容集篩選出目標(biāo)用戶可能會(huì)感興趣的內(nèi)容推薦給用戶。因此,除了推薦系統(tǒng)本身,為了實(shí)現(xiàn)推薦,還需要一個(gè)可供推薦的內(nèi)容集。比如,對(duì)于音樂(lè)推薦系統(tǒng)來(lái)說(shuō),一個(gè)音樂(lè)庫(kù)就是這樣的內(nèi)容集。我們對(duì)內(nèi)容集本身需要提供的信息要求非常低,在經(jīng)典的協(xié)同過(guò)濾算法下,內(nèi)容集甚至只需要提供ID就足夠。而對(duì)于基于內(nèi)容的推薦系統(tǒng)來(lái)說(shuō),由于往往需要對(duì)內(nèi)容進(jìn)行特征抽取和索引,我們就會(huì)需要提供更多的領(lǐng)域知識(shí)和內(nèi)容屬性。這種情況下,還是拿音樂(lè)舉例,歌手、流派之類的屬性和音頻信息就成為必需的內(nèi)容集信息。
迄今為止在個(gè)性化推薦系統(tǒng)中,協(xié)同過(guò)濾(Collaborative Filtering)技術(shù)是應(yīng)用最成功的技術(shù)。目前國(guó)內(nèi)外互聯(lián)網(wǎng)上有許多大型網(wǎng)站已經(jīng)應(yīng)用這項(xiàng)技術(shù)為用戶更加智能的推薦內(nèi)容。如果你想要研究協(xié)同過(guò)濾,一定不能錯(cuò)過(guò)MovieLens(
http://movielens.umn.edu/)。它是協(xié)同過(guò)濾最著名的研究項(xiàng)目之一。
第一代的協(xié)同過(guò)濾技術(shù),又被稱為基于用戶(User-based)的協(xié)同過(guò)濾?;谟脩舻膮f(xié)同過(guò)濾,基本原理是基于用戶行為選擇的相關(guān)性。用戶的行為選擇這里指的是下載、購(gòu)買、評(píng)價(jià)等等能夠顯式或者隱式體現(xiàn)出用戶喜好的行為。在一個(gè)典型的基于協(xié)同過(guò)濾技術(shù)的推薦系統(tǒng)中,輸入數(shù)據(jù)通??梢员硎鰹橐粋€(gè)m×n 的用戶內(nèi)容矩陣R,m是用戶數(shù),n是內(nèi)容數(shù)。矩陣的值與內(nèi)容的類型有關(guān),通常由行為記錄模塊決定。如果內(nèi)容是網(wǎng)上書(shū)店中的書(shū),則矩陣的值可以表示用戶購(gòu)買與否,例如1表示購(gòu)買,0表示沒(méi)有購(gòu)買;或者表示用戶對(duì)它的評(píng)價(jià)有多高,這樣的評(píng)價(jià)值就可以有幾個(gè)等級(jí),比如常見(jiàn)的1~5級(jí)評(píng)價(jià)制。
基于用戶的協(xié)同過(guò)濾,通過(guò)比較目標(biāo)用戶的一系列行為選擇和其他用戶之間的相似性,來(lái)識(shí)別出一組相互具有類似喜好的用戶,又可以稱為“同好”。一旦系統(tǒng)能夠識(shí)別一個(gè)用戶的同好用戶,就能夠?qū)⑺麄冏罡信d趣的內(nèi)容作為當(dāng)前用戶的推薦結(jié)果推薦給這個(gè)用戶。也就是說(shuō),以前的行為選擇與你相似的用戶,在以后的行為中很可能也會(huì)和你相似。因此將這些用戶做為基準(zhǔn)來(lái)向你推薦內(nèi)容。
協(xié)同過(guò)濾的核心問(wèn)題是尋找與目標(biāo)用戶興趣相近的一組用戶。這種相似用戶通常被稱為最近鄰居(Nearest Neighbor)。用戶之間的相似度是通過(guò)比較兩個(gè)用戶的行為選擇矢量得到的。目前,比較行為選擇矢量的相似度計(jì)算方法有許多種,比較經(jīng)典的算法包括泊松相關(guān)系數(shù)(Person Correlation Coefficient)和余弦相似性(Cosine-based Similarity)。
“最近鄰居”產(chǎn)生后,我們就能夠計(jì)算得到用戶最可能感興趣的內(nèi)容集(也叫做TopN推薦集)。為了得到推薦集,分別統(tǒng)計(jì)“最近鄰居”中的用戶對(duì)不同內(nèi)容的興趣度,取其中排在最前面的內(nèi)容作為推薦集。下面是一個(gè)簡(jiǎn)化的示例:假如用戶張三有兩個(gè)同好:李四和王五。
張三喜歡看電影A;
李四喜歡看電影A,B,C和D;
王五喜歡看電影A,B,D,E和F;
這樣,推薦系統(tǒng)就能夠過(guò)濾出相似用戶都喜歡的電影B和D作為張三最可能也會(huì)喜歡的電影推薦給張三。
基于用戶的協(xié)同過(guò)濾技術(shù)在個(gè)性化推薦系統(tǒng)中獲得了極大的成功,但它有自身的局限性。推薦集的產(chǎn)生方式意味著一個(gè)內(nèi)容只有已經(jīng)被用戶選擇(購(gòu)買)后才有機(jī)會(huì)被推薦給其他用戶。對(duì)于一個(gè)網(wǎng)上書(shū)店來(lái)說(shuō),新上架的書(shū)因?yàn)檫€沒(méi)有被相當(dāng)數(shù)量的用戶購(gòu)買或者評(píng)價(jià)的記錄,便很少有機(jī)會(huì)被用戶的“最近鄰居”篩選進(jìn)入推薦集。這個(gè)問(wèn)題,也被稱之為協(xié)同過(guò)濾的“冷啟動(dòng)”問(wèn)題。
此外,因?yàn)橛?jì)算用戶的相似度時(shí),是通過(guò)將目標(biāo)用戶的歷史行為記錄與其他每一個(gè)用戶的記錄相比較得出的,所以對(duì)于一個(gè)現(xiàn)實(shí)的推薦系統(tǒng)來(lái)說(shuō),擴(kuò)展性將成為非常嚴(yán)重的問(wèn)題。設(shè)想一下,對(duì)于一個(gè)擁有上百萬(wàn)用戶的網(wǎng)站來(lái)說(shuō),每計(jì)算一個(gè)用戶都將涉及到上百萬(wàn)次的比較,更不要說(shuō)其中會(huì)帶來(lái)的大量數(shù)據(jù)庫(kù)IO操作的開(kāi)銷。
于是第二代基于內(nèi)容項(xiàng)(Item-based)的協(xié)同過(guò)濾技術(shù)就產(chǎn)生了。與基于用戶的技術(shù)不同的是,這種方法比較的是內(nèi)容項(xiàng)與內(nèi)容項(xiàng)之間的相似度。Item-based 方法同樣需要進(jìn)行三個(gè)步驟獲得推薦:1)得到內(nèi)容項(xiàng)(Item)的歷史評(píng)分?jǐn)?shù)據(jù);2)針對(duì)內(nèi)容項(xiàng)進(jìn)行內(nèi)容項(xiàng)之間的相似度計(jì)算,找到目標(biāo)內(nèi)容項(xiàng)的“最近鄰居”;3)產(chǎn)生推薦。這里內(nèi)容項(xiàng)之間的相似度是通過(guò)比較兩個(gè)內(nèi)容項(xiàng)上的用戶行為選擇矢量得到的。舉個(gè)例子,假設(shè)用戶和內(nèi)容項(xiàng)如下:
| 電影A | 電影B | 電影C | 電影D |
張三 | 喜歡 | | | |
李四 | 喜歡 | 喜歡 | 喜歡 | 喜歡 |
王五 | 不喜歡 | | 不喜歡 | 不喜歡 |
趙六 | 喜歡 | 喜歡 | | 喜歡 |
可以看出,電影A與D是最相似的。因?yàn)閺埲矚gA,所以電影D就可以推薦給張三。
不論是第一代的基于用戶方法,還是第二代的基于內(nèi)容項(xiàng)方法,都不可避免的遇到數(shù)據(jù)稀疏的問(wèn)題。在任何一個(gè)網(wǎng)站中,用戶的評(píng)分記錄或者購(gòu)買記錄,相對(duì)整個(gè)可供選擇的內(nèi)容集來(lái)說(shuō),都是很小的一部分。所以在許多推薦系統(tǒng)中,每個(gè)用戶涉及的數(shù)據(jù)量相當(dāng)有限,在一些大的系統(tǒng)如Amazon中,用戶最多不過(guò)就評(píng)價(jià)過(guò)上百萬(wàn)本書(shū)的1%,造成評(píng)估數(shù)據(jù)相當(dāng)稀疏。當(dāng)用戶評(píng)價(jià)過(guò)的內(nèi)容之間找不到交集時(shí),就難以判斷用戶的口味是否相似,難以找到相似用戶集,導(dǎo)致推薦效果大大降低。為了解決用戶數(shù)據(jù)的稀疏問(wèn)題,最方便的辦法就是將用戶對(duì)沒(méi)有選擇過(guò)的內(nèi)容項(xiàng)的評(píng)分設(shè)為一個(gè)固定的缺省值,例如用戶的平均評(píng)分。針對(duì)如何預(yù)測(cè)遺漏的評(píng)分業(yè)內(nèi)又提出了很多種方法,不過(guò)一般來(lái)說(shuō)采用最簡(jiǎn)單的改進(jìn)方法就可以有效地提高協(xié)同過(guò)濾推薦系統(tǒng)的準(zhǔn)確度。
另外一方面,即便采用了基于內(nèi)容項(xiàng)的方法,在數(shù)據(jù)量巨大的時(shí)候,計(jì)算復(fù)雜度仍然成為性能瓶頸。為了進(jìn)一步解決協(xié)同過(guò)濾技術(shù)的擴(kuò)展性能問(wèn)題,目前比較有效的辦法是在用戶評(píng)分?jǐn)?shù)據(jù)上做一次聚類分析(clustering)。聚類技術(shù)首先將具有相似興趣愛(ài)好的用戶分配到相同的分類中。聚類產(chǎn)生之后,它或者將“最近鄰居”搜索對(duì)象限制在最相近的聚類中,根據(jù)類中其他用戶的評(píng)價(jià)預(yù)測(cè)目標(biāo)用戶的評(píng)價(jià),或者用聚類的中心作為近似提取推薦結(jié)果。由于用戶之間的分類相對(duì)變化比較小,因此聚類過(guò)程往往可以離線進(jìn)行,而無(wú)需實(shí)時(shí)計(jì)算,這樣就大大降低了實(shí)時(shí)推薦的計(jì)算壓力,提高推薦系統(tǒng)的速度。一般來(lái)說(shuō),聚類將用戶分為多少個(gè)類,推薦系統(tǒng)的整體速度就能夠提高多少倍。具體選擇什么樣的聚類算法,又會(huì)因應(yīng)用領(lǐng)域和數(shù)據(jù)的分布特性而不同。如果聚類算法選擇不當(dāng),反而會(huì)降低推薦的準(zhǔn)確性。近年來(lái),推薦系統(tǒng)的算法技術(shù)的發(fā)展也有了一些新的方向,比如SlopeOne,SVD等方法,就不一一列舉了。
在我看來(lái),一個(gè)商用推薦系統(tǒng)的尤其關(guān)鍵之處在于對(duì)海量用戶數(shù)據(jù)的處理。因?yàn)橥扑]系統(tǒng)是數(shù)據(jù)優(yōu)先,數(shù)據(jù)的積累越多對(duì)推薦的精度就越有好處。而當(dāng)用戶的行為數(shù)據(jù)真正積累到上百萬(wàn)甚至上億時(shí),如何在合理時(shí)間內(nèi)得出有效的推薦,就是對(duì)推薦技術(shù)最大的考驗(yàn)。除此之外,一個(gè)優(yōu)秀的推薦系統(tǒng)需要能夠結(jié)合內(nèi)容相似與用戶行為相。傳統(tǒng)的協(xié)同過(guò)濾方法是忽略內(nèi)容本身的屬性的,這一方面固然是對(duì)數(shù)據(jù)要求少的優(yōu)點(diǎn),但另一方面也帶來(lái)了難以避免的“冷啟動(dòng)”問(wèn)題。其實(shí),隨著標(biāo)簽系統(tǒng)在互聯(lián)網(wǎng)上的廣泛應(yīng)用,標(biāo)簽本身就不失為是一種很好的內(nèi)容屬性。如何利用也是值得大家探討的。充分利用到內(nèi)容本身的屬性,將不同的相似性結(jié)合起來(lái),這會(huì)給基于協(xié)同過(guò)濾的推薦技術(shù)帶來(lái)新的動(dòng)力。最后一點(diǎn),設(shè)計(jì)良好的推薦技術(shù)要能夠從用戶對(duì)推薦內(nèi)容的反饋中自行調(diào)整和學(xué)習(xí)。因?yàn)閷?shí)際上每個(gè)用戶對(duì)于推薦的內(nèi)容都有不同的要求,比如有的用戶可能偏好比較熱門的內(nèi)容,有的用戶更愿意發(fā)現(xiàn)冷門的內(nèi)容。針對(duì)不同用戶的反饋來(lái)不斷學(xué)習(xí)每個(gè)用戶的特征,才能夠避免所采用算法本身先天的偏差,獲得較為理想的效果。