如今,在網上購物的人已經習慣收到係統為他們做出的個性化推薦,比如Netflix(美國在線影片租賃提供商)會推薦你可能喜歡的視頻,Pandora(美國流行音樂電台)會通過預測我們的喜好從而生成個性化的音樂流。
所有這些結果都源自各式各樣的推薦係統,它們依靠計算機算法運行,根據顧客的瀏覽、搜索、下單和喜好,為顧客選擇他們可能喜歡,並有可能購買的商品。推薦係統的初衷是幫助在線零售商提高銷售額,如今已成為一塊規模巨大且不斷增長的業務。
與此同時,推薦係統也正在向零售網站以外的領域拓展:大學用它們來引導學生選課,移動電話公司靠它們來預測哪些用戶有可能轉投另一家供應商,會議主辦方也測試過用它們來分配論文給審稿專家。
最初的推薦係統相對粗糙,對行為做出的預測往往並不準確。但隨著用戶數據來源的擴大,基於此上的算法得到迅速改善。今天,推薦係統都是些極其複雜和精專的係統,看起來似乎比你還要了解你自己。
那麽,推薦算法是怎麽“猜你喜歡”的?
你有沒有想過自己在亞馬遜眼中是什麽樣子?答案是:你是一個很大、很大的表格裏一串很長的數字。這串數字描述了你所看過的每一樣東西,你點擊的每一個鏈接以及你在亞馬遜網站上買的每一件商品;表格裏的其餘部分則代表了其他數百萬到亞馬遜購物的人。你每次登陸網站,你的數字就會發生改變;在此期間,你在網站上每動一下,這個數字就會跟著改變。這個信息又會反過來影響你在訪問的每個頁麵上會看到什麽,還有你會從亞馬遜公司收到什麽郵件和優惠信息。
推薦係統開發者試過用各種各樣的方法來采集和解析所有這些數據。近年來,多數人都選擇使用“個性化協同推薦”(Personalized Collaborative Recommender)算法,它也是亞馬遜、Netflix、Facebook以及一家英國流行音樂網站Last.fm的核心算法。之所以“個性”,是因為這種算法會追蹤用戶的每個行為,並以此進行推薦;而說它“協同”,則在於它能根據其他顧客對商品的喜好程度,決定是否對其進行關聯。
係統中幾種常用算法
User-User算法:計算用戶之間的相似度
“用戶關聯”(user-user)是根據用戶對同一件商品評分的相似度來計算他們之間的“距離”。舉例來說,如果兩個人對同一件商品的評分都是5,那麽他們之間的距離就為0,若有不同,則會出現一個相差值,差值越大,兩人的距離也就越遠。通過計算得出品味相近的客戶,我們便稱之為共有一個“鄰集”。
但是這種用戶關聯的策略效果並不好。首先,形成有意義的鄰集很難,用戶共同評分的地方往往很少,其中很多還是那種人人都喜歡的東西,比如一部備受好評的大片,不具備說服力。再來,由於用戶間“距離”的變化很快,很多計算都需要及時進行,這個過程遠遠跟不上人們在網站上的節奏。
Item-Item算法:計算物品之間的關聯
鑒於以上不足,如今,大部分的推薦係統都依靠“物品關聯”(item-item)的算法,它依據評分用戶的相似度來計算兩種物品之間的距離。比如喜歡湯姆·克蘭西作品(《獵殺“紅十月”號》)的人,很可能也會給克萊夫·卡斯勒(美國驚險小說協會主席)的書打高分。一對物品之間的距離根據大量用戶的評分計算得出,一段時間裏相對穩定,由此推薦係統可以預先計算距離,並生成推薦結果。
然而,無論是“用戶關聯”還是“物品關聯”,都存在一個問題,即對於同一件物品,用戶前後的評分可能並不相同。品味、心情和印象隨時都是變化。麻省理工學院上世紀90年代的一項研究表明,最初打分一年後,用戶的評分會發生平均1分(滿分7分)的變動。研究人員一直嚐試在模型中納入這一變量。比如,當用戶給某個商品打了分,但這個分數與推薦算法過去記錄的關於個人或物品信息不符,有些推薦算法就會邀請用戶再次對這個商品進行評價。
除此之外,這兩種算法還有一個更大的缺陷:太機械。它們能發現喜歡同樣物品的人,但卻忽略了愛好非常相似的潛在用戶組合。比如說你喜歡莫奈的睡蓮,那麽在這個法國印象派大師的250幅睡蓮中,你最喜歡哪一幅?一群喜歡莫奈的人當中,每個人喜歡的睡蓮可能都不相同,這兩種算法將很難識別出他們共同的愛好。
降維算法:把事物特征一般化
在此基礎上,一種更科學的算法——降維應運而生。通過降維(Dimensionality Reduction)把事物更加一般化地表現出來。這種方法在計算量上要密集得多,不過隨著計算機的發展,它也在逐漸取得突破。
拿你喜歡的食物當例子。你可以把這些信息用一個巨型矩陣表示出來,你可能給了烤牛排5星、紅燒小排4星、烤雞翅2星、凍豆腐卷1星、奶酪烤蘑菇5星、鹽水毛豆4星,等等。
然而,推薦算法並不關心你給哪種食物評了多少顆星,它想要了解的是你一般而言的喜好,以便將這個信息應用到更豐富的食物上。比方說,基於你上麵給出的信息,算法可能會認為你喜歡牛肉、鹹的東西和烤製菜品,不喜歡雞肉和任何油炸的東西,不喜歡也不討厭蔬菜。
以此類推,你愛吃的食物所擁有的特點或者說維度,其數量遠低於符合你要求的食物所包含的維度。通過查對這些維度,推薦算法可以迅速決定你是否會喜歡一種新的食物(比方說鹽焗排骨),方法就是把這種食物的各項維度(鹹的、牛肉做的、不是雞肉、不是炒的、不是蔬菜、不是烤的)同你的資料進行比對。
這是一個很酷的解決方案,更為一般性的呈現,使得推薦算法能夠準確地發現有著相似性但喜好不同的用戶。而且它大幅壓縮了矩陣的規模,使算法變得更加高效。創建矩陣所需要的時間會隨著客戶和產品數量的增多而飛速增長,一旦收到新的評分,矩陣就已經過時,但即便如此,它仍然能以一個挺不錯的水平運作。