自然語言處理實戰 : 利用 Python 理解、分析和生成文本 Natural Language Processing in Action: Understanding, analyzing, and generating text with Python

Hobson Lane, Hannes Hapke, Cole Howard 史亮,魯驍,唐可欣,王斌

  • 自然語言處理實戰 : 利用 Python 理解、分析和生成文本-preview-1
  • 自然語言處理實戰 : 利用 Python 理解、分析和生成文本-preview-2
自然語言處理實戰 : 利用 Python 理解、分析和生成文本-preview-1

買這商品的人也買了...

商品描述

本書是介紹自然語言處理(NLP)和深度學習的實戰書。
NLP已成為深度學習的核心應用領域,而深度學習是NLP研究和應用中的必要工具。
本書分為3部分:
第一部分介紹NLP基礎,包括分詞、TF-IDF向量化以及從詞頻向量到語義向量的轉換;
第二部分講述深度學習,包含神經網絡、詞向量、捲積神經網絡(CNN)、
循環神經網絡(RNN)、長短期記憶(LSTM)網絡、
序列到序列建模和註意力機制等基本的深度學習模型和方法;
第三部分介紹實戰方面的內容,包括信息提取、問答系統、
人機對話等真實世界系統的模型構建、性能挑戰以及應對方法。

本書面向中高級Python開發人員,兼具基礎理論與編程實戰,
是現代NLP領域從業者的實用參考書。

作者簡介

作者簡介


Hobson Lane

擁有20年構建自主系統的經驗,這些系統能夠代表人類做出重要決策。
Hobson在Talentpair訓練機器完成簡歷的閱讀和理解,以減少招聘者產生的偏見。
在Aira,他幫助構建了第一個聊天機器人,為視障人士描述視覺世界。
他是Keras、scikit-learn、PyBrain、PUGNLP和ChatterBot等開源項目的積極貢獻者。
他目前正在從事完全公益的開放科學研究和教育項目,包括構建一個開放源碼的認知助手。
他在AIAA、PyCon、PAIS和IEEE上發表了多篇論文和演講,並獲得了機器人和自動化領域的多項專利。

Cole Howard

是一位機器學習工程師、NLP實踐者和作家。
他一生都在尋找模式,並在人工神經網絡的世界裡找到了自己真正的家。
他開發了大型電子商務推薦引擎和麵向超維機器智能係統(深度學習神經網絡)
的最先進的神經網絡,這些系統在Kaggle競賽中名列前茅。
他曾在Open Source Bridge和Hack University 大會上發表演講,
介紹卷積神經網絡、循環神經網絡及其在自然語言處理中的作用。


Hannes Max Hapke

是從一位電氣工程師轉行成為機器學習工程師的。
他在高中研究如何在微控制器上計算神經網絡時,對神經網絡產生了濃厚的興趣。
Hannes喜歡自動化軟件開發和機器學習流水線。
他與合作者共同開發了面向招聘、能源和醫療應用的深度學習模型和機器學習流水線。
Hannes在包括OSCON、Open Source Bridge和Hack University在內的各種會議上發表演講介紹機器學習。

譯者簡介


史亮

小米NLP高級軟件工程師,本科畢業於武漢大學,後保送中科院計算所碩博連讀,獲得博士學位。
目前主要負責小米MiNLP平台的研發工作。

魯驍

小米NLP高級軟件工程師,本科、碩士畢業於華中科技大學,博士畢業於中科院計算所。
目前主要從事大規模文本分類、內容過濾、人機對話等方向的研發工作。


唐可欣
小米NLP軟件工程師,本科畢業於西安電子科技大學,碩士畢業於法國巴黎高科電信學院。
主要從事語言模型、意圖分析、情感分析等方向的研發工作。

王斌

小米AI實驗室主任、NLP首席科學家,前中科院博導、研究員,中國科學院大學教授。
譯有《信息檢索導論》《大數據:互聯網大規模數據挖掘與分佈式處理》《機器學習實戰》等書籍。

目錄大綱

目 錄

第 一部分 處理文本的機器

第 1章 NLP概述 3

1.1 自然語言與編程語言 3

1.2 神奇的魔法 4

1.2.1 會交談的機器 5

1.2.2 NLP中的數學 5

1.3 實際應用 7

1.4 電腦“眼”中的語言 8

1.4.1 鎖的語言(正則表達式) 9

1.4.2 正則表達式 9

1.4.3 一個簡單的聊天機器人 11

1.4.4 另一種方法 14

1.5 超空間簡述 17

1.6 詞序和語法 19

1.7 聊天機器人的自然語言流水線 20

1.8 深度處理 22

1.9 自然語言智商 24

1.10 小結 26

第 2章 構建自己的詞匯表——分詞 27

