书籍详情
自然语言处理实战:利用Python理解、分析和生成文本
作者:[美] 霍布森·莱恩,科尔·霍华德,汉纳斯·马克斯·哈普克 著,史亮,鲁骁,唐可欣,王斌 译
出版社:人民邮电出版社
出版时间:2020-10-01
ISBN:9787115540232
定价:¥99.00
购买这本书可以去
内容简介
本书是介绍自然语言处理(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
第 一部分 处理文本的机器
第 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
猜您喜欢