3dwoo大學簡體電腦書店
智能Web算法
( 簡體 字)
作者:阿穩,陳鋼類別:1. -> 程式設計 -> 綜合
出版社:電子工業出版社智能Web算法 3dWoo書號: 40868
詢問書籍請說出此書號!
有庫存
NT售價: 445
出版日:3/1/2015
頁數:400
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 字 )
ISBN:9787121254567 加入購物車加到我的最愛 (請先登入會員)
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社)
前言 ........XV
致謝......XIX
關于本書 .........XXI
1 什么是智能 Web......1
1 . 1 智能 Web 應用實例 ........ 3
1 . 2 智能應用的基本要素 ......... 4
1 . 3 什么應用會受益于智能 ..... 5
1.3.1 社交網絡 ............. 6
1.3.2 Mashup ......... 7
1.3.3 門戶網站 ............. 8
1.3.4 維基........... 9
1.3.5 文件分享網站 ....... 9
1.3.6 網絡游戲 ............ 11
1 . 4 如何構建智能應用......... 11
1.4.1 檢查功能和數據 .... 12
1.4.2 獲取更多的數據 .... 12
1 . 5 機器學習、數據挖掘及其他 ....... 16
1 . 6 智能應用中八個常見的誤區 ...... 17
1.6.1 誤區 1:數據是可靠的 ........... 18
1.6.2 誤區 2:計算能馬上完成......... 19
1.6.3 誤區 3:不用考慮數據規模 ........ 19
1.6.4 誤區 4:不考慮解決方案的可擴展性........ 19
1.6.5 誤區 5:隨處使用同樣的方法............ 19
1.6.6 誤區 6:總是能知道計算時間.......... 20
1.6.7 誤區 7:復雜的模型更好 ......... 20
1.6.8 誤區 8:存在無偏見的模型 ............ 20
1 . 7 小結 ......... 20
1 . 8 參考資料............ 21
2 搜索...........22
2 . 1 用 Lucene 實現搜索 ...... 23
2.1.1 理解 Lucene 代碼 ....... 24
2.1.2 搜索的基本步驟.... 31
2 . 2 為什么搜索不僅僅是索引 .... 33
2 . 3 用鏈接分析改進搜索結果 ......... 35
2.3.1 PageRank 簡介 ........ 35
2.3.2 計算 PageRank 向量 ...... 37
2.3.3 alpha:網頁間跳轉的影響 ......... 38
2.3.4 理解冪方法 ......... 40
2.3.5 結合索引分值和 PageRank 分值 .......... 45
2 . 4 根據用戶點擊改進搜索結果 ........ 47
2.4.1 用戶點擊初探 ............. 48
2.4.2 樸素貝葉斯分類器的使用 ............... 50
2.4.3 整合 Lucene 索引、 PageRank 和用戶點擊 .......... 54
2 . 5 Word、 PDF 等無鏈接文檔的排序 ......... 58
2.5.1 DocRank 算法簡介 ......... 58
2.5.2 DocRank 的原理 ......... 60
2 . 6 大規模實現的有關問題 ...... 65
2 . 7 用戶得到了想要的結果嗎?精確度和查全率 ............ 67
2 . 8 總結 ........ 69
2 . 9 To Do ...... 70
2.10 參考資料 ......... 72
3 推薦系統 ......73
3 . 1 一個在線音樂商店:基本概念 ........ 74
3.1.1 距離與相似度的概念 ....... 75
3.1.2 走近相似度的計算 ............... 80
3.1.3 什么才是最好的相似度計算公式 .............. 83
3 . 2 推薦引擎是怎么工作的 ....... 84
3.2.1 基于相似用戶的推薦 ....... 85
3.2.2 基于相似條目的推薦 ....... 94
3.2.3 基于內容的推薦 ........ 98
3 . 3 推薦朋友、文章與新聞報道 ........ 104
3.3.1 MyDiggSpace.com 簡介 ......... 105
3.3.2 發現朋友 .......... 106
3.3.3 DiggDelphi 的內部工作機制 ............. 108
3 . 4 像 Netflix.com 那樣推薦電影 ........ 114
3.4.1 電影數據集的介紹及推薦器 ....... 114
3.4.2 數據標準化與相關系數 ........ 117
3 . 5 大規模的實現與評估 ............... 123
3 . 6 總結 .............. 124
3 . 7 To Do ............. 125
3 . 8 參考資料 ...... 127
4 聚類:事物的分組 .........128
4 . 1 聚類的需求 ....... 129
4.1.1 網站中的用戶組:案例研究 ........... 129
4.1.2 用 SQL order by 子句分組 ...... 131
4.1.3 用數組排序分組 ....... 132
4 . 2 聚類算法概述 ....... 135
4.2.1 基于分組結構的聚類算法分類 ............ 136
4.2.2 基于數據類型和結構的聚類算法分類 ....... 137
4.2.3 根據數據規模的聚類算法分類 .......... 137
4 . 3 基于鏈接的算法 .............. 138
4.3.1 樹狀圖:基本的聚類數據結構 ........ 139
4.3.2 基于鏈接的算法概況 ............. 141
4.3.3 單鏈接算法 ............. 142
4.3.4 平均鏈接算法 ........ 144
4.3.5 最小生成樹算法 ....... 147
4 . 4 k-means 算法 ....... 149
4.4.1 初識 k-means 算法 ............. 150
4.4.2 k-means 的內部原理 ....... 151
4 . 5 魯棒的鏈接型聚類( ROCK) ............ 153
4.5.1 ROCK 簡介 ...... 154
4.5.2 為什么 ROCK 這么強大 ......... 154
4 . 6 DBSCAN......... 159
4.6.1 基于密度的算法簡介 ....... 159
4.6.2 DBSCAN 的原理 .......... 162
4 . 7 超大規模數據聚類 ...... 165
4.7.1 計算復雜性 ......... 166
4.7.2 高維度 ............. 167
4 . 8 總結 ............. 168
4 . 9 To Do ...... 169
4.10 參考資料 ...... 171
5 分類:把事物放到它該在的地方 ......172
5 . 1 對分類的需求 ............. 173
5 . 2 分類器的概述 ........... 177
5.2.1 結構分類算法 ...... 178
5.2.2 統計分類算法 ..... 180
5.2.3 分類器的生命周期 ............ 181
5 . 3 郵件的自動歸類與垃圾郵件過濾 ............... 182
5.3.1 樸素貝葉斯分類 ......... 184
5.3.2 基于規則的分類 ............. 197
5 . 4 用神經網絡做欺詐檢測 ...... 210
5.4.1 交易數據中關于欺詐檢測的一個用例 ....... 210
5.4.2 神經網絡概覽 ........ 212
5.4.3 一個可用的神經網絡欺詐檢測器 ...... 214
5.4.4 神經網絡欺詐檢測器剖析 ............... 218
5.4.5 創建通用神經網絡的基類 ............... 226
5 . 5 你的結果可信嗎 ......... 232
5 . 6 大數據集的分類 ........ 235
5 . 7 總結 ...... 237
5 . 8 To Do .............. 239
5 . 9 參考資料 ........ 242
6 分類器組合 ........244
6 . 1 信貸價值:分類器組合案例研究 ....... 246
6.1.1 數據的簡要說明 ........ 247
6.1.2 為真實問題生成人工數據 ....... 250
6 . 2 用單分類器做信用評估 ...... 255
6.2.1 樸素貝葉斯的基準線 ........... 255
6.2.2 決策樹基準線 ............. 258
6.2.3 神經網絡的基準線 ...... 260
6 . 3 在同一個數據集中比較多個分類器 ............ 263
6.3.1 McNemar 檢驗 ....... 264
6.3.2 差額比例檢驗 ........... 266
6.3.3 Cochran Q 檢驗與 F 檢驗 ....... 268
6 . 4 bagging: bootstrap 聚合( bootstrap aggregating) ...... 270
6.4.1 bagging 實例 ......... 272
6.4.2 bagging 分類器底層細節 ............. 274
6.4.3 分類器集成 ......... 276
6 . 5 boosting:一種迭代提高的方法 ...... 279
6.5.1 boosting 分類器實例 ...... 280
6.5.2 boosting 分類器底層細節 ...... 282
6 . 6 總結 ...... 286
6 . 7 To Do ............. 288
6 . 8 參考資料 ........ 292
7 智能技術大匯集:一個智能新聞門戶 ........293
7 . 1 功能概覽 ........ 295
7 . 2 獲取并清洗內容 ........ 296
7.2.1 各就各位——預備——開抓! ........... 296
7.2.2 搜索預備知識回顧 ............... 298
7.2.3 一個抓取并處理好的新聞數據集 ...... 299
7 . 3 搜索新聞 ......... 301
7 . 4 分配新聞類別 ........... 304
7.4.1 順序問題 ........ 304
7.4.2 使用 NewsProcessor 類進行分類 ........ 309
7.4.3 分類器 ............ 310
7.4.4 分類策略:超越底層的分類 ........ 313
7 . 5 用 NewsProcessor 類創建新聞分組 ............. 316
7.5.1 聚類全部文章 .............. 317
7.5.2 在一個新聞類別中聚類文章 ....... 321
7 . 6 基于用戶評分的動態內容展示 ........ 325
7 . 7 總結 ...... 328
7 . 8 To Do .............. 329
7 . 9 參考資料 ........ 333
附錄 A BeanShell 簡介 ........334
A.1 什么是 BeanShell ......... 334
A.2 為什么使用 BeanShell ...... 335
A.3 運行 BeanShell .......... 335
A.4 參考資料 .......... 336
附錄 B 網絡采集 ........337
B.1 爬蟲組件概況 ........ 337
B.1.1 采集的步 338
B.1.2 我們的簡單爬蟲 ............. 338
B.1.3 開源 Web 爬蟲 ............. 339
B.2 參考資料 .......... 340
附錄 C 數學知識回顧 .......341
C.1 向量和矩陣 ....... 341
C.2 距離的度量 ....... 342
C.3 高級矩陣方法 ....... 344
C.4 參考資料 ........ 344
附錄 D 自然語言處理 .......345
D.1 參考資料 ...... 347
附錄 E 神經網絡 ........348
E . 1 參考資料 ........... 349
索引 ........350
本書涵蓋了五類重要的智能算法:搜索、推薦、聚類、分類和分類器組合,并結合具體的案例討論了它們在 Web 應用中的角色及要注意的問題。除了第 1 章的概要性介紹以及第 7 章對所有技術的整合應用外,第 2~6 章以代碼示例的形式分別對這五類算法進行了介紹。