2.1 挑戰(詞乾還原預覽) 28

2.2 利用分詞器構建詞匯表 29

2.2.1 點積 37

2.2.2 度量詞袋之間的重合度 37

2.2.3 標點符號的處理 38

2.2.4 將詞匯表擴展到n-gram 43

2.2.5 詞匯表歸一化 48

2.3 情感 55

2.3.1 VADER:一個基於規則的情感分析器 56

2.3.2 樸素貝葉斯 58

2.4 小結 61

第3章 詞中的數學 62

3.1 詞袋 63

3.2 向量化 67

3.3 齊普夫定律 74

3.4 主題建模 76

3.4.1 回到齊普夫定律 79

3.4.2 相關度排序 80

3.4.3 工具 82

3.4.4 其他工具 83

3.4.5 Okapi BM25 85

3.4.6 未來展望 85

3.5 小結 85

第4章 詞頻背後的語義 87

4.1 從詞頻到主題得分 88

4.1.1 TF-IDF向量及詞形歸並 88

4.1.2 主題向量 89

4.1.3 思想實驗 90

4.1.4 一個主題評分算法 94

4.1.5 一個LDA分類器 95

4.2 潛在語義分析 99

4.3 奇異值分解 103

4.3.1 左奇異向量U 105

4.3.2 奇異值向量S 106

4.3.3 右奇異向量VT 107

4.3.4 SVD矩陣的方向 107

4.3.5 主題約簡 108

4.4 主成分分析 109

4.4.1 三維向量上的PCA 111

4.4.2 回歸NLP 112

4.4.3 基於PCA的短消息語義分析 114

4.4.4 基於截斷的SVD的短消息語義分析 116

4.4.5 基於LSA的垃圾短消息分類的效果 117

4.5 潛在狄利克雷分佈(LDiA) 119

4.5.1 LDiA思想 120

4.5.2 基於LDiA主題模型的短消息語義分析 121

4.5.3 LDiA+LDA=垃圾消息過濾器 124

4.5.4 更公平的對比:32個LdiA主題 125

4.6 距離和相似度 127

4.7 反饋及改進 129

4.8 主題向量的威力 132

4.8.1 語義搜索 133

4.8.2 改進 135

4.9 小結 135

第二部分 深度學習(神經網絡)

第5章 神經網絡初步(感知機與反向傳播) 139

5.1 神經網絡的組成 140

5.1.1 感知機 140

5.1.2 數字感知機 141

5.1.3 認識偏置 142

5.1.4 誤差曲面 153

5.1.5 不同類型的誤差曲面 154

5.1.6 多種梯度下降算法 155

5.1.7 Keras:用Python實現神經網絡 155

5.1.8 展望 158

5.1.9 歸一化:格式化輸入 159

5.2 小結 159

第6章 詞向量推理(Word2vec) 160

6.1 語義查詢與類比 160

6.2 詞向量 162

6.2.1 面向向量的推理 165

6.2.2 如何計算Word2vec表示 167

6.2.3 如何使用gensim.word2vec模塊 175

6.2.4 生成定製化詞向量表示 177

6.2.5 Word2vec和GloVe 179

6.2.6 fastText 180

6.2.7 Word2vec和LSA 180

6.2.8 詞關系可視化 181

6.2.9 非自然詞 187

6.2.10 利用Doc2vec計算文檔相似度 188

6.3 小結 190

第7章 捲積神經網絡(CNN) 191

7.1 語義理解 192

7.2 工具包 193

7.3 捲積神經網絡 194

7.3.1 構建塊 195

7.3.2 步長 196

7.3.3 捲積核的組成 196

7.3.4 填充 198

7.3.5 學習 199

7.4 狹窄的窗口 199

7.4.1 Keras實現:準備數據 201

7.4.2 捲積神經網絡架構 206

7.4.3 池化 206

7.4.4 dropout 208

7.4.5 輸出層 209

7.4.6 開始學習(訓練) 211

7.4.7 在流水線中使用模型 212

7.4.8 前景展望 213

7.5 小結 214

第8章 循環神經網絡(RNN) 215

8.1 循環網絡的記憶功能 217

8.1.1 隨時間反向傳播算法 221

8.1.2 不同時刻的權重更新 223

8.1.3 簡要回顧 225

8.1.4 難點 225

8.1.5 利用Keras實現循環神經網絡 226

8.2 整合各個部分 230

8.3 自我學習 231

8.4 超參數 232

8.5 預測 235

8.5.1 有狀態性 236

8.5.2 雙向RNN 236

8.5.3 編碼向量 238

8.6 小結 238

第9章 改進記憶力:長短期記憶網絡(LSTM) 239

9.1 長短期記憶(LSTM) 240

