推薦算法概覽(一)為推薦系統(tǒng)選擇正確的推薦算法非常重要,而可用的算法很多,想要找到最適合所處理問(wèn)題的算法還是很有難度的。這些算法每種都各有優(yōu)劣,也各有局限,因此在作出決策前我們應(yīng)當(dāng)對(duì)其做以衡量。在實(shí)踐中,我們很可能需要測(cè)試多種算法,以便找出最適合用戶的那種;了解這些算法的概念以及工作原理,對(duì)它們有個(gè)直觀印象將會(huì)很有幫助。 推薦算法通常是在推薦模型中實(shí)現(xiàn)的,而推薦模型會(huì)負(fù)責(zé)收集諸如用戶偏好、物品描述這些可用作推薦憑借的數(shù)據(jù),據(jù)此預(yù)測(cè)特定用戶組可能感興趣的物品。 主要的推薦算法系列有四個(gè)(表格1-4):
此外,還有很多高級(jí)或非傳統(tǒng)的方式,可參見表格5。 本文是系列文中的第一篇,將會(huì)以表格形式來(lái)介紹推薦算法的主要分類,包括算法簡(jiǎn)介、典型的輸入內(nèi)容、常見的形式及其優(yōu)劣。在系列文的第二與第三篇中,我們將會(huì)更詳細(xì)地介紹各種算法的不同,以便讓大家更深入地理解其工作原理。本文的某些內(nèi)容是基于一篇2014年的推薦算法2014教程《推薦問(wèn)題再探(Recommender Problem Revisited)》來(lái)撰寫的,該文的作者是Xavier Amatriain。 表格一:協(xié)同過(guò)濾推薦算法概覽 表格二:基于內(nèi)容過(guò)濾的推薦算法概覽 表格三:混合方式的推薦算法概覽 表格四:流行度推薦算法概覽 表格五:高級(jí)或“非傳統(tǒng)”推薦算法概覽 推薦算法概覽(二)本文是系列文中的第二篇,將會(huì)列出推薦算法的備忘列表,介紹推薦算法的主要分類。在本文中,我們會(huì)更詳細(xì)地介紹協(xié)同過(guò)濾推薦算法,并討論其優(yōu)劣,以便大家更深刻地理解其工作原理。 協(xié)同過(guò)濾(CF)推薦算法會(huì)尋找用戶的行為模式,并據(jù)此創(chuàng)建用戶專屬的推薦內(nèi)容。這種算法會(huì)根據(jù)系統(tǒng)中的用戶使用數(shù)據(jù)——比如用戶對(duì)讀過(guò)書籍的評(píng)論來(lái)確定用戶對(duì)其喜愛程度。關(guān)鍵概念在于:如果兩名用戶對(duì)于某件物品的評(píng)分方式類似,那么他們對(duì)于某個(gè)新物品的評(píng)分很可能也是相似的。值得注意的是:這種算法無(wú)需再額外依賴于物品信息(比如描述、元數(shù)據(jù)等)或者用戶信息(比如感興趣的物品、統(tǒng)計(jì)數(shù)據(jù)等)。協(xié)同過(guò)濾推薦算法可分為兩類:基于鄰域的與基于模型的。在前一種算法(也就是基于內(nèi)存的協(xié)同過(guò)濾推薦算法)中,用戶-物品評(píng)分可直接用以預(yù)測(cè)新物品的評(píng)分。而基于模型的算法則通過(guò)評(píng)分來(lái)研究預(yù)測(cè)性的模型,再根據(jù)模型對(duì)新物品作出預(yù)測(cè)。大致理念就是通過(guò)機(jī)器學(xué)習(xí)算法,在數(shù)據(jù)中找出模式,并將用戶與物品間的互動(dòng)方式模式化。 基于鄰域的協(xié)同過(guò)濾則著眼于物品之間的關(guān)系(即基于物品的協(xié)同過(guò)濾)或者用戶之間的關(guān)系(基于用戶的協(xié)同過(guò)濾)。
首先,在執(zhí)行基于物品的協(xié)同過(guò)濾前,我們先看一個(gè)基于用戶的協(xié)同過(guò)濾案例。 圖一:用戶書籍偏好所有偏好的范圍都是1分到5分,5分是最高(也就是最喜歡的)。第一個(gè)用戶(行1)給第一本書(列1)的評(píng)分為4分,如果某個(gè)單元格為空,代表著用戶并未對(duì)這本書作出評(píng)價(jià)。 在基于用戶的協(xié)同過(guò)濾算法中,我們要做的第一件事就是根據(jù)用戶對(duì)書籍的偏好,計(jì)算出他們彼此間的相似度。我們從某個(gè)單獨(dú)用戶的角度來(lái)看一下這個(gè)問(wèn)題,以圖一中第一行的用戶為例。通常我們會(huì)將每個(gè)用戶都作為向量(或者數(shù)組),其中包含了用戶對(duì)物品的偏好。通過(guò)多種類似的指標(biāo)對(duì)用戶進(jìn)行對(duì)比是相當(dāng)直接的。在本例中,我們會(huì)使用余弦相似點(diǎn)。我們將第一位用戶與其他五位相對(duì)比,可以發(fā)現(xiàn)第一位與其他用戶的相似度有多少(圖二)。就像大多相似度指標(biāo)一樣,向量之間的相似度越高,彼此也就越相似。在本例中,第一位用戶與其中兩位有兩本相同的書籍,相似度較高;與另兩位只有一本相同書籍,相似度較低;與最后一位沒(méi)有相同書籍,相似度為零。 圖二:第一位用戶與其他用戶的相似性。可以在一個(gè)單獨(dú)的維度中繪制用戶間的余弦相似性。 更常見的情況下,我們可以計(jì)算出每名用戶與所有用戶的相似程度,并在相似性矩陣中表現(xiàn)出來(lái)(圖三)。這是一個(gè)對(duì)稱矩陣,也就是說(shuō)其中一些有用的屬性是可以執(zhí)行數(shù)學(xué)函數(shù)運(yùn)算的。單元格的背景色表明了用戶彼此間的相似程度,紅色越深則相似度越高。 圖三:用戶間的相似矩陣,每個(gè)用戶的相似度是基于用戶閱讀書籍間的相似性。 現(xiàn)在,我們準(zhǔn)備使用基于用戶的協(xié)同過(guò)濾來(lái)生成給用戶的推薦。對(duì)于特定的用戶來(lái)說(shuō),這代表著找出與其相似性最高的用戶,并根據(jù)這些類似用戶喜愛的物品進(jìn)行推薦,具體要參照用戶相似程度來(lái)加權(quán)。我們先以第一個(gè)用戶為例,為其生成一些推薦。首先我們找到與這名用戶相似程度最高的n名用戶,刪除這名用戶已經(jīng)喜歡過(guò)的書籍,再對(duì)最相似用戶閱讀過(guò)的書籍進(jìn)行加權(quán),之后將所有結(jié)果加在一起。在本例中,我們假設(shè)n=2,也就是說(shuō)取兩名與第一位用戶最相似的用戶,以生成推薦結(jié)果,這兩名用戶分別是用戶2及用戶3(圖四)。由于第一名用戶已經(jīng)對(duì)書籍1和書籍5做出了評(píng)分,推薦結(jié)果生成書籍3(分?jǐn)?shù)4.5)及書籍4(分?jǐn)?shù)3)。 圖四:為一名用戶生成推薦。我們?nèi)∵@兩名最相似的用戶所閱讀的書籍,進(jìn)行加權(quán),然后對(duì)這名用戶尚未評(píng)分的書籍進(jìn)行推薦。 現(xiàn)在我們對(duì)基于用戶的協(xié)同過(guò)濾有了更深刻的理解,之后來(lái)看一個(gè)基于物品的協(xié)同過(guò)濾的案例。我們還是用同一組用戶(圖一)為例。 在基于物品的協(xié)同過(guò)濾中,與基于用戶的協(xié)同過(guò)濾類似,我們要做的第一件事就是計(jì)算相似度矩陣。但這一回,我們想要針對(duì)物品而非用戶來(lái)看看它們之間的相似性。與之前類似,我們以書籍作為喜愛者的向量(或數(shù)組),將其與余弦相似度函數(shù)相對(duì)比,從而揭示出某本書籍與其他書籍之間的相似程度。由于同一組用戶給出的評(píng)分大致類似,位于列1的第一本書與位于列5的第五本書相似度是最高的(圖五)。其次是相似度排名第三的書籍,有兩位相同的用戶喜愛;排名第四和第二的書籍只有一位共同讀者;而排名最后的書籍由于沒(méi)有共同讀者,相似度為零。 圖五:第一本書與其他書籍的對(duì)比。書籍通過(guò)所閱讀用戶的評(píng)價(jià)來(lái)表現(xiàn)。通過(guò)余弦相似度指標(biāo)(0-1)來(lái)進(jìn)行對(duì)比,相似度越高,兩本書就越相似。 我們還可以在相似矩陣中展示出所有書籍彼此間的相似程度(圖六)。同樣以背景顏色區(qū)分了兩本書彼此間的相似程度,紅色越深相似程度也越高。 圖六:書籍的相似矩陣 現(xiàn)在我們知道每本書彼此間的相似程度了,可以為用戶生成推薦結(jié)果。在基于物品的協(xié)同過(guò)濾中,我們根據(jù)用戶此前曾評(píng)過(guò)分的物品,推薦與其最為相似的物品。在案例中,第一位用戶獲得的推薦結(jié)果為第三本書籍,然后是第六本(圖七)。同樣地,我們只取與用戶之前評(píng)論過(guò)的書籍最相似的兩本書。 圖七:為某位用戶生成推薦結(jié)果。我們?nèi)〉剿麄冎霸u(píng)論過(guò)的書籍目錄,找出與每本書籍最相似的兩本,再對(duì)用戶尚未評(píng)論過(guò)的書籍進(jìn)行推薦。 根據(jù)上述描述,基于用戶與基于物品的協(xié)同過(guò)濾似乎非常類似,因此能得出不同的結(jié)果這一點(diǎn)確實(shí)很有意思。即便在上例中,這兩種方式都能為同一名用戶得出不同的推薦結(jié)果,盡管兩者的輸入內(nèi)容是相同的。在構(gòu)建推薦時(shí),這兩種形式的協(xié)同過(guò)濾方式都是值得考慮的。盡管在向外行描述時(shí),這兩種方法看起來(lái)非常類似,但實(shí)際上它們能得出非常不同的推薦結(jié)果,從而為用戶帶來(lái)完全不同的體驗(yàn)。 由于簡(jiǎn)單高效,且生成的推薦結(jié)果準(zhǔn)確、個(gè)性化,鄰域方法也是相當(dāng)受歡迎的。但由于要計(jì)算(用戶或物品間的)相似度,隨著用戶或物品數(shù)量的增長(zhǎng),也會(huì)出現(xiàn)一些伸縮性方面的局限。在最糟的情況下,需要計(jì)算O(m*n),但在現(xiàn)實(shí)中情況略好一些,只要計(jì)算O(m+n)即可,部分原因在于利用了數(shù)據(jù)的稀疏度。盡管稀疏度有助于擴(kuò)展實(shí)現(xiàn),但同時(shí)也為基于鄰域的方法提出了挑戰(zhàn),因?yàn)樵诤A康奈锲分校瑑H有少量是有用戶評(píng)論過(guò)的。例如,Mendeley系統(tǒng)中有數(shù)百萬(wàn)篇文章,而一名用戶也許只讀過(guò)其中幾百篇。兩名各讀過(guò)100篇文章的用戶具有相似度的可能性僅為0.0002(在5000萬(wàn)篇文章的目錄中)。 基于模型的協(xié)同過(guò)濾方式可以克服基于鄰域方法的限制。與使用用戶-物品評(píng)分直接預(yù)測(cè)新物品評(píng)分的鄰域方式不同,基于模型的方法則使用評(píng)分來(lái)研究預(yù)測(cè)性模型,并根據(jù)模型來(lái)預(yù)測(cè)新物品。大致理念就是通過(guò)機(jī)器學(xué)習(xí)算法,在數(shù)據(jù)中找出模式,并將用戶與物品間的互動(dòng)方式模式化。總體來(lái)講,基于模型的協(xié)同過(guò)濾方式是構(gòu)建協(xié)同過(guò)濾更高級(jí)的算法。很多不同的算法都能用來(lái)構(gòu)建模型,以進(jìn)行預(yù)測(cè);例如貝葉斯網(wǎng)絡(luò)、集群、分類、回歸、矩陣因式分解、受限波爾茲曼機(jī)等,這些技術(shù)其中有些在獲得Netflix Prize獎(jiǎng)項(xiàng)時(shí)起到了關(guān)鍵性作用。Netflix在2006年到2009年間舉辦競(jìng)賽,當(dāng)時(shí)還為能夠生成準(zhǔn)確度超過(guò)其系統(tǒng)10%的推薦系統(tǒng)制作團(tuán)隊(duì)提供100萬(wàn)美元的大獎(jiǎng)。勝出的解決方案是一套綜合了逾100種不同算法模型,并在生產(chǎn)環(huán)境中采用了矩陣因式分解與受限玻爾茲曼機(jī)的方法。 矩陣因式分解(比如奇異值分解、SVD++)將物品與用戶都轉(zhuǎn)化為同一個(gè)隱空間,表現(xiàn)了用戶與物品間的底層互動(dòng)(圖八)。矩陣因式分解背后的原理在于:其潛在特性代表了用戶如何對(duì)物品進(jìn)行評(píng)分。根據(jù)用戶與物品的潛在表現(xiàn),我們就可以預(yù)測(cè)用戶對(duì)未評(píng)分的物品的喜愛程度。 圖八:矩陣分解算法的演示,用戶偏好矩陣可以分解為用戶主題矩陣乘以物品主題矩陣。 在表一中,我們列出了鄰域算法與基于模型的協(xié)同過(guò)濾算法的關(guān)鍵優(yōu)劣點(diǎn)。由于協(xié)同過(guò)濾算法只依賴于用戶的使用數(shù)據(jù),想要生成足夠優(yōu)秀的推薦結(jié)果無(wú)需對(duì)技術(shù)工作有太多了解,但這種算法也有其局限。例如,CF更容易推薦流行物品,因此為品味獨(dú)特的用戶推薦物品時(shí)就會(huì)比較困難(即對(duì)其感興趣的物品可能不具有太多的使用數(shù)據(jù)),也就是流行度偏好的問(wèn)題,這一點(diǎn)通常可以通過(guò)基于內(nèi)容的過(guò)濾算法解決。CF算法更重要的一個(gè)限制就是所謂的“冷啟動(dòng)問(wèn)題”——系統(tǒng)無(wú)法為沒(méi)有或使用行為很少的用戶提供推薦(也就是新用戶的問(wèn)題),也無(wú)法為沒(méi)有或使用行為很少的物品提供推薦(也就是新物品的問(wèn)題)。新用戶的“冷啟動(dòng)問(wèn)題”可以通過(guò)流行度和混合算法來(lái)解決,而新物品問(wèn)題可以通過(guò)基于內(nèi)容過(guò)濾或multi-armed bandit推薦算法(即探索-利用)來(lái)解決。在下篇文章中我們會(huì)詳細(xì)討論其中一些算法。 本文中,我們介紹了三種基本的協(xié)同過(guò)濾算法實(shí)現(xiàn)。基于物品、基于用戶的協(xié)同過(guò)濾算法,以及矩陣分解算法之間的區(qū)別都很細(xì)微,通常很難簡(jiǎn)單地解釋其差異。理解這些算法間的差異有助于我們選擇推薦系統(tǒng)最適合的算法。在下篇文章中,我們會(huì)繼續(xù)深入探討推薦系統(tǒng)的流行算法。 推薦算法概覽(三)本文是系列文中的第三篇。第一篇文章通過(guò)列表形式介紹了推薦算法的主要分類,第二篇文章介紹了不同類型的協(xié)同過(guò)濾算法,強(qiáng)調(diào)了其間的一些細(xì)微差別。在本文中,我們將會(huì)更加詳細(xì)地介紹基于內(nèi)容的過(guò)濾算法并討論其優(yōu)缺點(diǎn),以更好地理解其工作原理。 基于內(nèi)容的過(guò)濾算法會(huì)推薦與用戶最喜歡的物品類似的那些。但是,與協(xié)同過(guò)濾算法不同,這種算法是根據(jù)內(nèi)容(比如標(biāo)題、年份、描述),而不是人們使用物品的方式來(lái)總結(jié)其類似程度的。例如,如果某個(gè)用戶喜歡電影《魔戒》的第一部和第二部,那么推薦系統(tǒng)會(huì)通過(guò)標(biāo)題關(guān)鍵字向用戶推薦《魔戒》的第三部。在基于內(nèi)容的過(guò)濾算法中,會(huì)假設(shè)每個(gè)物品都有足夠的描述信息可作為特征向量(y)(比如標(biāo)題、年代、描述),而這些特征向量會(huì)被用來(lái)創(chuàng)建用戶偏好模型。各種信息檢索(比如tf-idf)以及機(jī)器學(xué)習(xí)技術(shù)(比如樸素貝葉斯算法、支持向量機(jī)、決策樹等)都可用于生成用戶模型,之后再根據(jù)模型來(lái)進(jìn)行推薦。 假設(shè)我們有一些用戶已經(jīng)表達(dá)了他們對(duì)某些書籍的偏好,他們?cè)较矚g某本書,對(duì)這本書的評(píng)分也越高(評(píng)分范圍是1分到5分)。我們可以在一個(gè)矩陣中重現(xiàn)他們的這種偏好,用行代表用戶,用列代表書籍。 圖一:用戶書籍偏好所有偏好的范圍都是1分到5分,5分是最高的(也就是最喜歡的)。第一個(gè)用戶(行1)給第一本書(列1)的評(píng)分為4分,如果某個(gè)單元格為空,代表著用戶并未對(duì)這本書作出評(píng)價(jià)。 在基于內(nèi)容的協(xié)同過(guò)濾算法中,我們要做的第一件事就是根據(jù)內(nèi)容,計(jì)算出書籍之間的相似度。在本例中,我們使用了書籍標(biāo)題中的關(guān)鍵字(圖二),這只是為了簡(jiǎn)化而已。在實(shí)際中我們還可以使用更多的屬性。 圖二:用戶已經(jīng)評(píng)論過(guò)的書籍標(biāo)題 首先,通常我們要從內(nèi)容中刪除停止詞(比如語(yǔ)法詞、過(guò)于常見的詞),然后用代表出現(xiàn)哪些詞匯的向量(或數(shù)組)對(duì)書籍進(jìn)行表示(圖三),這就是所謂的向量空間表示。 圖三:使用標(biāo)題的詞匯如果在標(biāo)題中有這個(gè)詞,我們以1為標(biāo)記,否則為空。 有了這個(gè)表格,我們就可以使用各種相似指標(biāo)直接對(duì)比各本書籍。在本例中,我們會(huì)使用余弦相似點(diǎn)。當(dāng)我們使用第一本書籍,將其與其他五本書籍對(duì)比時(shí),就能看到第一本書籍與其他書籍的相似程度(圖四)。就像大多相似度指標(biāo)一樣,向量之間的相似度越高,彼此也就越相似。在本例中,第一本書與其他三本書都很類似,都有兩個(gè)共同的詞匯(推薦和系統(tǒng))。而標(biāo)題越短,兩本書的相似程度越高,這也在情理之中,因?yàn)檫@樣一來(lái),不相同的詞匯也就越少。鑒于完全沒(méi)有共同詞匯,第一本書與其他書籍中的兩本完全沒(méi)有類似的地方。 圖四:第一本書與其他書籍間的相似性在單個(gè)維度中通過(guò)兩本書之間的余弦相似度就能繪制出來(lái)。 我們還可以在相似矩陣中展示出所有書籍彼此間的相似程度(圖五)。單元格的背景色表明了用戶彼此間的相似程度,紅色越深相似度越高。 圖五:書籍間的相似矩陣,每個(gè)相似點(diǎn)都是基于書籍向量表示之間的余弦相似度。 現(xiàn)在我們知道每本書彼此間的相似程度了,可以為用戶生成推薦結(jié)果。與基于物品的協(xié)同過(guò)濾方式類似,我們?cè)谥暗奈恼轮幸步榻B過(guò),推薦系統(tǒng)會(huì)根據(jù)用戶之前評(píng)價(jià)過(guò)的書籍,來(lái)推薦其他書籍中相似度最高的。區(qū)別在于:相似度是基于書籍內(nèi)容的,準(zhǔn)確來(lái)說(shuō)是標(biāo)題,而不是根據(jù)使用數(shù)據(jù)。在本例中,系統(tǒng)會(huì)給第一個(gè)用戶推薦第六本書,之后是第四本書(圖六)。同樣地,我們只取與用戶之前評(píng)論過(guò)的書籍最相似的兩本書。 圖六:為某個(gè)用戶生成推薦結(jié)果。我們?nèi)〉剿麄冎霸u(píng)論過(guò)的書籍目錄,找出與每本書籍最相似的兩本,再對(duì)用戶尚未評(píng)論過(guò)的書籍進(jìn)行推薦。 基于內(nèi)容的算法解決了協(xié)同過(guò)濾算法的某些限制,尤其能協(xié)助我們克服流行度偏見,以及新物品的冷啟動(dòng)問(wèn)題,而這些我們已經(jīng)在協(xié)同過(guò)濾的部分中討論過(guò)了。然而,值得注意的是:純粹基于內(nèi)容的推薦系統(tǒng)通常在執(zhí)行時(shí)效果不如那些基于使用數(shù)據(jù)的系統(tǒng)(比如協(xié)同過(guò)濾算法)。基于內(nèi)容過(guò)濾的算法也會(huì)有過(guò)度專業(yè)化的問(wèn)題,系統(tǒng)可能會(huì)向用戶推薦過(guò)多相同類型的物品(比如獲得所有《魔戒》電影的推薦),而不會(huì)推薦那些雖然類型不同,但是用戶也感興趣的物品。最后,基于內(nèi)容的算法在實(shí)現(xiàn)時(shí)只會(huì)使用物品元數(shù)據(jù)中所含的詞匯(比如標(biāo)題、描述年份),更容易推薦更多相同的內(nèi)容,限制了用戶探索發(fā)現(xiàn)這些詞匯之外的內(nèi)容。關(guān)于基于內(nèi)容過(guò)濾的優(yōu)劣總結(jié)見表二。 推薦算法概覽(四)本文是系列文中的第四篇。第一篇文章通過(guò)列表形式介紹了推薦算法的主要分類,第二篇文章介紹了不同類型的協(xié)同過(guò)濾算法,強(qiáng)調(diào)了其間的一些細(xì)微差別,在第三篇中我們?cè)敿?xì)介紹了基于內(nèi)容的過(guò)濾算法。本文將會(huì)討論基于之前提過(guò)算法而形成的混合型推薦系統(tǒng),也會(huì)簡(jiǎn)單討論如何利用流行度來(lái)解決一些協(xié)同過(guò)濾算法與基于內(nèi)容過(guò)濾算法的限制。 混合算法結(jié)合了用戶及物品的內(nèi)容特性以及使用數(shù)據(jù),以利用這兩類數(shù)據(jù)的優(yōu)點(diǎn)。結(jié)合了A算法與B算法的某個(gè)混合型推薦系統(tǒng)會(huì)嘗試?yán)肁算法的優(yōu)點(diǎn)以解決B算法的缺點(diǎn)。例如,協(xié)同過(guò)濾算法存在新物品的問(wèn)題,也就是說(shuō)這種算法無(wú)法推薦用戶未評(píng)價(jià)或使用過(guò)的物品。因?yàn)槭腔趦?nèi)容(特性)預(yù)測(cè)的,這一點(diǎn)并不會(huì)對(duì)基于內(nèi)容的算法產(chǎn)生限制。而結(jié)合了協(xié)同過(guò)濾與基于內(nèi)容過(guò)濾算法的混合型推薦系統(tǒng)能夠解決單個(gè)算法中的一些限制,比如冷啟動(dòng)的問(wèn)題與流行度偏好的問(wèn)題。表一列出了一些不同的方法,包括如何結(jié)合兩種甚至更多基礎(chǔ)推薦系統(tǒng)技術(shù),以創(chuàng)建新的混合型系統(tǒng)。 表一:結(jié)合兩種甚至更多的基礎(chǔ)推薦算法,以創(chuàng)建新混合算法的不同方式。 假設(shè)我們有一些用戶已經(jīng)表達(dá)了他們對(duì)某些書籍的偏好,他們?cè)较矚g某本書,對(duì)這本書的評(píng)分也越高(評(píng)分級(jí)別分別為1-5)。我們可以在一個(gè)矩陣中重現(xiàn)他們的這種偏好,用行代表用戶,用列代表書籍。 圖一:用戶書籍偏好所有偏好的范圍都是1分到5分,5分是最高的(也就是最喜歡的)。第一名用戶(行1)對(duì)第一本書(列1)的評(píng)分為4分,如果某個(gè)單元格為空,代表著用戶并未對(duì)這本書作出評(píng)價(jià)。 在本文所屬系列的第二篇中,我們給出了兩個(gè)案例,包括如何使用基于物品及基于用戶的協(xié)同過(guò)濾算法來(lái)計(jì)算推薦結(jié)果;在本文所屬系列的第三篇中,我們演示了如何使用基于內(nèi)容的過(guò)濾算法來(lái)生成推薦結(jié)果。現(xiàn)在我們將這三種不同的算法結(jié)合起來(lái),生成一種全新的混合型推薦結(jié)果。我們會(huì)使用加權(quán)法(表一)結(jié)合多種技術(shù)得出的結(jié)果,之后這三種算法便可按照不同的權(quán)值(根據(jù)重要性不同)結(jié)合得出一組新的推薦結(jié)果。 我們先以第一個(gè)用戶為例,為其生成一些推薦。首先我們會(huì)根據(jù)第二篇中的基于用戶的協(xié)同過(guò)濾算法,基于物品的協(xié)同過(guò)濾算法,以及第三篇中基于內(nèi)容過(guò)濾的算法,各自生成推薦結(jié)果。值得注意的是,在這個(gè)小案例中,這三種方法為同一名用戶生成的推薦結(jié)果有著輕微的差異,盡管輸入的內(nèi)容是完全相同的。 圖二:為某個(gè)用戶生成的推薦結(jié)果——分別使用基于用戶的協(xié)同過(guò)濾算法,基于物品的協(xié)同過(guò)濾算法,以及基于內(nèi)容的過(guò)濾算法。 下一步,我們使用加權(quán)混合推薦算法為指定用戶生成推薦結(jié)果,加權(quán)值分別為:基于用戶的協(xié)同過(guò)濾算法40%,基于物品的協(xié)同過(guò)濾算法30%,基于內(nèi)容過(guò)濾的算法30%(圖三)。在這個(gè)案例中,系統(tǒng)會(huì)向用戶推薦他們從未看過(guò)的所有三本書,而使用單個(gè)算法只會(huì)推薦其中兩本。 圖三:使用加權(quán)混合推薦系統(tǒng)為某個(gè)用戶生成推薦結(jié)果,具體權(quán)值參見上文。 盡管混合型算法解決了CF與CB算法的一些重大挑戰(zhàn)與限制(見圖三),但在系統(tǒng)中平衡不同的算法也需要很多工作量。另一種結(jié)合單個(gè)推薦算法的方式是使用集成方法,關(guān)于如何結(jié)合不同算法得出的結(jié)果,我們研究得出了一個(gè)函數(shù)。值得注意的是:通常集成算法不僅結(jié)合了不同的算法,還結(jié)合了根據(jù)同一種算法得出的不同變體與模型。例如:獲得Netflix Prize獎(jiǎng)項(xiàng)的解決方案包含了從10多種算法(流行度、鄰域算法、矩陣分解算法、受限波爾茲曼機(jī)、回歸等等)得出的100多種不同的模型,并通過(guò)迭代決策樹(GBDT)將這些算法與模型結(jié)合在一起。 另外,基于流行度的算法對(duì)于新用戶的冷啟動(dòng)問(wèn)題來(lái)說(shuō)也是一個(gè)優(yōu)秀的解決方案。這些算法通過(guò)某些流行度的測(cè)量標(biāo)準(zhǔn),比如下載最多的或者購(gòu)買最多的,來(lái)對(duì)物品進(jìn)行排名,并將這些流行度最高的物品推薦給新用戶。當(dāng)擁有合適的流行度衡量指標(biāo)時(shí),這個(gè)辦法雖然基礎(chǔ)卻很有效,通常可以為其他算法提供很好的基線標(biāo)準(zhǔn)。流行度算法也可以單獨(dú)作為算法使用,以引導(dǎo)推薦系統(tǒng)在換到其他更切合用戶興趣點(diǎn)的算法(比如協(xié)同過(guò)濾算法以及基于內(nèi)容過(guò)濾的算法)前獲得足夠的活躍度與使用量。流行度模型也可以引入混合算法中,從而解決新用戶的冷啟動(dòng)問(wèn)題。 推薦算法概覽(五)本文是推薦算法系列文中的第五篇。第一篇文章通過(guò)列表形式介紹了推薦算法的主要分類,第二篇文章介紹了不同類型的協(xié)同過(guò)濾算法,強(qiáng)調(diào)了其間的一些細(xì)微差別,在第三篇中我們?cè)敿?xì)介紹了基于內(nèi)容的過(guò)濾算法,在第四篇中我們講解了混合型推薦系統(tǒng)以及基于流行度的算法。在本篇中,我們會(huì)對(duì)簡(jiǎn)單了解一下如何對(duì)一些高級(jí)的推薦算法做以選擇,再回顧一下基礎(chǔ)算法得出的推薦結(jié)果差異有多大,以便本系列完美收官。 除了我們截至目前提到的一些更為傳統(tǒng)的推薦系統(tǒng)算法之外(比如流行度算法、協(xié)同過(guò)濾算法、基于內(nèi)容過(guò)濾的算法、混合型算法),還有許多其他算法也可用于加強(qiáng)推薦系統(tǒng)的功能,包括有:
這些更為高級(jí)的非傳統(tǒng)算法對(duì)于將現(xiàn)有推薦系統(tǒng)的質(zhì)量推向更高層次很有好處,但理解起來(lái)也更困難,推薦工具的支持上也不夠。在實(shí)踐中,我們總要權(quán)衡實(shí)現(xiàn)高級(jí)算法的代價(jià)與對(duì)基礎(chǔ)算法的增益相比較是否值得。根據(jù)經(jīng)驗(yàn)來(lái)看,基礎(chǔ)算法還能使用很久,為一些很優(yōu)秀的產(chǎn)品提供服務(wù)。 在本系列文中,我們希望介紹一些常見的推薦模塊算法,包括基于用戶的協(xié)同過(guò)濾算法,基于物品的協(xié)同過(guò)濾算法,基于內(nèi)容的過(guò)濾算法,以及混合型算法。我們使用了一個(gè)案例,說(shuō)明了這四種不同算法在輸入數(shù)據(jù)相同時(shí),應(yīng)用于同一個(gè)案例時(shí),為同一個(gè)用戶生成的不同推薦結(jié)果(圖一)。當(dāng)應(yīng)用于真實(shí)世界的大型數(shù)據(jù)時(shí),這樣的效應(yīng)依然存在,因此決定使用哪種算法時(shí),需要考慮相關(guān)的優(yōu)缺點(diǎn)以及執(zhí)行效果。 圖一:四種推薦系統(tǒng)算法全部使用同一組數(shù)據(jù),卻得出了不同的結(jié)果。左側(cè)我們給出了一個(gè)矩陣,標(biāo)明了用戶對(duì)大量物品的不同偏好,并列出了可以推薦的物品名稱。在中間,我們展示了這四種不同算法如何為第一名用戶生成推薦結(jié)果(也就是用戶偏好矩陣中第一行的用戶)。就像相似矩陣中展示的那樣,這些算法對(duì)相似度有不同的定義。右側(cè)則是每種推薦算法生成的一些物品,從上到下分別按照四種算法的介紹順序來(lái)排序。 在實(shí)踐中,一般如果在推薦模型中使用協(xié)同過(guò)濾算法,就不會(huì)犯太大錯(cuò)誤。協(xié)同過(guò)濾算法似乎比其他算法更優(yōu)秀,但在冷啟動(dòng)用戶及物品方面會(huì)有問(wèn)題,因此通常會(huì)使用基于內(nèi)容的算法作為輔助。如果有時(shí)間的話,使用混合型算法就可以結(jié)合協(xié)同過(guò)濾及基于內(nèi)容過(guò)濾算法優(yōu)勢(shì)了。將這些基礎(chǔ)算法放在一起當(dāng)然是個(gè)好辦法,甚至比高級(jí)算法還要更好。 最后這一點(diǎn)值得牢記:推薦模型只是五個(gè)推薦系統(tǒng)組件中的一個(gè)。與所有組件類似,正確設(shè)置并努力建立模型非常重要,不過(guò)選擇數(shù)據(jù)集、處理、后處理、在線模塊及用戶界面也同樣重要。正如我們?cè)偃龔?qiáng)調(diào)的那樣,算法只是推薦系統(tǒng)的一部分,整個(gè)產(chǎn)品應(yīng)當(dāng)將你的決策納入考量。 |
|