隨著信息技術(shù)和互聯(lián)網(wǎng)的發(fā)展,人們逐漸從信息匱乏的時代走入了信息過載(information overload)的時代 。在這個時代,無論是信息消費者還是信息生產(chǎn)者都遇到了很大的挑戰(zhàn):對于信息消費者,從大量信息中找到自己感興趣的信息是一件非常困難的事情;對于信息生產(chǎn)者,讓自己生產(chǎn)的信息脫穎而出,受到廣大用戶的關(guān)注,也是一件非常困難的事情。推薦系統(tǒng)就是解決這一矛盾的重要工具。推薦系統(tǒng)的任務(wù)就是聯(lián)系用戶和信息,一方面幫助用戶發(fā)現(xiàn)對自己有價值的信息,另一方面讓信息能夠展現(xiàn)在對它感興趣的用戶面前,從而實現(xiàn)信息消費者和信息生產(chǎn)者的雙贏。
說起本書,還要追溯到2010年3月份的ResysChina推薦系統(tǒng)大會。在那次會議上,我遇到了劉江老師。劉老師看過我之前寫的一些推薦系統(tǒng)方面的博客,希望我能總結(jié)總結(jié),寫本簡單的書。當時國內(nèi)還沒有推薦系統(tǒng)方面的書,而國外已經(jīng)有這方面的專業(yè)書了,因此圖靈公司很想出版一本介紹推薦系統(tǒng)的書。所以,去年7月博士畢業(yè)時,我感覺有時間可以總結(jié)一下這方面的工作了,于是準備開始寫這本書。
寫這本書的目的有下面幾個。首先,從個人角度講,雖然寫博士論文時已經(jīng)總結(jié)了讀博期間在推薦系統(tǒng)方面的工作,但并沒有全部涉及整個推薦系統(tǒng)的各個方面,因此我很希望通過寫作這本書全面地閱讀一下相關(guān)的文獻,并在此基礎(chǔ)上總結(jié)一下推薦系統(tǒng)各個方面的發(fā)展現(xiàn)狀,供大家參考。其次,最近幾年從事推薦系統(tǒng)研究的人越來越多,這些人中有些原來是工程師,對機器學習和數(shù)據(jù)挖掘不太了解,有些是在校學生,雖然對數(shù)據(jù)挖掘和機器學習有所了解,卻對業(yè)界如何實現(xiàn)推薦系統(tǒng)不太清楚。因此,我希望能夠通過本書讓工程師了解推薦系統(tǒng)的相關(guān)算法,讓學生了解如何將自己了解的算法實現(xiàn)到一個真實的工業(yè)系統(tǒng)中去。
一般認為,推薦系統(tǒng)這個研究領(lǐng)域源于協(xié)同過濾算法的提出。這么說來,推薦系統(tǒng)誕生快20年了。這期間,很多學者和公司對推薦系統(tǒng)的發(fā)展起到了重要的推動作用,各種各樣的推薦算法也層出不窮。本書希望將這20年間誕生的典型方法進行總結(jié)。但由于方法太多,這些方法的歸類有很多不同的方式。比如,可以按照數(shù)據(jù)分成協(xié)同過濾、內(nèi)容過濾、社會化過濾,也可以按照算法分成基于鄰域的算法、基于圖的算法、基于矩陣分解或者概率模型的算法。為了方便讀者入門,本書基本采用數(shù)據(jù)分類的方法,每一章都介紹了一種可以用于推薦系統(tǒng)設(shè)計的、新類型的用戶數(shù)據(jù),然后介紹如何通過各種方法利用該數(shù)據(jù),最后在公開數(shù)據(jù)集上評測這些方法。當然,不是所有數(shù)據(jù)都有公開的數(shù)據(jù)集,并且不是所有算法都可以進行離線評測。因此,在遇到?jīng)]有數(shù)據(jù)集或無法進行離線評測的問題時,本書引用了一些著名學者的實驗結(jié)果來說明各種方法的效果。
為了使本書同時適合工程師和在校學生閱讀,本書在寫作中同時使用了兩種介紹方法。一種是利用公式,這樣方便有一些理論基礎(chǔ)的同學很快明白算法的含義。另一種是利用代碼,這樣可以方便工程師迅速了解算法的含義。不過因為本人是學生出身,工程經(jīng)驗還不是特別足,所以有些代碼寫得不是那么完美,還請工程師們海涵。
本書一開始寫的時候有3位作者,除了我之外還有豆瓣的陳義和騰訊的王益。他們兩位都是這方面的前輩,在寫作過程中提出了很多寶貴的意見。但因為二位工作實在太繁忙,所以本書主要由我操刀。但書中的很多論述融合了大家的思想和經(jīng)驗,是我們很多次討論的結(jié)果。因此在這里感謝王益和陳義二位合作者,雖然二位沒有動筆,但對這本書做出了很大的貢獻。
其次,還要感謝吳軍老師和谷文棟為本書作序。感謝谷文棟、穩(wěn)國柱、張夏天各自審閱了書中部分內(nèi)容,提出了很多寶貴的意見。感謝我在Hulu的同事鄭華和李航,鄭華給了我充分的時間完成這本書,對這本書能夠按時出版功不可沒,而李航審閱了書中的部分內(nèi)容,提出了很多有價值的修改意見。
最后感謝我的父母和妻子,他們在我寫作過程中給予了很大照顧,感謝他們的辛勤付出。
項亮,畢業(yè)于中國科學技術(shù)大學和中國科學院自動化所,研究方向為機器學習和推薦系統(tǒng),現(xiàn)任職于北京Hulu軟件技術(shù)開發(fā)有限公司,從事視頻推薦的研究和開發(fā)。2009年參加Netflix Prize推薦系統(tǒng)比賽獲得團體第二名,且于當年參與創(chuàng)建了Resys China推薦系統(tǒng)社區(qū)。
第1章 好的推薦系統(tǒng)
1.1 什么是推薦系統(tǒng)
1.2 個性化推薦系統(tǒng)的應(yīng)用
1.2.1 電子商務(wù)
1.2.2 電影和視頻網(wǎng)站
1.2.3 個性化音樂網(wǎng)絡(luò)電臺
1.2.4 社交網(wǎng)絡(luò)
1.2.5 個性化閱讀
1.2.6 基于位置的服務(wù)
1.2.7 個性化郵件
1.2.8 個性化廣告
1.3 推薦系統(tǒng)評測
1.3.1 推薦系統(tǒng)實驗方法
1.3.2 評測指標
1.3.3 評測維度
第2章 利用用戶行為數(shù)據(jù)
2.1 用戶行為數(shù)據(jù)簡介
2.2 用戶行為分析
2.2.1 用戶活躍度和物品流行度的分布
2.2.2 用戶活躍度和物品流行度的關(guān)系
2.3 實驗設(shè)計和算法評測
2.3.1 數(shù)據(jù)集
2.3.2 實驗設(shè)計
2.3.3 評測指標
2.4 基于鄰域的算法
2.4.1 基于用戶的協(xié)同過濾算法
2.4.2 基于物品的協(xié)同過濾算法
2.4.3 UserCF和ItemCF的綜合比較
2.5 隱語義模型
2.5.1 基礎(chǔ)算法
2.5.2 基于LFM的實際系統(tǒng)的例子
2.5.3 LFM和基于鄰域的方法的比較
2.6 基于圖的模型
2.6.1 用戶行為數(shù)據(jù)的二分圖表示
2.6.2 基于圖的推薦算法
第3章 推薦系統(tǒng)冷啟動問題
3.1 冷啟動問題簡介
3.2 利用用戶注冊信息
3.3 選擇合適的物品啟動用戶的興趣
3.4 利用物品的內(nèi)容信息
3.5 發(fā)揮專家的作用
第4章 利用用戶標簽數(shù)據(jù)
4.1 UGC標簽系統(tǒng)的代表應(yīng)用
4.1.1 Delicious
4.1.2 CiteULike
4.1.3 Last.fm
4.1.4 豆瓣
4.1.5 Hulu
4.2 標簽系統(tǒng)中的推薦問題
4.2.1 用戶為什么進行標注
4.2.2 用戶如何打標簽
4.2.3 用戶打什么樣的標簽
4.3 基于標簽的推薦系統(tǒng)
4.3.1 實驗設(shè)置
4.3.2 一個最簡單的算法
4.3.3 算法的改進
4.3.4 基于圖的推薦算法
4.3.5 基于標簽的推薦解釋
4.4 給用戶推薦標簽
4.4.1 為什么要給用戶推薦標簽
4.4.2 如何給用戶推薦標簽
4.4.3 實驗設(shè)置
4.4.4 基于圖的標簽推薦算法
4.5 擴展閱讀
第5章 利用上下文信息
5.1 時間上下文信息
5.1.1 時間效應(yīng)簡介
5.1.2 時間效應(yīng)舉例
5.1.3 系統(tǒng)時間特性的分析
5.1.4 推薦系統(tǒng)的實時性
5.1.5 推薦算法的時間多樣性
5.1.6 時間上下文推薦算法
5.1.7 時間段圖模型
5.1.8 離線實驗
5.2 地點上下文信息
5.3 擴展閱讀
第6章 利用社交網(wǎng)絡(luò)數(shù)據(jù)
6.1 獲取社交網(wǎng)絡(luò)數(shù)據(jù)的途徑
6.1.1 電子郵件
6.1.2 用戶注冊信息
6.1.3 用戶的位置數(shù)據(jù)
6.1.4 論壇和討論組
6.1.5 即時聊天工具
6.1.6 社交網(wǎng)站
6.2 社交網(wǎng)絡(luò)數(shù)據(jù)簡介
6.3 基于社交網(wǎng)絡(luò)的推薦
6.3.1 基于鄰域的社會化推薦算法
6.3.2 基于圖的社會化推薦算法
6.3.3 實際系統(tǒng)中的社會化推薦算法
6.3.4 社會化推薦系統(tǒng)和協(xié)同過濾推薦系統(tǒng)
6.3.5 信息流推薦
6.4 給用戶推薦好友
6.4.1 基于內(nèi)容的匹配
6.4.2 基于共同興趣的好友推薦
6.4.3 基于社交網(wǎng)絡(luò)圖的好友推薦
6.4.4 基于用戶調(diào)查的好友推薦算法對比
6.5 擴展閱讀
第7章 推薦系統(tǒng)實例
7.1 外圍架構(gòu)
7.2 推薦系統(tǒng)架構(gòu)
7.3 推薦引擎的架構(gòu)
7.3.1 生成用戶特征向量
7.3.2 特征?物品相關(guān)推薦
7.3.3 過濾模塊
7.3.4 排名模塊
7.4 擴展閱讀
第8章 評分預(yù)測問題
8.1 離線實驗方法
8.2 評分預(yù)測算法
8.2.1 平均值
8.2.2 基于鄰域的方法
8.2.3 隱語義模型與矩陣分解模型
8.2.4 加入時間信息
8.2.5 模型融合
8.2.6 Netflix Prize的相關(guān)實驗結(jié)果
后記