新書推薦:
《
巨人传(插图珍藏本)
》
售價:HK$
705.6
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:HK$
76.7
《
偿还:债务与财富的阴暗面
》
售價:HK$
80.2
《
清华大学藏战国竹简校释(壹):《命训》诸篇
》
售價:HK$
94.4
《
封建社会农民战争问题导论(光启文库)
》
售價:HK$
68.4
《
虚弱的反攻:开禧北伐
》
售價:HK$
92.0
《
中华内丹学典籍丛书:古书隐楼藏书汇校(上下)
》
售價:HK$
257.2
《
辞源.修订本(建国60周年纪念版)(全二册)
》
售價:HK$
1477.6
|
編輯推薦: |
如果你想构建一个使用自然语言文本的企业级应用程序,但不确定从哪里开始或使用什么工具,本书将帮助你入门。Wisecube的首席数据科学家Alex Thomas向软件工程师和数据科学家展示了如何使用深度学习和Apache Spark NLP库,来构建可扩展的自然语言处理(NLP)应用程序。
通过在Spark处理框架上使用NLP的具体示例、实践,进行理论解释和动手练习,本书将会介绍从基本语言学和写作系统到情感分析和搜索引擎的所有内容。你还将探索一些开发基于文本的应用程序会遇到的特殊问题,例如性能等。
|
內容簡介: |
本书介绍NLP基础知识和构建模块,然后再深入研究应用程序和系统构建。
基础知识:了解自然语言处理、Apache Spark上的NLP和深度学习的基础知识。构建模块:学习构建 NLP 应用程序的技术(包括标记化、句子分割和命名实体识别),并了解它们的工作方式和原因。应用程序:探索构建你自己的NLP应用程序的设计、开发和实验过程。构建NLP系统:考虑生产和部署NLP模型的选项,包括支持哪些人类语言。
|
關於作者: |
Alex Thomas是Wisecube的首席数据科学家。他将自然语言处理和机器学习与临床数据、身份数据、雇主和求职者数据,以及现在的生物化学数据结合使用。 Alex从Apache Spark 0.9版就开始使用,并使用过NLP库和框架,其中包括UIMA和OpenNLP。
|
目錄:
|
目录
前言 . 1
第一部分 基础知识
第1 章 快速入门 . 9
1.1 简介 9
1.2 其他工具 11
1.3 建立你自己的开发环境 12
1.3.1 前置条件 12
1.3.2 启动Apache Spark 13
1.3.3 检查代码 13
1.4 熟悉Apache Spark .14
1.4.1 使用Spark NLP 启动Apache Spark 14
1.4.2 在Apache Spark 中加载和查看数据 15
1.5 Spark NLP 的Hello World 示例 18
第2 章 自然语言基础知识 27
2.1 什么是自然语言 27
2.1.1 语言的起源 28
2.1.2 口头语言和书面语言29
2.2 语言学 30
2.2.1 语音学和音系学 .30
2.2.2 词法学(形态学) 31
2.2.3 语法 32
2.2.4 语义学 .33
2.3 社会语言学:方言、语域和其他变体 34
2.3.1 礼节 34
2.3.2 语境 35
2.4 语用学 35
2.4.1 罗曼雅各布森 .35
2.4.2 如何运用语用学 .37
2.5 书写系统 37
2.5.1 起源 37
2.5.2 字母 38
2.5.3 辅音音素文字 .39
2.5.4 元音附标文字 .40
2.5.5 音节表 41
2.5.6 标识象形符 .41
2.6 编码 42
2.6.1 ASCII 42
2.6.2 Unicode 42
2.6.3 UTF-8 43
2.7 练习:分词 .44
2.7.1 英语分词 44
2.7.2 希腊语分词 45
2.7.3 Geez(阿姆哈拉语)分词 45
2.8 资源 46
第3 章 Apache Spark 上的NLP 49
3.1 并行性、并发性、分布式计算 .50
3.1.1 Apache Hadoop 之前的并行化 53
3.1.2 MapReduce 和 Apache Hadoop 53
3.1.3 Apache Spark 55
3.2 Apache Spark 架构 55
3.2.1 物理架构 55
3.2.2 逻辑架构 56
3.3 Spark SQL 和Spark MLlib 62
3.3.1 Transformer(转换器) .66
3.3.2 评估器和模型 69
3.3.3 预测结果评估 73
3.4 NLP 库 .76
3.4.1 功能库 .76
3.4.2 注释库 .77
3.4.3 其他库中的自然语言处理功能 78
3.5 Spark NLP 78
3.5.1 注释库 .78
3.5.2 阶段 79
3.5.3 预训练管道 87
3.5.4 Finisher 89
3.6 练习:构建主题模型 .91
3.7 资源 93
第4 章 深度学习基础知识 95
4.1 梯度下降 100
4.2 反向传播 101
4.3 卷积神经网络CNN . 113
4.3.1 滤波器 114
4.3.2 池化 114
4.4 循环神经网络RNN . 114
4.4.1 通过时间的反向传播. 115
4.4.2 Elman 网络 . 115
4.4.3 LSTM 116
4.5 练习1 . 116
4.6 练习2 . 116
4.7 资源 . 117
第二部分 构建模块
第5 章 文字处理 121
5.1 分词 .122
5.2 词表缩减 126
5.2.1 词干提取 .126
5.2.2 词形还原 .126
5.2.3 词干提取对比词形还原 127
5.2.4 拼写校对 .129
5.2.5 标准化 130
5.3 bag-of-words 模型.132
5.4 CountVectorizer .133
5.5 N-Gram 135
5.6 可视化:Word 和文档分发 137
5.7 练习 .142
5.8 资源 .142
第6 章 信息检索 143
6.1 倒排索引 144
6.2 向量空间模型 .151
6.2.1 删除停用词 154
6.2.2 逆向文件频率 156
6.2.3 使用Spark 159
6.3 练习 .159
6.4 资源 .160
第7 章 分类和回归 163
7.1 bag-of-word 模型特征 .166
7.2 正则表达式特征 167
7.3 特征选择 169
7.4 模型 .173
7.4.1 朴素贝叶斯算法 174
7.4.2 线性模型 .174
7.4.3 决策/ 回归树.174
7.4.4 深度学习算法 175
7.5 迭代 .175
7.6 练习 .178
第8 章 使用Keras 的序列模型 181
8.1 语句划分 182
8.2 段落划分 190
8.3 词性标注 191
8.4 条件随机场 196
8.5 分块和语法分析 196
8.6 语言模型 197
8.7 循环神经网络 .198
8.8 练习:字符 N-Grams 模型 205
8.9 练习:词义语言模型 206
8.10 资源 206
第9 章 信息提取 207
9.1 命名实体识别 .207
9.2 共指消解 217
9.3 断言状态检测 .218
9.4 关系提取 221
9.5 小结 .226
9.6 练习 .226
第10 章 主题建模 . 229
10.1 K-Means .230
10.2 潜在语义索引 234
10.3 非负矩阵分解 238
10.4 隐含狄利克雷分布模型 242
10.5 练习 245
第11 章 词嵌入 . 249
11.1 Word2vec 249
11.2 GloVe 261
11.3 fastText 262
11.4 Transformer 263
11.5 ELMo、BERT 和XLNet .263
11.6 Doc2vec 265
11.7 练习 266
第三部分 应用
第12 章 情感分析与情绪检测 269
12.1 问题陈述与约束 269
12.2 规划项目 .271
12.3 设计解决方案 274
12.4 实施解决方案 275
12.5 测试并衡量解决方案 281
12.5.1 业务指标 281
12.5.2 以模型为中心的指标 281
12.5.3 基础设施指标 .282
12.5.4 过程指标 283
12.5.5 离线与在线模型测量 284
12.6 审查 284
12.6.1 初始部署 285
12.6.2 回退计划 286
12.6.3 下一步 286
12.7 结论 286
第13 章 建立知识库 287
13.1 问题陈述与约束 288
13.2 规划项目 .289
13.3 设计解决方案 290
13.4 实施解决方案 291
13.5 测试并衡量解决方案 300
13.5.1 业务指标 300
13.5.2 以模型为中心的指标 300
13.5.3 基础设施指标 .301
13.5.4 过程指标 301
13.6 审查 302
13.7 结论 302
第14 章 搜索引擎 . 303
14.1 问题陈述与约束 304
14.2 规划项目 .304
14.3 设计解决方案 305
14.4 实施解决方案 305
14.5 测试并衡量解决方案 313
14.5.1 业务指标 313
14.5.2 以模型为中心的指标 314
14.6 审查 315
14.7 结论 316
第15 章 聊天机器人 317
15.1 问题陈述与约束 318
15.2 规划项目 .319
15.3 设计解决方案 319
15.4 实施解决方案 321
15.5 测试并衡量解决方案 331
15.5.1 业务指标 331
15.5.2 以模型为中心的指标 332
15.6 审查 332
15.7 结论 332
第16 章 目标字符识别 333
16.1 OCR 任务的种类 333
16.1.1 印刷文本的图像和PDF 识别成文本 333
16.1.2 手写文本图像识别成文本 334
16.1.3 日常环境中的文本图像识别成文本 334
16.1.4 文本图像识别成目标 335
16.1.5 关于不同书写系统的说明 336
16.2 问题陈述与约束 336
16.3 规划项目 .337
16.4 实施解决方案 337
16.5 测试并衡量解决方案 343
16.6 以模型为中心的指标 343
16.7 审查 343
16.8 结论 343
第四部分 构建NLP 系统
第17 章 支持多种语言 347
17.1 语言类型学 347
17.2 场景:学术论文分类 347
17.3 不同语言中的文本处理 348
17.3.1 合成词 348
17.3.2 形态复杂性349
17.4 迁移学习与多语言深度学习 .350
17.5 跨语种搜索 351
17.6 检查清单 .352
17.7 结论 353
第18 章 人工标注 . 355
18.1 指南 356
18.2 场景:学术论文分类 356
18.3 标注员内部一致性 .358
18.4 标注迭代 .359
18.5 标注文本 .360
18.5.1 分类 .360
18.5.2 标注 .360
18.6 检查清单 .361
18.7 结论 362
第19 章 NLP 应用程序的产品化 . 363
19.1 Spark NLP 模型缓存 .364
19.2 Spark NLP 与TensorFlow 集成 365
19.2.1 Spark 优化基础 .366
19.2.2 设计级优化367
19.2.3 分析工具 368
19.2.4 监视 .369
19.2.5 管理数据资源 .369
19.2.6 测试基于NLP 的应用程序 369
19.2.7 单元测试 370
19.2.8 集成测试 370
19.2.9 冒烟测试与健全测试 370
19.2.10 性能测试 371
19.2.11 可用性测试 371
19.2.12 演示基于NLP 的应用程序 371
19.3 检查清单 372
19.3.1 模型部署清单 .372
19.3.2 扩展和性能检查表 373
19.3.3 测试检查清单 .373
19.4 结论 374
术语表 377
|
內容試閱:
|
前言
为什么自然语言处理既重要又很难
自然语言处理(Natural Language Processing,NLP)是关于处理语言数据的研究领域。我们将关注文本,但是自然语言音频数据也是NLP 的一部分。处理自然语言文本数据是困难的,其原因是它依赖三个研究领域:语言学、软件工程和机器学习。对于大多数基于NLP 的项目来说,很难找到这三方面的专家。幸运的是,你不需要成为这三个领域的世界级专家就能对你的应用做出明智的决定。只要你了解一些基础知识,就可以使用专家构建的库来完成你的目标。想想在为向量和矩阵运算创建高效算法方面取得的进步。如果深度学习库使用的公共线性代数库不可用,想象一下深度学习革命要开始会有多难。尽管这些库意味着我们不需要为每个新项目实现缓存感知矩阵乘法,但仍然需要了解线性代数的基础知识,以及如何实现运算以充分利用这些库的基础知识。我相信NLP 和NLP 库的情况也是如此。
由于使用的数据不同,使用自然语言(文本、口语和手势) 的应用程序总是与其他应用程序不同。这些应用程序的好处和吸引力在于有多少数据。人类一直在生产和搅动自然语言数据。困难的方面是,人们从字面上进化来检测自然语言使用中的错误,并且数据(文本、图像、音频和视频)不是在考虑计算机的情况下生成的。这些困难可以通过结合语言学、软件工程和机器学习来克服。
本书处理文本数据。这是自然语言中最简单的数据类型,因为我们的计算机在设计时就考虑到了文本。话虽如此,我们还是要考虑很多不明显的大大小小的细节。
背景
几年前,我正在为O’Reilly 编写教程。本教程是关于在Apache Spark 上构建NLP管道的。当时,Apache Spark 2.0 还比较新,我主要使用的是1.6 版本。我认为使用新的DataFrames 和管道构建注释库会很酷,我无法在本教程中实现这一点。然而,我和我的朋友(也是教程的共同主持人)David Talby 讨论了这个问题,我们创建了一个设计文档。我没有足够的时间来建造库,所以我咨询了David 聘请来从事该项目的Saif Addin。随着项目的发展和发展,David、Claudiu Branzan(另一位朋友和同事)和我开始在会议和聚会上展示教程。似乎有兴趣了解更多关于库的知识,也有兴趣了解更多关于NLP 的知识。
认识我的人都知道我很爱发牢骚,很少有话题能像NLP 以及它在技术行业中如何被使用和误用那样让我开始。我想这是因为我的背景。在成长过程中,我将语言学作为一种爱好来学习,这是一种非常耗费精力的爱好。当我上大学时,尽管我专注于数学,但我也学习了语言学课程。毕业前不久,我决定我也想学习计算机科学,这样我就可以利用我学到的理论概念来创造一些东西。一旦我开始从事这个行业,我就知道我可以将这三个兴趣合二为一:NLP。这让我对NLP 有了难得的认识,因为我先是单独研究了它的组成部分,然后再组合起来。
我真的很高兴能写这本书,我希望这本书能帮助你构建你的下一个NLP 应用程序!
哲学
库的一个重要部分是人们应该建立自己的模型的想法。NLP 中没有一种万能的方法。如果想构建一个成功的 NLP 应用程序,你需要了解你的数据以及你的产品。预建模型对于初始版本、演示和教程很有用。这意味着,如果你想成功使用Spark NLP,将需要了解NLP 的工作原理。因此,在本书中,我们将不仅仅介绍Spark NLP API,还将讨论如何使用 Spark NLP,但也会讨论NLP 和深度学习是如何工作的。
当将对NLP 的理解与以定制为目的而构建的库相结合时,你将能够构建实现你目标的NLP 应用程序。
排版约定
本书采用以下排版约定。
斜体(Italic)
表示新术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant Width)
表示程序清单,在段落内表示程序元素,例如变量、函数名称、数据库、数据类型、环境变量、语句和关键字。
粗体等宽字体(Constant width bold)
表示应由用户原封不动输入的命令或其他文本。
斜体等宽字体(Constant width italic)
表示应该替换成用户提供值的文本,或者由上下文决定的值。
使用代码范例
补充材料(代码示例、练习等)可在 https://oreil.ly/SparkNLP 下载。
如果你有技术问题或使用代码示例的问题,请发送电子邮件至 bookquestions@oreilly.com。
本书旨在帮助你完成工作。一般来说,如果本书提供了示例代码,你可以在你的程序和文档中使用它。除非你要复制代码的重要部分,否则你无需联系我们以获得许可。例如,编写一个使用本书中的多个代码块的程序不需要许可。销售或分发 O’Reilly书籍中的示例确实需要获得许可。通过引用本书和引用示例代码来回答问题不需要许可。将本书中的大量示例代码合并到你的产品文档中确实需要许可。
我们很希望但并不强制要求你在引用本书内容时加上引用说明。引用说明一般包括书名、作者、出版社和ISBN,例如:“Natural Language Processing with Spark NLP by Alex Thomas (O’Reilly). Copyright 2020 Alex Thomas, 978-1-492-04776-6”。
如果你认为你对代码示例的使用超出了合理使用或上述许可范围,请随时通过permissions@oreilly.com 与我们联系。
O’Reilly 在线学习平台(O’Reilly Online Learning)
近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
公司独有的专家和改革创新者网络通过O’Reilly 书籍、文章以及在线学习平台,分享他们的专业知识和实践经验。O’Reilly 在线学习平台按照您的需要提供实时培训课程、深入学习渠道、交互式编程环境以及来自O’Reilly 和其他200 多家出版商的大量书籍与视频资料。更多信息,请访问网站:https://www.oreilly.com/。
联系我们
任何有关本书的意见或疑问,请按照以下地址联系出版社。
美国:
O’Reilly Media, Inc.
1005 Gravenstein Highway North
Sebastopol, CA 95472
中国:
北京市西城区西直门南大街2 号成铭大厦C 座807 室(100035)
奥莱利技术咨询(北京)有限公司
我们为本书提供了一个网页,列出了勘误表、示例和任何其他信息。你可以通过https://oreil.ly/NLPSpark 访问此页面。
对本书的评论或技术疑问,可以发电子邮件到errata@oreilly.com.cn。
欲了解本社图书和课程的新闻和信息,请访问我们的网站http://oreilly.com。
我们的Facebook:http://facebook.com/oreilly。
我们的Twitter:http://twitter.com/oreillymedia。
我们的YouTube:http://www.youtube.com/oreillymedia。
致谢
我要感谢O’Reilly Nicole Taché 和Gary O’Brien 的编辑们的帮助和支持。感谢技术审稿人,他们对本书的改版提供了很大帮助。还要感谢Mike Loukides 对启动这个项目的指导。
我要感谢David Talby 的所有指导。感谢Saif Addin、Maziyar Panahi 和John Snow Labs 团队的其他成员,他们采用了David 和我的初始设计,并将其变成了一个成功且广泛使用的库。还要感谢Vishnu Vettrivel 在这个项目中的支持和建议。
最后,我要感谢我的家人和朋友的耐心和鼓励。
|
|