譯 者 序
在這篇文章里,我會談談自己在翻譯過程中的一些比較深刻的感受,以期讓讀
者在正式閱讀本書之前對它有一個整體的了解,比如,書中算法講解背后所隱含的
更重要的思想,又如作者使用了什么樣的方式來傳遞書中的知識,以及本書的受眾
群體。
雖然書中各章論述的是不同的理論和不同的應用,但作者一直在試圖傳遞一些
這個領域里不變的樸素而實用的思想,其中一個最重要的思想是:組合不同的技術,
以得到更好的結果。 這無論是在學術界, 還是在業界, 都已經逐漸成為潮流。 在 2011
年中國推薦系統峰會上,張棟博士在總結自己參加 Netflix 競賽感受時就曾說到:一
個好的推薦器無法打敗無數技術組合起來的推薦器。而書中第 3 章也引述了 Netflix
競賽獲勝者的話: “我們沒有發現完美的模型, 我們最好的結果是來自對具有互補作
用的模型預測結果的組合。”
此外,書中還反復強調了一些很具有現實參考意義的觀點,限于篇幅,簡要列
舉幾點如下:
( 1)對問題本質及數據性質的理解比使用算法更重要。 2011 年中國推薦系統峰
會也有一個類似的為人們所爭議的熱點,有的與會者認為以重要性而論,領域知識>
數據>算法。有過一定從業經驗的算法工作者,對此應能有深刻體會。
( 2)實驗環境的數據要能代表現實數據。從統計與抽樣理論的角度來說,這個
命題的重要性毋庸置疑。而對于先在離線環境中訓練模型,然后在生產環境中使用
模型的智能應用模式而言,這一點尤其重要,你是不可能把一個在北京計算得到的
IV 智能 Web 算法
空氣質量預測模型直接拿到北海道去用的。
( 3)當你想了解所做的改變產生的效果時, 最好一次只改變一個因素。這其實
與 AB-Test 的思想具有異曲同工之妙,要想研究某個參數或某個變量修改前后的差
異,需要盡量保證除此之外的其他因素不變。
所以,這不單是一本介紹算法之術的書, 更是一本介紹算法之道的書。讀者在
學習其中各種具體算法的同時, 不妨多思考作者總結出來的這些實戰性很強的經驗,
因為那些算法不一定是最新最有效的,但那些經驗教訓則是需要經歷實際的成敗方
能總結出來的。此外,我們建議讀者不要只看代碼的實現,還要關注蘊含于其中的
一些設計原理以及對問題建模的方式。因為在實際的應用環境中,你需要考慮的可
能不僅僅是一兩個算法,而是一個具體的系統問題。
無論是多么樸素和實用的思想,傳授起來也難免讓人覺得枯燥,所以作者盡最
大努力從工程化的角度來介紹這些算法。 其中一種嘗試就是盡量摒棄對數學公式的
使用,而代之以論述具體問題與代碼說明的方式來解釋算法。是否依賴數學公式來
說明問題是一個值得商榷的事情,數學公式就好像是一種共同的語言或標準,只要
大家都懂這種語言,溝通基本上不會存在問題,而且簡練、優雅,無二義性。但霍
金也曾經說過,多一個數學公式,就會嚇跑一半的讀者,所以在他那本經典著作《時
間簡史》中只保留了最重要的一個公式。 近年來,面向大眾的技術書籍也有這種盡
量擺脫乏味的數學公式堆砌的風潮,特別是國外的很多優秀著作,即使只用很少的
公式也能把問題說清楚。
依我的觀點,一本書籍對數學公式的取舍與使用量的多少,取決于作者對讀者
人群的界定,以及這一讀者群中公認的溝通標準。無疑,在 IT 技術從業者中,按通
用性而論:自然語言>代碼>數學公式。雖然作為這一領域的從業者,懂得基本的數
學知識是必需的,但為了使本書適用于更廣泛的程序員階層人群,作者盡力使用代
碼與自然語言來描述那些算法,而不是數學公式。于是,你將會很驚訝地看到,一
本講述算法的著作里居然找不到幾個數學公式,而且這一點兒都不妨礙你對這些算
法含義的理解。
另一方面,要填平從理論到實踐、從學校到業界的鴻溝并不是件容易的事情,
特別是在我國現有的教育體系下,在校期間學習的知識與現實需求的差異尤其大。
本書作者既有工程的從業背景,又有非常豐富的機器學習研究經歷,使得他可以用
一種實用性較強的方式把業界所需要的知識點傳遞出來。被證明最直接有效的傳遞
譯者序 V
知識的方式當然就是案例化的教學,書中每一個講授具體算法的章節都會輔之以一
個現實中的案例,比如文檔搜索引擎、在線音樂推薦商店、用戶的信用等級分類等。
除了案例化的知識傳授方式,每章后的 To Do 事項則充分體現了西方人所崇尚
的啟發式教學思想,雖然有的讀者也許并不樂意自己再去探索,而更愿意作者把所
有的答案都告訴我們,但如果對照著現成的代碼把一個個具有探索性意味的 To Do
事項完成,你獲得的將是超越本書所教授的內容的,屬于自己的知識。學會獨立思
考、獨立實踐,也是一名普通工程師與優秀工程師的重要分水嶺。
雖然有不少的優點,但本書也仍有其不足之處。書中對智能技術的主要方面都
有所論及,但在如此篇幅的書中把所有問題都論述清楚是不可能的,過于追求全面
就會導致深度方面稍有缺乏,所有領域相關的問題未必能方方面面都討論透徹,對
于資深從業人員來說,未免會有點意猶未盡的感覺。此外,雖然本書是本著工程的
理念來講述的,在代碼實現方面也考慮了一些工程上效率的因素,但這些代碼畢竟
只是供教學演示之用,為追求簡明易懂而未免顯得簡陋,所以不能寄希望于把它們
直接用于自己的生產環境中。
這不是一本適用于所有對該領域感興趣的讀者的書,它有其適用人群。
適用人群之一:軟件或互聯網從業工程師,如果你原來沒有接觸過相關的知識,
而又想讓自己的代碼擁有更多的智能化特性,這本書也許能給你帶來新的啟發和新
的思維。
適用人群之二:如果你已經是書中所涉及領域的從業人員,那么閱讀本書也許
會幫助你梳理原有的知識體系,但如果你在尋求某個領域的最新技術動向,此書則
不合適,因為書中講述的都是業界上已經獲得成熟應用的概念與算法。
適用人群之三:想在數據挖掘、智能技術上發力的企業管理人員或產品經理。
據我了解,一些互聯網公司在發展到達一定的階段后,純粹的人力與資金上的增加
已經無法帶動效益的同比增長,他們都在尋求發展模式上的轉變,轉粗放型增長為
技術型增長,希望這本書關于智能技術的概念與案例能給有這方面需求的人帶去一
定的幫助。
適用人群之四:在自己的職業規劃之路中,有算法工程師、數據挖掘工程師、
數據分析師這些關鍵詞的在校學生。
本書由我及我的搭檔陳鋼聯合翻譯完成。 我們很希望,該書的出版能為正在思
考自己出路的在校學生,或每天在計算機面前敲打著代碼的工程師們,提供多一種
VI 智能 Web 算法
職業發展的可能性。只有更多優秀的人才投身于這個領域,才能使國內 IT 公司對智
能技術應用產生廣泛的重視,進而推動國內 IT 行業的創新。如果這本書能成為未來
許多年算法工程師的入門書籍,則是它最大的成功之處。
這本書的翻譯出版,首先要感謝我所任職的公司豆瓣網,如果沒有這個寬松自
主的工作環境,我很難把兩三個月幾乎所有的業余時間都花在這件事情上。當然,
如果沒有在這個地方三年來的從業經驗, 以及在那幫優秀的同事身邊成長的經歷,
我從一開始就不會有信心把這件事情做好。我還要特別感謝豆瓣電臺,正是它知心
動聽的歌曲陪伴我度過了那一個個枯燥的夜晚。還有有道詞典,它在網絡釋義與例
句上給予了我莫大的幫助。而恰巧,這兩個個性鮮明的互聯網產品正是本書所敘述
的智能 Web 技術應用的杰出代表。同樣要感謝電子工業出版社博文視點公司的編輯
們,以及給我們提出過寶貴意見的中國推薦社區( http://resyschina.com)的朋友們。
因為自身水平有限,在理解與翻譯本書1的過程中,一些知識的傳遞未必到位,
但認識總是可以通過交流與思考來加深的。所以,接下來我們也希望借助豆瓣的讀
書筆記功能把我們在翻譯過程中得到的一些認識寫下來與大家分享交流。大家在閱
讀過程中也不妨通過這種形式來分享自己的理解,提出自己的問題,形成一種思想
上的互動,因為與同行交流是促進思考與進步的最重要手段。讀者可以在博客或豆
瓣上找到我們。
阿穩: http://www.wentrue.net/blog/或http://www.douban.com/people/wentrue/
阿穩
感謝昆明理工大學的彭瑋老師和中國推薦系統小組中的各位同學在百忙之中抽
時間審讀我們的譯稿。感謝電子工業出版社博文視點的各位編輯在本書翻譯過程中
給予的指點和幫助。特別要感謝本書的另外一位譯者阿穩在技術上的指點。沒有你
們的支持和幫助,本書的翻譯工作不可能這么順利。在翻譯本書的幾個月里,尤其
是最后審稿的階段,我不得不將本應該陪伴已懷孕的妻子的時間投入到本書的翻譯
工作中,特將本書獻給我的妻子王倩和我們即將到來的孩子。
陳鋼: http://gossipcoder.com/或 http://www.douban.com/people/oldbeggar/
陳鋼
1 由于本書篇幅較大,為了節省成本和便于讀者對照原書閱讀,我們用“ ”標出了原書對應的頁碼,本書
的索引所列頁碼為原英文版頁碼。
前 言
在讀研究生時,我開始接觸到機器學習, 尤其是模式識別。我的工作主要是數
學建模和數值模擬,而海量數據的模式識別其實在很多領域都有著廣泛的應用。以
前也未曾想到,這些年我會如此深入地探索機器學習領域。
1999 年,我完成學業,開始進入企業工作。在我擔任顧問的一個項目中,我們
試圖根據患者的心電圖判斷出他們患心臟病的概率。顯然,對這種問題,不存在也
不可能推導出一個精確的數學公式。現實中,心臟病專家已經對大量的患者患心臟
病的風險做出了診斷,而我們建模所使用的方法要能從這些病歷中學習如何預測患
心臟病的風險。通俗地說,我們要尋找的是能從用戶輸入的數據中不斷地“學習”
新知識的方法。
同時,在 20 世紀 90 年代,各種因素匯聚在一起導致了一個新產業的飛速發
展——網絡變得無處不在!根據摩爾定律, CPU 的運行速度變得更快,而且價格更
便宜。 RAM 模組、 硬盤等各種計算機硬件的性能也日新月異, 而價格則是一降再降。
隨之而來的是,網絡連接的帶寬不斷增長,價格也能被更多的人接受。此外,健壯
的 Web 應用開發技術已經成熟,而各種開源項目的蓬勃發展更是促進了相關技術的
進步。所有的這些因素構成了現在我們稱為 Web 的龐大生態系統。
顯然,作為軟件工程師和 Web 開發人員,我們首要的任務就是為構建健壯、可
擴展、美觀的 Web 應用提供足夠的技術保障。正是如此,在過去的十年里,人們為
此做出了巨大的努力,也獲得了可觀的成績。當然,沒有最好,只有更好,我們依
然有進步的空間。雖然我們一直在追求更健壯、可擴展性更好、更美觀的 Web 應
XVI 智能 Web 算法
用,然而我們已經遇到了瓶頸。在我們看來,單調乏味的互聯網應用已經成為過
去,僅僅是聚合數據,簡單地根據預定邏輯工作的用戶請求/響應模型也已經走到
了盡頭。
現在,在某些應用中已經出現了一股新的浪潮,讓人們對互聯網應用有了新的
認識。這就是本書中所說的智能應用( intelligent application)。不同于傳統的應用,
智能應用能根據用戶的輸入調整自己的行為,就像我那個能根據心電圖預測患心臟
病概率的建模軟件。
最近五年,我漸漸地發現,對于大部分軟件開發人員來說,構建智能應用的技
術依然未曾掀開神秘的面紗。在我看來, 這是由兩方面的原因造成的。一方面,這
些技術潛在的商業價值可以帶來巨大的經濟回報。所以從經濟方面考慮,對這些應
用進行保護,隱藏其中的關鍵細節是可以理解的。另一方面,幾乎所有的相關技術
都源自學術研究,需要較強的數學背景才能理解。對于第一個原因,我們無能為力,
但在隨時能獲取海量知識的今天,第二個原因依然是不可逾越的障礙嗎?我可以簡
短而明確地回答“不是!”。如果想要詳細地回答,那就閱讀本書吧!
我決定寫這本書,是為了說明這些技術是可以用算法來表示的,并不需要讀者
有很強的數學基礎。本書的目的是讓讀者掌握一些有助于在應用中構建智能行為的
技術,同時盡可能地降低掌握這些技術的數學門檻。代碼以算法的形式包含了所有
必要的數學知識。
最初,我想用開源的庫來演示這些技術,但大部分的此類庫都是為了解決具體問
題,而不是為了演示底層的技術而開發的。因此,這些庫的源代碼通常都是冗長且晦
澀難懂的。 顯然, 如果能有清晰、 帶注釋的代碼, 一定會讓本書的讀者獲益更多。 Dmitry
就是在這個時候加入了本書的寫作,并最終編寫完成了本書中的大部分代碼。
盡管增長緩慢,但關于這個激動人心的新領域的書籍肯定將逐漸增多。本書只
是一本有關這個依然在迅速增長的大領域的入門書籍。所以,本書所涉及的算法是
很有限的,對算法的解釋也比較簡要。我的目標是選擇并探討一些有代表性的話題,
而不是寫一本代碼手冊或是有可能讓讀者暈頭轉向,內容包羅萬象的書。
我希望能通過以下四個方面來實現我的目標:
集中精力關注清晰易懂的例子。
使用高級腳本語言來演示算法的使用,就像讀者在自己的應用中使用這些算
法一樣。
前 言 XVII
通過大量的 To Do 事項讓讀者有機會嘗試并思考這些代碼。
編寫高水平的、易讀的代碼。
那么,端著您最喜愛的熱飲,坐好,來試試這些聰明的應用吧!它們就在本書
中!
Haralambos Marmanis

致 謝
感謝 Manning 出版公司的人讓我們有機會出版這本書。他們不僅讓本書從書稿
最終變成一本書,而且在我們的寫作進度一再延遲的情況下非常耐心地幫助我們最
終完成了本書。我們尤其要感謝 Marjan Bace、 Jeff Bleiel、 Karen Tegtmeyer、 Megan
Yockey、 Mary Piergies、 Maureen Spencer、 Steven Hong、 Ron Tomich、 Benjamin Berg、
Elizabeth Martin,以及 Manning 出版公司所有為本書做出貢獻的人們,感謝你們的
努力工作。
對審稿人和 Author Online 論壇訪問者在本書上耗費的時間和精力,以及給我們
的寶貴意見,我們也深表謝意,你們的建議從諸多方面提升了本書的質量。我們知
道真正的“自由”時間對于專業人員是非常有限的,所以請接受我們對你們的貢獻
表示誠摯的謝意。
我們尤其要感謝下面這些在本書撰寫過程中反復閱讀書稿,并提出寶貴意見的
審稿人: Robert Hanson、 Sumit Pal、 Carlton Gibson、 David Hanson、 Eric Swanson、
Frank Wang、 Bob Hutchison、 Craig Walls、 Nicholas C. Heinle、 Vlad Gorsky、 Alessandro
Gallo、 Craig Lancaster、 Jason Kolter、 Martyn Fletcher 和 Scott Dawson。很重要的是,
我們要誠摯地感謝本書的技術校對員 Ajay Bhandari,他在本書付梓之前仔細地閱讀
了每一章的內容,并檢查了所有的代碼。
H. Marmanis
我要感謝我的父母——Eva 和 Alexander,他們循序漸進地引導我對學習的好奇
XX 智能 Web 算法
心和熱情,這正是我廢寢忘食寫作和研究的原動力。一生都難以報答他們的養育之
恩。
我由衷地感謝我親愛的妻子 Aurora 和我的三個兒子: Nikos、 Lukas、 Albert,
他們是我生活中最大的驕傲和樂趣,感謝他們對我的愛、耐心和理解。孩子們永不
停歇的好奇心促使我不斷地學習。此外,還要感謝我的岳父岳母 Cuchi 和 Jose、我
的姐妹 Maria 和 Katerina,以及我最好的朋友 Micheal 和 Antonio,感謝他們長期以
來給我的鼓勵和無條件的支持。
無論如何,我都不會忘記 Drs. Amilcar Avendaño 和 Maria Balerdi 的大力支持,
他們教給我很多關于心臟的知識,還資助了我關于“學習”的早期研究。此外,還
要感謝 Leon Cooper 教授和布朗大學所有讓人嘖嘖稱奇的人們,他們對人類大腦的
研究熱情感染了很多像我一樣的人,并激發了我對智能應用的研究興趣。
對于曾經和現在的同僚 Ajay Bhandari、 Kavita Kanetkar、 Alexander Petrov、
Kishore Kirdat 等在智能研究中給予我的鼓勵和支持,我的感激之情遠遠超出這寥寥
數行文字。
D. Babenko
首先,我要感謝我親愛的妻子 Elena。在撰寫本書一年多的時間里,作為丈夫,
我的時間幾乎都花在了工作或是本書的撰寫上,她對此卻毫無怨言。她的支持和鼓
勵為本書的順利完成提供了一個完美的氛圍。
我還要感謝所有現在或曾經與我共事,并影響了我的專業生涯,給我帶來無數
靈感的同事: Konstantin Bobovich、 Paul A. Dennis、 Keith Lawless 和 Kevin Bedell。
最后,我要感謝我的合著者 Marmanis 博士讓我參與這項工作。
關于本書
現代 Web 應用那絢麗流暢的用戶界面經常為人津津樂道。這些應用的另一個方
面則不太為人所知,那就是利用各種技術對信息進行智能化的處理,帶來其他方法
所不能給予的價值。這些技術的成功例子包括我們常見的 Google、 Netflix 和 Amazon。
這些應用的核心智能是由一些算法實現的,而本書要介紹的就是這些算法。
本書涵蓋五類重要的算法:搜索、推薦、 聚類、分類和分類器融合,其中的每
一個算法都可以寫成一本完整的書,所以面面俱到并不是本書的目的。本書只會對
這五類算法做基本的介紹,我們的目的是展示智能應用中的基本算法,而不是覆蓋
計算智能中的所有算法。本書是為普通讀者撰寫的,所以盡可能地降低了對讀者知
識背景的要求。
本書的一大特點是在每章結尾都有一個很特殊的小節,我們稱為 To Do,其目
的不僅僅是提供額外的參考資料,每個 To Do 小節還會指導讀者更深入地了解這一
章的主題,激起讀者思考其他可能的好奇心,以及現實應用中可能要面對的挑戰。
本書大量地使用了 BeanShell 腳本庫,目的有兩個:其一,讓讀者從更高的層次
上理解算法,避免過早地陷入細節;其二,清楚地描述如何將這些算法整合到讀者
自己的應用中。在大部分情況下,讀者只要寫很少的幾行代碼就能使用本書附帶的
庫。不僅如此,為了維護這些源代碼,確保其時效性,我們還在 Google Code
( http://code.google.com/p/yooreeka/)上專門建了一個項目。
XXII 智能 Web 算法
全書結構
本書共分 7 章,第 1 章是簡介,第 2~6 章分別介紹搜索、推薦、聚類、分類和
分類器組合,第 7 章介紹如何把前幾章中的算法整合到一個具體的應用中。
盡管章節之間有一些聯系,但這并不會妨礙你單獨閱讀第 1~5 章中的任何一
章。第 6 章是以第 5 章為基礎的,如果單獨閱讀第 6 章,則可能有些難度。第 7 章
涉及本書所有的內容,單獨閱讀該章也會有些困難。
第 1 章介紹了智能應用的概況,并舉例說明了智能應用的意義。這一章從實踐
的角度定義了智能 Web 應用和一些設計原則,接著介紹了六大類 Web 應用,這些應
用都可以利用本書中介紹的智能算法加以改進。這一章還講述了本書所涉及的算法
的歷史起源,及其與人工智能、機器學習、數據挖掘、軟計算等領域的關系。最后
還總結了八條具有重要實踐意義的設計原則。
第 2 章首先描述了依賴于傳統信息獲取技術的搜索方法。對傳統方法稍作總結
后, 逐步轉向不僅僅是索引的搜索, 其中包括最負盛名的鏈接分析算法——PageRank。
還有一節介紹了如何對用戶的點擊進行分析來提高搜索結果的質量。這項技術能獲
知用戶對某個網站或話題的喜好,而且有很大的改進潛力,可以擴展出很多新的特
性。
第 2 章還介紹了一個用于非網頁文檔搜索的新算法——DocRank。這個算法有
一定的前景,但更重要的是這個算法說明了稍做改動,鏈接分析中的基本數學原理
就能快速地擴展到其他應用中。另外還介紹了一些處理超大網絡時可能會遇到的挑
戰。最后,介紹了有關搜索結果的可信度和驗證的問題。
第 3 章介紹了兩個重要的概念,即距離和相似度。然后介紹兩大類構建推薦系
統的技術——協同過濾和基于內容的方法。 該章以一個虛擬的在線音樂商店為例,
介紹了如何為其開發推薦系統,還介紹了兩個更通用的例子。第一個例子是一個假
想的網站,利用 Digg 的 API 獲取用戶感興趣的內容,然后據此向用戶推薦其沒看過
的文章。第二個例子是關于電影推薦的,引入了數據規范化( data normalization)的
概念。本章還介紹了基于均方根誤差的推薦系統精確性評價的方法。
第 4 章介紹了聚類算法。聚類有著廣泛的應用領域,從理論上說,任何由多個
對象組成的數據集都可以根據給定的屬性進行聚類。在該章中,我們會介紹論壇帖
子的分組,以及如何識別相似的網站用戶。同時還介紹了不同類型的聚類算法,以
及六種算法的完整實現:單鏈接( single link)、平均鏈接( average link)、最小生成
關于本書 XXIII
樹單鏈接( minimum spanning tree single link)、 k 均值( k-means)、 ROCK 和 DBSCAN。
第 5 章介紹分類算法,這是智能應用所不可或缺的組件。該章首先描述了本體
( ontology),它包含三個組成部分——概念( concept)、實例( instance)和屬性
( attribute)。所謂分類,就是將實例賦予最合適的概念。不同的分類器之間的差別就
在于它們表示和衡量最優賦值方案的方法。該章簡要介紹了分類問題,包括二分類
和多分類、統計算法和結構算法。本章還介紹了使用分類器的三個步驟:訓練、驗
證和生產階段。
第 6 章介紹了分類器的組合——一種可以提升單個分類器準確性的高級技術。
該章主要的例子是評價抵押申請的可靠性,同時會詳細探討 bagging 和 boosting 兩
種技術。另外還介紹了 Breiman 的 arc-x4 boosting 算法的一個實現。
第 7 章舉例介紹了這些智能算法在一個新聞門戶網站中的應用。我們討論了其
中的技術問題,以及這些智能算法給應用所帶來的新的業務價值。例如,聚類算法
可以用于新聞的分組,還可以利用新聞之間的相互引用增加新聞的曝光度。在該章
中,我們介紹了智能算法的實際應用,勾勒出了將各種智能算法組合在一起實現特
定目標的大致框架。
有特色的 TO DO 小節
從第 2 章開始,每一章的最后一節會提供一些引導讀者深入學習的內容。作為
一個軟件工程師,我們發現 To Do 這種形式非常有吸引力:帶有祈使的語氣,但又
不像練習( exercise)那樣正式。
有些 To Do 的內容是更加深入地探討本章的內容,但有些是向讀者展示與本章
主題有關的其他內容。完成這些任務可以讓讀者更加深入和廣泛地理解智能算法。
本書中所有標注了“ TO DO” 的代碼都可以在各種 IDE 中查看, 例如, 在 Eclipse
IDE 中可以單擊 Tasks 面板。單擊任何一個任務,都會顯示與之相關的部分代碼。
誰適合閱讀本書
對于想學習在商業上取得巨大成功的算法的軟件工程師和 Web 開發人員來說,
本書正是為你們而寫的。因為本書的源代碼是基于 Java 編程語言的, 所以本書對 Java
用戶可能更具吸引力。盡管如此,使用其他編程語言的讀者也能從本書中獲益,或
許還能將書中的代碼轉換成其他編程語言的版本。
本書中的例子和思想應用廣泛,對于希望從業務角度更好地理解有關技術的技
XXIV 智能 Web 算法
術經理、產品經理和管理層來說,也有一定的價值。
最后,盡管在本書的標題中有 Web 一詞,但本書中的內容也同樣適用于其他類
型的軟件應用,包括移動應用,以及諸如文本編輯器和電子表格一類的傳統桌面應
用等。
代碼約定
本書中所有的源代碼都是等寬字體,并且是與上下文分開的。本書中的大部分
代碼清單都是用于說明代碼中的關鍵概念的,而有些清單有時則是與代碼有關的附
加信息,某些很長的代碼行會有行繼續符號。
本書中所有的源代碼都可以從 http://code.google.com/p/yooreeka/downloads/list
或出版社的網站 www.manning.com/AlgorithmsoftheIntelligentWeb 中獲得。
我們假設讀者使用的是微軟 Windows 操作系統,否則,讀者需要自行修改我們
提供的腳本以適用于其他操作系統。將下載的文件解壓到 C 盤。壓縮文件的頂層目
錄的名字是 iWeb2,本書中所有的目錄都是相對于這個頂層目錄的。例如,如果說
data/ch02 目錄,指的就是 C:iWebDatach02 目錄。
解壓之后, 就可以運行 Ant 構建腳本。 很簡單, 切換到構建目錄, 然后運行 Ant。
無論將文件解壓在什么位置, Ant 腳本都能正常運行。現在就可以根據附錄 A 的內
容來運行 BeanShell 腳本了。
Author Online 論壇
購買本書的同時,讀者也獲得了免費訪問 Manning Publications 論壇的權限,在這
個論壇中,讀者可以對本書進行評價、咨詢技術問題,并從作者或其他讀者那里獲得
幫助。在瀏覽器中輸入 www.manning.com/AlgorithmsoftheIntelligentWeb,就能訪問和
訂閱該論壇的內容,這個頁面中說明了讀者在注冊后如何訪問該論壇,可以獲得哪些
幫助以及論壇的規則,同時還有鏈接指向本書中例子的源代碼、勘誤表和其他下載。
Manning 出版社致力于提供一個用戶之間以及用戶和作者之間的交流平臺。對
作者參與該論壇的交流并沒有強制要求, 所有 Author Online 上的貢獻都是自愿的(當
然也沒有報酬)。建議讀者嘗試問作者一些有挑戰性的問題,作者對這樣的問題會更
有興趣。
只要本書還在出售,讀者就可以在出版商的網站上訪問 Author Online 論壇和所
有討論的文檔。
關于本書 XXV
關于封面設計
本書的封面設計來自法國的一本服裝設計書,即 J. G. St. Saveur 在 1796 年出版
的 Encyclopedie des Voyages。旅游在當時還是一個比較新鮮的事物,諸如這樣的旅
行手冊很受歡迎,無論是旅行者還是足不出戶的讀者,都能從書中了解到世界上其
他地方的風土人情,以及法國和歐洲其他地區的特色服飾。
Encyclopedie des Voyages 一書中用豐富的圖片生動地展示了 200 年前世界各地
的特色。在那個時代,兩個人即使是來自 兩個相隔不過十來英里的地方,也可以輕
易通過著裝區分出來。不僅如此,在那個時代,通過一個人的服飾還能輕易地判斷
出這個人的社會地位、行業和種族。
在那以后,不同地區之間服飾的差異逐步縮小。現在,僅僅根據服飾已經很難
區分出來自不同大洲的人。或許,樂觀地看,我們告別了一個文化和服飾極具特色
的世界,換來了多姿多彩的個人生活,或者說得到了更豐富有趣的智能化高科技生
活。
本書封面上兩個世紀前極具地方特色的服飾就來自這本旅游手冊, Manning 出
版社以此來慶祝計算機產業的創造力、進取心和其中的樂趣。
pagetop