@ 2009/03/26; 2009/04/03 ;2009/04/04
因為此文原存儲地址(blog.qingyu.org)域名在國內(nèi)注冊,基于一些因素考慮將部分還未失去時效性的日志轉(zhuǎn)貼此處,照成不便還請見諒。
這兩天讀的一本叫《Web信息架構(gòu)》的書中經(jīng)常提及“協(xié)同過濾”這個字眼,我后來突然發(fā)現(xiàn),原來協(xié)同過濾在現(xiàn)在的Web2.0網(wǎng)站中被應(yīng)用得如此普遍,尤其是在社會化音樂網(wǎng)站中更是被發(fā)揮到了極致。
其中最典型的應(yīng)用比如:全球最大的B2C電子商務(wù)網(wǎng)站Amazon,網(wǎng)頁資源的挖掘機(jī)Digg和StumbleUpon,社會化音樂服務(wù)Last.fm和iLike等。
下面便是這幾天對協(xié)同過濾這個概念的學(xué)習(xí)筆記。主要參考維基百科中文和英文兩個詞條。
協(xié)同過濾在我看來讓大眾用戶難以理解的并非它背后復(fù)雜的過濾算法和推薦算法,而是它一些相對晦澀的概念和原理。
簡單來說協(xié)同過濾是:推薦系統(tǒng)把與你臭味相投之用戶喜歡的東西推薦給你。
比如說豆瓣用戶登陸后在首頁看到的那些由豆瓣推薦給你的電影、圖書、音樂、評論、活動。
協(xié)同過濾便是基于這樣的假設(shè):在一組興趣相似的用戶中,那么協(xié)同過濾便認(rèn)為用戶既然在一部事物(系統(tǒng)數(shù)據(jù)庫中已經(jīng)存在的記錄)上有共同興趣,那么這一組用戶中一個用戶的感興趣的東西很可能也會被另一個用戶青睞。
協(xié)同過濾深諳臭味相投的道理。假設(shè)這里有由用戶A和用戶B構(gòu)成的用戶組,系統(tǒng)已經(jīng)采集到(知道)這兩個用戶的興趣,其中用戶A對1,2,3,4非常感興趣,而用戶B對1,2,3,5亦有很大興趣。其中1,2,3是兩個用戶共同的愛好。那么協(xié)同過濾就認(rèn)為4和5有可能是用戶B和用戶A感興趣的,于是將4推薦給用戶B,把5推薦給用戶A。
當(dāng)然這是一個絕對簡單化了的流程。事實上協(xié)同過濾要復(fù)雜得多,首先一個系統(tǒng)內(nèi)就不僅僅存在兩個用戶,而且用戶的喜好也是極其復(fù)雜的。
在完成對用戶的推薦之前,協(xié)同過濾系統(tǒng)需要完成對用戶興趣的采集、近鄰搜索、最終完成推薦。而協(xié)同過濾主要又分為基于用戶、基于項目和基于模型三大類。
上面從概念層面上介紹了協(xié)同過濾的基本原理。協(xié)同過濾在目前一些主流社會化音樂服務(wù)的推薦音樂上有著極高的地位。協(xié)同過濾一般情況下分為基于用戶和基于項目。其中以用戶為基礎(chǔ)的協(xié)同過濾主要通過一定算法找出和某個用戶偏好匹配的更多內(nèi)容,而基于項目的協(xié)同過濾主要是要找出針對某一項目找出與其匹配的其它項目。
舉一個非常熟悉的例子:在豆瓣網(wǎng)首頁中用戶看到的“今日推薦的書、影、音……”就是一種典型的基于用戶的協(xié)同過濾,因為豆瓣網(wǎng)協(xié)同過濾算法給出的這些推薦內(nèi)容是為用戶量身定做且獨(dú)一無二的,其參考了用戶自身在豆瓣網(wǎng)上的行為及其好友的行為;而在豆瓣網(wǎng)中某一條目(比如一張專輯)的頁面中用戶看到的“喜歡聽"這張唱片"的人也喜歡……”就是種典型的基于項目的協(xié)同過濾,它根據(jù)用戶在豆瓣網(wǎng)上給這些內(nèi)容的打分和與其它內(nèi)容的關(guān)聯(lián)算出與這張專輯相似的專輯并列出來。
協(xié)同過濾在社會化音樂中得到了非常普遍的應(yīng)用,下面將以Last.fm和Spotify為例,在推薦表現(xiàn)上他們分別通過網(wǎng)頁和客戶端來呈現(xiàn)推薦結(jié)果。
Last.fm作為一個非常典型的網(wǎng)絡(luò)電臺,它的過濾機(jī)制也主要用在電臺服務(wù)上。
在Last.fm首頁上看到的如上界面就是一基于用戶的協(xié)同過濾非常典型的應(yīng)用。
而Last.fm為用戶推薦不僅僅局限于音樂,還包括免費(fèi)的MP3下載,音樂視頻和一些發(fā)生在用戶周圍的活動。
Last.fm的榜單在整個系統(tǒng)中得到了非常廣泛的應(yīng)用,它不僅要影響那些對用戶的推薦曲目,本身也是一種協(xié)同過濾的TOPN形式。Last.fm將用戶所有聽過的音樂進(jìn)行排序,找出用戶聽得最多的音樂(一般情況下也默許是用戶非常喜歡的)。
Last.fm還會根據(jù)相似的音樂偏好為用戶推薦其它Last.fm用戶(在Last.fm里叫做鄰居),方便用戶知道他們鄰居正在聽的音樂是什么,在前面那篇文章已經(jīng)提到過,你鄰居喜歡的音樂會不會也是你喜歡的呢?
在完成所有推薦之前,Last.fm需要對用戶的音樂偏好進(jìn)行信息采集,Last.fm主要通過像上面這樣的“記錄用戶的收聽歷史”來采集用戶興趣的信息。然后就可以結(jié)合其它同類的信息完成推薦了。
Spotify并不會像Last.fm那樣會永久地保存用戶的音樂收聽歷史,就更不用說為用戶建立音樂數(shù)據(jù)庫了,它在客戶端首頁上的推薦一般是基于用戶最近收聽的音樂,所以我們很容易發(fā)現(xiàn)Spotify的推薦清單很容易隨著我們收聽音樂的變化而變化。
而Spotify的TopLists則和Last.fm中的流行榜單類似,將所有Spotify用戶的收聽音樂記錄進(jìn)行排序。最終實現(xiàn)一個Spotify的流行榜單。比較特殊的是Spotify還可以排出不同國家的Spotify流行榜單。
而Spotify也同Last.fm類似通過記錄用戶最近收聽的音樂歷史推算出用戶可能感興趣的音樂。
有意思的是Spotify也支持通過Audioscrobbler將Spotify上播放的音樂歷史提交給用戶的Last.fm賬戶,這樣在Spotify上的大量音樂記錄也可以幫助Last.fm采集的用戶信息更加完整。
在一個產(chǎn)品設(shè)計中,產(chǎn)品設(shè)計者、開發(fā)者無論是否需要裝成用戶去思考問題,用戶在整個Web2.0網(wǎng)站的設(shè)計哲學(xué)中都是至關(guān)重要的。尤其是那些需要用戶來為你產(chǎn)生內(nèi)容的網(wǎng)站。
那么在一些寄希望通過協(xié)同過濾來為用戶提供服務(wù)的社會化音樂網(wǎng)站中,用戶的地位有多高呢?
在前面的文字中,大量的插圖告訴我們似乎協(xié)同過濾就是一件用戶的“聲音”來為用戶提供更多“聲音”的服務(wù)。如果沒有用戶參與進(jìn)來,那么一切都變得難堪起來。
再復(fù)雜的協(xié)同過濾系統(tǒng)大致都需要經(jīng)過以上三個步驟:網(wǎng)站通過大量交互應(yīng)用收集用戶對網(wǎng)站提供的服務(wù)內(nèi)容的興趣偏好,然后把其它用戶的數(shù)據(jù)整合進(jìn)來進(jìn)行近鄰搜索,最終抽離掉那些無法與用戶現(xiàn)有興趣數(shù)據(jù)匹配的內(nèi)容,生成推薦結(jié)果。
在這樣一個用戶隱私意識越來越高的環(huán)境下,網(wǎng)站想要盡可能地收集更多的用戶信息是非常困難的,網(wǎng)站向用戶索取那些可能不會被用戶意識到嚴(yán)重性的數(shù)據(jù)時需要想盡一切辦法,拐彎抹角。有像亞馬遜那樣的記錄用戶購買歷史,有豆瓣那樣的添星功能,也有Last.fm那樣通過插件來記錄用戶音樂播放歷史,添加標(biāo)簽等途徑。
所以在一個以推薦起家的網(wǎng)站來說如果用戶基數(shù)將直接影響網(wǎng)站的最終推薦效果,太少的用戶數(shù)據(jù)只能讓那些協(xié)同過濾算法顯得笨拙不堪。
但當(dāng)用戶增加到一定程度上來時,對用戶依賴程度高的協(xié)同過濾算法的計算量就開始快速增加,幾乎是呈線性增長。這極大地限制了系統(tǒng)的性能和響應(yīng)速度,這也就限制了基于用戶的協(xié)同過濾更廣泛的應(yīng)用。如果能有一種不過多依賴用戶的推薦就可以解決這個問題了,因為強(qiáng)大的緩存機(jī)制可以緩減高負(fù)荷的系統(tǒng)壓力。而下面將要介紹的“基于項目的協(xié)同過濾”似乎就正是為這種需求而生的。