推荐给中高级Python开发人员的自然语言处理书

441 阅读17分钟

随着NLP技术的发展,信息流和计算能力也不断增强。我们现在只需在搜索栏中输入几个字符,就可以检索出完成任务所需的准确信息。搜索提供的前几个自动补全选项通常非常合适,以至于让我们感觉是有一个人在帮助我们进行搜索。

到底是什么推动了NLP的发展?

  • 是对不断扩大的非结构化Web数据有了新的认识吗?
  • 是处理能力的提高跟上了研究人员的思路吗?
  • 是用人类语言与机器互动的效率得到提升了吗?

实际上以上这些都是,其实还有更多。大家可以在任何一个搜索引擎中输入这样一个问题 “为什么现在自然语言处理如此重要?” ,然后就能找到维基百科上给出各种好理由的文章。

还有一些更深层次的原因,其中一个原因是对通用人工智能(AGI)或深层人工智能(Deep AI)的加速追求。人类的智慧可能只是体现在我们能够把思想整理成离散的概念,进行存储(记忆)和有效地分享。这使我们能够跨越时间和空间来扩展我们的智力,将我们的大脑连接起来形成集体智能。

Steven Pinker在《思想本质》(The Stuff of Thought)中提出的一个观点是:我们实际上是用自然语言思考的。称其为“内心对话”不是没有原因的。Facebook、Google和Elon Musk正押注于这样一个事实:文字将成为思维的默认通信协议。他们都投资了一些项目,试图把思想、脑电波和电信号转换成文字。此外,沃尔夫假说认为语言会影响我们的思维方式。自然语言无疑是文化和集体意识的传播媒介。

因此,如果我们想要在机器上模仿或模拟人类的思维,那么自然语言处理可能是至关重要的。此外,大家将在《自然语言处理实战》中学习词的数据结构及嵌套关系中可能隐藏着的有关智能的重要线索。大家将使用这些结构,而神经网络使无生命的系统能够以看起来像人类的方式消化、存储、检索和生成自然语言。

还有一个更重要的原因,为什么大家想要学习如何编写一个使用自然语言的系统?这是因为你也许可以拯救世界!希望大家已经关注了大佬们之间关于人工智能控制问题和开发“友好人工智能”的挑战的讨论。Nick Bostrom、Calum Chace、Elon Musk和其他许多人都认为,人类的未来取决于我们开发友好机器的能力。在可预见的未来,自然语言将成为人类和机器之间的重要联系纽带。

即使我们能够直接通过机器进行“思考”,这些想法也很可能是由我们大脑中的自然词和语言塑造的。自然语言和机器语言之间的界限将会变得模糊,就像人与机器之间的界限将会消失一样。事实上,这条界线在1984年开始变得模糊,那年《赛博格宣言》的发表使George Orwell的反乌托邦预言变得更加可能并易于接受。

希望“帮助拯救世界”这句话没有让大家产生疑惑。随着本书的进展,我们将向读者展示如何构建和连接聊天机器人“大脑”。在这个过程中,读者会发现人类和机器之间的社交反馈回路上,微小的扰动都可能会对机器和人类产生深远的影响。就像一只蝴蝶在某个地方扇动翅膀一样,对聊天机器人的“自私属性”上一个微小的调整,可能会带来敌对聊天机器人冲突行为的混乱风暴。大家还会注意到,一些善良无私的系统会迅速聚集一批忠实的支持者,来帮助平息由那些目光短浅的机器人造成的混乱。由于亲社会行为的网络效应,亲社会的协作型聊天机器人可以对世界产生巨大影响。

推荐给中高级Python开发人员的自然语言处理书

 

这正是《自然语言处理实战》作者聚集在一起的原因。通过使用我们与生俱来的语言在互联网上进行开放、诚实、亲社会的交流,形成了一个支持社区。我们正在利用集体智慧来帮助建立和支持其他半智能的参与者(机器)。我们希望我们的话语能在大家的脑海中留下深刻的印象,并像meme一样在聊天机器人的世界里广泛传播,用构建亲社会NLP系统的热情来感染其他人。我们希望,当超级智能最终出现时,这种亲社会的精神能对它有略微的推动作用。

自然语言处理实战 利用Python理解、分析和生成文本

[美] 霍布森·莱恩,科尔·霍华德,汉纳斯·马克斯·哈普克 著,史亮,鲁骁,唐可欣,王斌 译

推荐给中高级Python开发人员的自然语言处理书

 

内容简介

本书是介绍自然语言处理(NLP)和深度学习的实战书。NLP已成为深度学习的核心应用领域,而深度学习是NLP研究和应用中的必要工具。本书分为3部分:第一部分介绍NLP基础,包括分词、TF-IDF向量化以及从词频向量到语义向量的转换;第二部分讲述深度学习,包含神经网络、词向量、卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆(LSTM)网络、序列到序列建模和注意力机制等基本的深度学习模型和方法;第三部分介绍实战方面的内容,包括信息提取、问答系统、人机对话等真实世界系统的模型构建、性能挑战以及应对方法。
本书面向中高级Python开发人员,兼具基础理论与编程实战,是现代NLP领域从业者的实用参考书。

编辑推荐

  • Python开发人员入门自然语言处理必备
  • 现代自然语言处理领域从业者的实用参考指南
  • 小米AI实验室NLP团队献译

1.本书是构建能够阅读和解释人类语言的机器的实用指南;
2.读者可以使用现有的Python 包来捕获文本的含义并相应地做出响应;
3.本书扩展了传统的自然语言处理方法,包括神经网络、现代深度学习算法和生成技术,用于解决真实世界的问题,如提取日期和名称、合成文本和回答无固定格式的问题;
4.提供源代码。
深度学习领域的**进展使各类应用能够极其精准地理解文本和语音。其结果是,聊天机器人能够模仿真人筛选出与职位高度匹配的简历,完成卓越的预测性搜索,自动生成文档摘要——所有这些都能够以很低的成本实现。新技术的发展连同Keras 和TensorFlow之类的易用工具的出现,使专业品质的自然语言处理(NLP)比以往任何时候都更容易实现。
本书主要内容
● Keras、TensorFlow、gensim和 scikit-learn等工具的使用。
● 基于规则的自然语言处理和基于数据的自然语言处理。
● 可扩展的自然语言处理流水线。
阅读本书,读者需要对深度学习的知识有基本的了解,并具有中等水平的Python 编程技能。

《自然语言处理实战》特色内容:

推荐给中高级Python开发人员的自然语言处理书

 

关于作者

推荐给中高级Python开发人员的自然语言处理书

 

推荐给中高级Python开发人员的自然语言处理书

 

目录

第 一部分 处理文本的机器 
第 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