“猜你喜歡”是怎么猜中你心思的?
(文/Joseph A. Konstan & John Riedl)如今,到網(wǎng)上購(gòu)物的人已經(jīng)習(xí)慣了收到系統(tǒng)為他們做出的個(gè)性化推薦。Netflix 會(huì)推薦你可能會(huì)喜歡看的視頻。TiVo 會(huì)自動(dòng)把節(jié)目錄下來,如果你感興趣就可以看。Pandora 會(huì)通過預(yù)測(cè)我們想要聽什么歌曲從而生成個(gè)性化的音樂流。
所有這些推薦結(jié)果都來自于各式各樣的推薦系統(tǒng)。它們依靠計(jì)算機(jī)算法運(yùn)行,根據(jù)顧客的瀏覽、搜索、下單和喜好,為顧客選擇他們可能會(huì)喜歡、有可能會(huì)購(gòu)買的商品,從而為消費(fèi)者服務(wù)。推薦系統(tǒng)的設(shè)計(jì)初衷是幫助在線零售商提高銷售額,現(xiàn)在這是一塊兒規(guī)模巨大且不斷增長(zhǎng)的業(yè)務(wù)。與此同時(shí),推薦系統(tǒng)的開發(fā)也已經(jīng)從上世紀(jì) 90 年代中期只有幾十個(gè)人研究,發(fā)展到了今天擁有數(shù)百名研究人員,分別供職于各高校、大型在線零售商和數(shù)十家專注于這類系統(tǒng)的其他企業(yè)。
這些年來,推薦系統(tǒng)有了相當(dāng)?shù)倪M(jìn)展。開始時(shí)它們還相對(duì)較為粗糙,往往對(duì)行為做出不準(zhǔn)確的預(yù)測(cè);但隨著更多的和不同類型的網(wǎng)站用戶數(shù)據(jù)變得可用,推薦系統(tǒng)得以將創(chuàng)新算法應(yīng)用于這些數(shù)據(jù)之上,它們迅速得到了改善。今天,推薦系統(tǒng)都是些極其復(fù)雜和精專的系統(tǒng),常??雌饋肀饶阕约哼€要了解你。同時(shí),推薦系統(tǒng)正在向零售網(wǎng)站以外的領(lǐng)域拓展:大學(xué)用它們來引導(dǎo)學(xué)生選課,移動(dòng)電話公司靠它們來預(yù)測(cè)哪些用戶有可能轉(zhuǎn)投另一家供應(yīng)商,會(huì)議主辦方也測(cè)試過用它們來分配論文給審稿專家。
我們兩人從推薦系統(tǒng)的早期開始便一直在開發(fā)和研究它們,最初是以學(xué)術(shù)研究者的身份,參與 GroupLens 計(jì)劃(GroupLens Project)。1992 年起,GroupLens 通過對(duì)美國(guó)興趣論壇網(wǎng)站 Usenet 討論區(qū)里的消息進(jìn)行排序,將用戶指向他們可能會(huì)感興趣、但自己尚未發(fā)現(xiàn)的話題線索。幾年以后,我們成立了 Net Perceptions,這是一家推薦算法公司,在互聯(lián)網(wǎng)第一次熱潮期間(1997 年 – 2000 年),一直處于業(yè)界領(lǐng)先地位。有鑒于此,雖然這些公司極少公開談?wù)撍麄兊耐扑]系統(tǒng)是如何運(yùn)作的,我們的經(jīng)驗(yàn)使我們能夠深入了解亞馬遜和其他在線零售商幕后的情景。(在本文中,我們的分析是在觀察和推理的基礎(chǔ)上得出的,不包含任何內(nèi)部消息)。
下面就是我們所看到的。
推薦算法是怎么“猜你喜歡”的?
你有沒有想過自己在亞馬遜眼中是什么樣子?答案是:你是一個(gè)很大、很大的表格里一串很長(zhǎng)的數(shù)字。這串?dāng)?shù)字描述了你所看過的每一樣?xùn)|西,你點(diǎn)擊的每一個(gè)鏈接以及你在亞馬遜網(wǎng)站上買的每一件商品;表格里的其余部分則代表了其他數(shù)百萬到亞馬遜購(gòu)物的人。你每次登陸網(wǎng)站,你的數(shù)字就會(huì)發(fā)生改變;在此期間,你在網(wǎng)站上每動(dòng)一下,這個(gè)數(shù)字就會(huì)跟著改變。這個(gè)信息又會(huì)反過來影響你在訪問的每個(gè)頁面上會(huì)看到什么,還有你會(huì)從亞馬遜公司收到什么郵件和優(yōu)惠信息。
許多年來,推薦系統(tǒng)的開發(fā)者試過用各種各樣的方法來采集和解析所有這些數(shù)據(jù)。最近這段時(shí)間,多數(shù)人都選擇使用被稱為個(gè)性化協(xié)同推薦(Personalized Collaborative Recommender)的算法。這也是亞馬遜、Netflix、Facebook 的好友推薦,以及一家英國(guó)流行音樂網(wǎng)站 Last.fm 的核心算法。說它 “個(gè)性化”,是因?yàn)檫@種算法會(huì)追蹤用戶的每一個(gè)行為(如瀏覽過的頁面、訂單記錄和商品評(píng)分),以此進(jìn)行推薦;它們可不是瞎貓碰上死耗子——全憑運(yùn)氣。說它 “協(xié)同”,則是因?yàn)檫@種算法會(huì)根據(jù)許多其他的顧客也購(gòu)買了這些商品或者對(duì)其顯示出好感,而將兩樣物品視為彼此關(guān)聯(lián),它不是通過分析商品特征或者關(guān)鍵詞來進(jìn)行判斷的。
不同類型的個(gè)性化協(xié)同推薦系統(tǒng)最晚從 1992 年開始便已經(jīng)出現(xiàn)。除了 GroupLens 計(jì)劃,另一項(xiàng)早期的推薦系統(tǒng)是 MIT 的 Ringo,它會(huì)根據(jù)用戶的音樂播放列表從而給用戶推薦其他他們有可能會(huì)喜歡的音樂。
User-User 算法:計(jì)算用戶之間的相似度
GroupLens 和 Ringo 都使用了一種簡(jiǎn)單的協(xié)同算法,被稱為 “用戶關(guān)聯(lián)”(user-user)的算法。這種類型的算法會(huì)計(jì)算一對(duì)用戶之間的 “距離”,根據(jù)的是他們對(duì)同一物品打分的相似程度。舉例來說,如果吉姆和簡(jiǎn)都給《電子世界爭(zhēng)霸戰(zhàn)》(Tron)這部電影打了 5 分,那么他們之間的距離就是 0。如果吉姆給它的續(xù)集《創(chuàng):戰(zhàn)紀(jì)》(Tron: Legacy )這部電影打了 5 分,而簡(jiǎn)只打了 3 分,那么他們之間的距離就變大了。按照這樣的計(jì)算得出來品味相對(duì) “靠近” 的用戶,我們把他們稱之為共有一個(gè) “鄰集”(neighborhood)。
但是,這種用戶關(guān)聯(lián)的策略效果并不是很好。首先,形成有意義的鄰集很難:很多用戶兩兩之間只有很少幾個(gè)共同評(píng)分,有的就完全沒有;而僅有的那幾個(gè)都打了分的項(xiàng)目呢,往往是票房大片,基本上人人都喜歡的那種。再來,由于用戶之間的距離可以變得很快,算法必須當(dāng)場(chǎng)就進(jìn)行大部分的計(jì)算;而這可能會(huì)比一個(gè)在網(wǎng)站上這兒點(diǎn)點(diǎn)那兒戳戳的人下一個(gè)動(dòng)作發(fā)出之前需要更久的時(shí)間。
Item-Item 算法:計(jì)算物品之間的關(guān)聯(lián)
因此,大部分的推薦系統(tǒng)如今都依靠一種“物-物關(guān)聯(lián)”(item-item)的算法,這種算法計(jì)算的是兩本書、兩部電影或者兩個(gè)其他什么東西之間的距離,依據(jù)的是給它們打過分的用戶的相似度。喜歡 Tom Clancy 書的人很可能會(huì)給 Clive Cussler 的作品打高分,因此 Clancy 和 Cussler 的書就共處一個(gè)鄰集。一對(duì)物品之間的距離可能是根據(jù)成百上千萬的用戶的評(píng)分計(jì)算得出,在一段時(shí)間里往往保持相對(duì)穩(wěn)定,因此推薦系統(tǒng)可以預(yù)先計(jì)算距離,并更快的生成推薦結(jié)果。亞馬遜和 Netflix 都曾公開表示過他們使用的是物-物關(guān)聯(lián)算法的變種,但對(duì)細(xì)節(jié)都絕口不提。
用戶關(guān)聯(lián)算法和物-物關(guān)聯(lián)算法都有的一個(gè)問題,是用戶評(píng)分的不一致性。當(dāng)給他們機(jī)會(huì)再評(píng)一次分時(shí),用戶往往會(huì)對(duì)同一件物品給出不同的得分。品味在變、心情在變,印象也在變。MIT 在上世紀(jì) 90 年代進(jìn)行的一項(xiàng)研究表明,在最初打分一年以后,用戶的評(píng)分會(huì)發(fā)生平均 1 分(滿分 7 分)的變動(dòng)。研究人員們也在一直在嘗試不同的方法在模型中納入這一變量;比如說,如果用戶給某個(gè)商品了打一個(gè)分,但這個(gè)評(píng)分與推薦算法所了解的關(guān)于這個(gè)人和這個(gè)商品的所有其他信息不相符,有的推薦算法就會(huì)邀請(qǐng)用戶再次對(duì)這個(gè)商品進(jìn)行評(píng)價(jià)。
降維算法:把事物特征一般化
不過,用戶關(guān)聯(lián)算法和物-物關(guān)聯(lián)算法還存在一個(gè)比一致性更大的問題:它們太死了。就是說,它們能發(fā)現(xiàn)都喜歡同一樣?xùn)|西的人,但卻忽略了愛好非常相似的潛在用戶組合。比如說你喜歡莫奈的睡蓮。那么,在這個(gè)法國(guó)印象派大師畫的 250 幅睡蓮中,你最喜歡哪一幅?在一群喜歡莫奈的人當(dāng)中,完全可能每個(gè)人喜歡的睡蓮都不相同,而基本的算法就有可能識(shí)別不出這些人都有著共同的愛好。
大約十年前,研究者們想出了一個(gè)辦法,通過一個(gè)叫降維(Dimensionality Reduction)的過程,把事物更一般化的表現(xiàn)出來。這種方法在計(jì)算量上比用戶關(guān)聯(lián)和物-物關(guān)聯(lián)算法要密集得多,因此也就沒有那么快的得到采用。但隨著計(jì)算機(jī)變更快更便宜,降維算法也逐步取得了一些進(jìn)展。
為了弄清降維算法是怎么工作的,我們來看看你愛吃的東西,以及如何把它跟其他一百萬人愛吃的東西做比較。你可以把這些信息用一個(gè)巨型矩陣表示出來,每一條豎線代表一樣食物,每個(gè)人愛吃什么東西就自然形成了一行。在你的這一行上面或許會(huì)顯示你給了烤牛排 5 顆星、紅燒小排 4 星半、烤雞翅 2 顆星、凍豆腐卷 1 顆星、奶酪烤蘑菇 5 顆星、鹽水毛豆 4 顆星,等等。
然而,使用這個(gè)矩陣的推薦算法并不關(guān)心你給哪種食物評(píng)了多少顆星。它想要了解的是你一般而言的喜好,這樣它可以將這個(gè)信息應(yīng)用到更豐富多樣的食物上。比如說,基于你上面給出的信息,算法可能會(huì)認(rèn)為你喜歡牛肉、咸的東西和烤制菜品,不喜歡雞肉和任何油炸的東西,不喜歡也不討厭蔬菜,依此類推。你愛吃的食物所擁有的特點(diǎn)或者說維度,它的數(shù)量和符合你要求的食物的數(shù)量比起來要小得多——至多可能 50 或 100。通過查對(duì)這些維度,推薦算法可以迅速?zèng)Q定你是否會(huì)喜歡一種新的食物(比方說鹽焗排骨),方法就是把這種食物的各項(xiàng)維度(咸的、牛肉做的、不是雞肉、不是炒的、不是蔬菜、不是烤的)同你的資料進(jìn)行比對(duì)。這種更為一般性的呈現(xiàn)使得推薦算法能準(zhǔn)確的發(fā)現(xiàn)有著相似但不同喜好的用戶。而且,它大幅壓縮了矩陣的規(guī)模,使算法變得更加高效。
這是一個(gè)很酷的解決方案。不過,你愛吃的食物的維度該上哪兒去找呢?肯定不是去問廚師。推薦系統(tǒng)會(huì)使用一種稱為奇異值分解的數(shù)學(xué)方法來計(jì)算維度。這種方法涉及到把最初的一個(gè)巨型矩陣分解為兩個(gè) “口味矩陣”——其中一個(gè)包含了所有的用戶和 100 項(xiàng)口味維度,另一個(gè)則包含了所有的食物和 100 項(xiàng)口味維度——再加上第三個(gè)矩陣,當(dāng)乘以前面兩個(gè)矩陣中的任意一個(gè)時(shí),會(huì)得到最初的那個(gè)矩陣(※此處已更改)。
不像上面例子中說的那樣,計(jì)算用的維度既不是描述性的,也一點(diǎn)兒都不直觀;它們是純抽象的值。這并沒有什么,只要這些值最終生成準(zhǔn)確的推薦結(jié)果就行了。這種方法的主要缺點(diǎn)是,創(chuàng)建矩陣所需要的時(shí)間會(huì)隨著客戶和產(chǎn)品數(shù)量的增多而飛速增長(zhǎng)——?jiǎng)?chuàng)建一個(gè)擁有 2.5 億名客戶和 1000 萬種產(chǎn)品的矩陣,需要花上創(chuàng)建一個(gè) 25 萬名客戶和 1 萬種產(chǎn)品的矩陣 10 億倍那么多的時(shí)間。而且這一過程還需要經(jīng)常重復(fù)。一旦收到新的評(píng)分,矩陣就已經(jīng)過時(shí);在像亞馬遜這樣的公司,每一秒鐘都會(huì)收到新的評(píng)論。幸運(yùn)的是,就算略微過時(shí),矩陣仍然能以一個(gè)挺不錯(cuò)的水平運(yùn)作。研究人員們也已經(jīng)在設(shè)計(jì)新的算法,為奇異值分解提供可用的近似值并顯著縮短計(jì)算時(shí)間。
?本文作者:@ ccyou ;來自:果殼
- 目前還沒評(píng)論,等你發(fā)揮!