9.1.1 隨時間反向傳播 247

9.1.2 模型的使用 250

9.1.3 臟數據 251

9.1.4 “未知”詞條的處理 254

9.1.5 字符級建模 255

9.1.6 生成聊天文字 260

9.1.7 進一步生成文本 262

9.1.8 文本生成的問題:內容不受控 269

9.1.9 其他記憶機制 269

9.1.10 更深的網絡 270

9.2 小結 271

第 10章 序列到序列建模和註意力機制 272

10.1 編碼-解碼架構 272

10.1.1 解碼思想 273

10.1.2 似曾相識? 275

10.1.3 序列到序列對話 276

10.1.4 回顧LSTM 277

10.2 組裝一個序列到序列的流水線 278

10.2.1 為序列到序列訓練準備數據集 278

10.2.2 Keras中的序列到序列模型 279

10.2.3 序列編碼器 280

10.2.4 思想解碼器 281

10.2.5 組裝一個序列到序列網絡 282

10.3 訓練序列到序列網絡 282

10.4 使用序列到序列網絡構建一個聊天機器人 284

10.4.1 為訓練準備語料庫 285

10.4.2 建立字符字典 286

10.4.3 生成獨熱編碼訓練集 286

10.4.4 訓練序列到序列聊天機器人 287

10.4.5 組裝序列生成模型 288

10.4.6 預測輸出序列 288

10.4.7 生成回復 289

10.4.8 與聊天機器人交談 290

10.5 增強 290

10.5.1 使用裝桶法降低訓練復雜度 290

10.5.2 註意力機制 291

10.6 實際應用 292

10.7 小結 294

第三部分 進入現實世界(現實中的NLP挑戰)

第 11章 信息提取(命名實體識別與問答系統) 297

11.1 命名實體與關系 297

11.1.1 知識庫 298

11.1.2 信息提取 300

11.2 正則模式 300

11.2.1 正則表達式 301

11.2.2 把信息提取當作機器學習里的特徵提取任務 302

11.3 值得提取的信息 303

11.3.1 提取GPS位置 303

11.3.2 提取日期 304

11.4 提取人物關系(事物關系) 309

11.4.1 詞性標註 309

11.4.2 實體名稱標準化 313

11.4.3 實體關系標準化和提取 314

11.4.4 單詞模式 314

11.4.5 文本分割 314

11.4.6 為什麽split('.! ')函數不管用 316

11.4.7 使用正則表達式進行斷句 316

11.5 現實世界的信息提取 318

11.6 小結 319

第 12章 開始聊天(對話引擎) 320

12.1 語言技能 321

12.1.1 現代方法 322

12.1.2 混合方法 326

12.2 模式匹配方法 327

12.2.1 基於AIML的模式匹配聊天機器人 328

12.2.2 模式匹配的網絡視圖 334

12.3 知識方法 334

12.4 檢索(搜索)方法 336

12.4.1 上下文挑戰 336

12.4.2 基於示例檢索的聊天機器人 338

12.4.3 基於搜索的聊天機器人 341

12.5 生成式方法 343

12.5.1 聊聊NLPIA 343

12.5.2 每種方法的利弊 345

12.6 四輪驅動 345

12.7 設計過程 347

12.8 技巧 349

12.8.1 用帶有可預測答案的問題提問 349

12.8.2 要有趣 350

12.8.3 當其他所有方法都失敗時,搜索 350

12.8.4 變得受歡迎 350

12.8.5 成為連接器 351

12.8.6 變得有情感 351

12.9 現實世界 351

12.10 小結 352

第 13章 可擴展性(優化、並行化和批處理) 353

13.1 太多(數據)未必是好事 353

13.2 優化NLP算法 354

13.2.1 索引 354

13.2.2 高級索引 355

13.2.3 基於Annoy的高級索引 357

13.2.4 究竟為什麽要使用近似索引 361

13.2.5 索引變通方法:離散化 362

13.3 常數級內存算法 363

13.3.1 gensim 363

13.3.2 圖計算 363

13.4 並行化NLP計算 364

13.4.1 在GPU上訓練NLP模型 364

13.4.2 租與買 365

13.4.3 GPU租賃選擇 366

13.4.4 張量處理單元TPU 367

13.5 減少模型訓練期間的內存占用 367

13.6 使用TensorBoard瞭解模型 369

13.7 小結 372

附錄A 本書配套的NLP工具 373

附錄B 有趣的Python和正則表達式 380

附錄C 向量和矩陣(線性代數基礎) 385

附錄D 機器學習常見工具與技術 391

附錄E 設置亞馬遜雲服務(AWS)上的GPU 403

附錄F 局部敏感哈希 415

資源 421

詞匯表 428