現(xiàn)在的推薦系統(tǒng)特別火啊肾筐。做得最好的應(yīng)該是Amazon了橡淆。
上面是Amazon的圖書推薦锡宋。
用的就是著名的?協(xié)同過(guò)濾(Collaborative filtering)算法触徐。
我們用一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明夺英。
下面是一個(gè)用戶購(gòu)買的書籍的表格晌涕。
?計(jì)算機(jī)網(wǎng)絡(luò)算法導(dǎo)論人工智能數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)概率統(tǒng)計(jì)GRE?詞匯手冊(cè)
小明101010
小張011010
小李110000
小王000011
上面的1表示購(gòu)買,0表示沒(méi)有購(gòu)買痛悯。
那么我們?cè)趺磥?lái)給小明推薦書籍呢余黎?
先來(lái)看看Amazon之前的傳統(tǒng)的協(xié)同過(guò)濾(Collaborative filtering)是怎么做的。
首先呢载萌,根據(jù)每個(gè)人買的書籍惧财,我們可以將每個(gè)用戶表示成一個(gè)向量。
例如扭仁,
V(小明)=<1, 0, 1, 0, 1, 0>
V(小張)=<0, 1, 1, 0, 1, 0>
V(小李)=<1, 1, 0, 0, 0, 0>
V(小王)=<0, 0, 0, 0, 1, 1>
然后呢垮衷,我們做這樣的假設(shè),買書習(xí)慣跟小明類似的人乖坠,如果購(gòu)買了小明沒(méi)有買的書搀突,那么我們就認(rèn)為,小明很有可能買這本書熊泵。
于是仰迁,問(wèn)題變成了找買書習(xí)慣跟小明類似的人。提到向量跟相似度顽分,我們自然就想到了用余弦來(lái)衡量相似度徐许。
扔個(gè)公式在此給那些忘記了的童鞋們。
接下來(lái)卒蘸,大家動(dòng)手算一下吧雌隅。
cos=0.67
cos=0.41
cos=0.41
呵呵,那么跟小明習(xí)慣最像的就是小張了缸沃。
然后恰起,我們發(fā)現(xiàn)小張買了《算法導(dǎo)論》,但是小明沒(méi)有買趾牧,于是我們就給小明推薦《算法導(dǎo)論》村缸。
這個(gè)方法看起來(lái)很不錯(cuò),那么為什么Amazon提出了另外的一種方法呢武氓?
再來(lái)看看Amazon的item-to-item協(xié)同過(guò)濾系統(tǒng)吧梯皿。
有一天呢仇箱,Amazon的一個(gè)工程師腦袋抽筋,不小心把上面的表格拿錯(cuò)方向了东羹。于是變成了下面的樣子剂桥。
?小明小張小李小王
計(jì)算機(jī)網(wǎng)絡(luò)1010
算法導(dǎo)論0110
人工智能1100
數(shù)據(jù)庫(kù)系統(tǒng)實(shí)現(xiàn)0000
概率統(tǒng)計(jì)0101
GRE?詞匯手冊(cè)0001
如果把書的那一行看成一個(gè)向量,有啥發(fā)現(xiàn)沒(méi)属提?對(duì)了权逗,我們可以找相似的人,我們還可以找相似的書T┮椤U遛薄!
這也就是Amazon的item-to-item協(xié)同過(guò)濾系統(tǒng)恕酸。
很多時(shí)候堪滨,創(chuàng)新就是這么簡(jiǎn)單,寫paper就是這么容易啊?蕊温,換個(gè)方向思考?(呃袱箱,那位童鞋,不是叫你把書拿反了看)义矛。
下面簡(jiǎn)單描述一下方法发笔。
我們可以先算出任意兩個(gè)物品之間的相似度(跟上面類似啊,自己算)凉翻。
接下開(kāi)我們看到小明買了《計(jì)算機(jī)網(wǎng)絡(luò)》和《人工智能》的書了讨,把跟這兩本書類似的書推薦給小明。
跟《計(jì)算機(jī)網(wǎng)絡(luò)》最相似的是?《算法導(dǎo)論》和?《人工智能》制轰,跟?《人工智能》最相似的是?《計(jì)算機(jī)網(wǎng)絡(luò)》和?《算法導(dǎo)論》前计。
最后的結(jié)果,是《算法導(dǎo)論》^_^艇挨。
用這個(gè)方法呢,我們就可以給用戶推薦說(shuō)韭赘,買了這個(gè)商品的用戶還購(gòu)買了***?
那這方法是不是有什么優(yōu)點(diǎn)呢缩滨?(廢話啊,不然Amazon會(huì)拿來(lái)用泉瞻,商人是很聰明的)
Tradition VS?Amazon
??? Amazon的CF算法可以在離線的情況下把item之間的相似度計(jì)算好脉漏。當(dāng)一個(gè)用戶登陸后,我們需要的也只是檢查用戶的購(gòu)買歷史袖牙,然后把跟這些item相似的item按一定的方法(比如受歡迎程度)排序展現(xiàn)給用戶侧巨。一般來(lái)說(shuō),用戶購(gòu)買的東西只是一個(gè)小的集合鞭达,因此不需要花很多的時(shí)間來(lái)計(jì)算司忱。
??? 而且皇忿,如果用戶沒(méi)有登陸,我們依然可以根據(jù)他的瀏覽歷史來(lái)做推薦坦仍。例如鳍烁,上面的圖片就是我在沒(méi)有登陸的情況下查看了一下《Beautiful Architecture》,然后Amazon給我做了推薦繁扎。
??? 對(duì)于Amazon這樣的網(wǎng)站來(lái)說(shuō)幔荒,用戶量是遠(yuǎn)遠(yuǎn)大于商品數(shù)量的。因此梳玫,Amazon的CF算法(計(jì)算商品相似度)比起傳統(tǒng)的CF算法(計(jì)算用戶相似度)爹梁,大大地節(jié)約了資源。
??? 對(duì)于一個(gè)未登陸的用戶來(lái)說(shuō)提澎,傳統(tǒng)的CF算法沒(méi)辦法根據(jù)他的瀏覽歷史來(lái)推薦(在線計(jì)算一個(gè)用戶跟其他所有用戶的相似度顯然不可能)姚垃。
Amazon.com recommendations item-to-item collaborative filtering, Greg Linden, Brent Smith, and Jeremy York ? Amazon.com