前言
什么是自然语言处理
许多人的日常工作都涉及与数字打交道,比如工作时使用与微软Excel类似的电子表格程序,或者使用像Jupyter Notebook这样的编程环境。人们处理数字时,几乎没有理由不把数字处理工作交给计算机去做。
因为计算机处理数字时既快速又精确,人脑则相形见绌。如果要计算24×36×48,人类会毫不犹豫地拿出计算器或计算机,让机器来完成这些烦琐的工作。
但从历史的角度来看,在分析文本数据时,具有强大数字处理功能的计算机就不再那么有效了。人类往往使用计算机处理数字,依靠人脑分析文本文件。到目前为止,计算机一直因缺乏处理文本的能力而限制了自身的可工作范围。
然而这种情况即将得到改变。从很多方面来说,这种变化已经开始了。计算机现在能够以20年前许多人认为不可思议的方式来处理文本和音频数据。
其实留意一下日常生活,你就能发现自己非常依赖计算机来分析和理解周围的文本数据。这里举几个例子:
谷歌搜索
搜索整个网络然后呈现相关的搜索结果。
谷歌Gmail
撰写邮件时自动完成句子。
谷歌翻译
将文本和音频从一种语言转换为另一种语言。
亚马逊Alexa、苹果Siri、谷歌助手(Google Assistant)、微软小娜(Cortana)
用语音命令来控制你的家庭设备。
客服聊天机器人
询问与用户账户相关的问题,然后得到(基本合理的)答复。
这些技术已经逐渐融入我们的日常生活,以至于我们几乎没有注意到一直在使用它们。计算机能够处理文本数据的故事才刚刚开始。在过去几年里,我们在这一领域取得了相当显著的进步,随着时间的推移,我们将看到计算机能处理越来越多过去只有人类能做的工作。
为什么要读这本书
自然语言处理(Natural Language Processing,NLP)是当今人工智能领域最热门的话题之一。在落后计算机视觉等深度学习领域多年之后,自然语言处理直到最近才成为主流。尽管谷歌、Facebook和OpenAI都开源了大型预训练语言模型来简化自然语言处理任务,但今天仍然有许多组织在开发和产品化自然语言处理应用程序上苦苦挣扎。本书可以帮助你快速了解这个领域。
阅读本书所需的背景知识
本书不适合没有任何基础的初学者。本书假设你已经对机器学习有所了解,并且使用过Python以及NumPy、pandas和matplotlib等类库。
有关Python的更多信息,请访问Python官方网站(https://www.python.org)。有关Jupyter Notebook的更多信息,请访问Jupyter官方网站(https://jupyter.org)。如需复习大学水平的微积分、线性代数、概率论和数理统计知识,请阅读由Ian Goodfellow、Yoshua Bengio和Aaron Courville编写的Deep Learning(MIT出版社)的第一部分。若需了解关于机器学习的知识,请阅读Jerome H. Friedman、Robert Tibshirani和Trevor Hastie编写的The Elements of Statistical Learning(Springer出版社)一书。
本书的主要内容
如果你对机器学习有一定的理解,并且有Python编程经验,那么你将学会如何在自己的组织中构建和部署产品化的自然语言处理应用程序。
本书将引导你逐步完成上述过程,且不会让你陷入理论的细枝末节。
读完本书并独立完成练习之后,你应该能够做到以下几点:
- 理解最先进的自然语言处理模型如何工作。
- 学习该行业的工具和框架。
- 执行自然语言处理任务,如文本分类、语义搜索和阅读理解。
- 使用新的基于Transformer的模型和技术[如迁移学习(transfer learning)]来解决问题。
- 开发性能可媲美甚至优于开箱即用系统的自然语言处理模型。
- 将模型部署到生产环境中,并监控和维护其性能。
- 使用Python和PyTorch实现一套自然语言处理算法。
本书的目标是为你概述自然语言处理的概念和工具,以便你将这项技术用于处理日常的问题。换句话说,这是一本指导你构建真实应用程序的实战书。本书不会面面俱到地解释自然语言处理的相关理论,随着学习的深入,你将不可避免地需要使用其他资源来补充你在该领域的知识,但本书会让你在该领域扬帆起航并顺利到达彼岸。
本书将使用实践的方式来介绍理论,但主要集中在应用自然语言处理技术来解决现实问题。数据集和代码可在本书的GitHub仓库(https://github.com/nlpbook/nlpbook)上以Jupyter Notebook的形式在线获取。
本书的组织架构
全书分为三部分。
第一部分(第1~3章)
该部分将聚焦于自然语言处理的高层次概述,包括自然语言处理的历史、该领域最流行的应用程序,以及如何使用预训练模型来执行迁移学习和快速解决现实世界中的问题。
第二部分(第4~8章)
该部分将深入研究自然语言处理的底层细节,包括预处理文本、分词和词向量嵌入。虽然这些不是最吸引人的话题,但都是自然语言处理领域的基础知识。然后我们探讨当今自然语言处理中最有效的建模方法,如Transformer、注意力机制、Vanilla循环神经网络、长短期记忆网络和门控循环单元。最后,我们将所有内容整合在一起来呈现自然语言处理的分水岭年——2018年所谓的ImageNet时刻,当时大型预训练语言模型打破了此前的性能纪录,并被研究人员和应用工程师广泛使用。
第三部分(第9~12章)
在该部分中,我们将讨论应用自然语言处理最重要的方面——如何产品化已开发的模型,以便这些模型为组织提供看得见、摸得着的价值。我们将讨论当今可用工具的前景,并分享对它们的看法。我们还会涉及一些特殊的话题,严格来说,这些话题与自然语言处理无关,但可能会影响自然语言处理模型的产品化。
虽然我们不能涵盖本书中每一个自然语言处理的主题,包括为经验丰富的“老兵”提供的更高阶的主题,但我们将继续通过本书的官方网站(https://www.appliednlpbook.com)和GitHub在线提供新增的和更新后的材料(包括代码)以支持我们的社区。读完本书后可以登录官网和GitHub来获取最新信息!
值得一提的是,本书是完全使用Jupyter Notebook撰写的。你可以在GitHub仓库中找到本书的代码。我们鼓励你在阅读时运行Notebook中的实验,以熟悉真实代码是如何实现算法思想的(因篇幅有限,本书省略了一些冗长的输出)。
排版约定
本书中使用以下排版约定:
斜体(Italic)
表示新的术语、URL、电子邮件地址、文件名和文件扩展名。
等宽字体(Constant width
)
用于程序清单,以及段落中的程序元素,例如变量名、函数名、数据库、数据类型、环境变量、语句以及关键字。
等宽粗体(Constant width bold
)
表示应由用户直接输入的命令或其他文本。
等宽斜体(Constant width italic
)
表示应由用户提供的值或由上下文确定的值替换的文本。
该图示表示提示或建议。
该图示表示一般性说明。
该图示表示警告或注意。
示例代码
可以从https://github.com/nlpbook/nlpbook下载补充材料(示例代码、练习、勘误等)。
这里的代码是为了帮助你更好地理解本书的内容。通常,可以在程序或文档中使用本书中的代码,而不需要联系O'Reilly获得许可,除非需要大段地复制代码。例如,使用本书中所提供的几个代码片段来编写一个程序不需要得到我们的许可,但销售或发布O'Reilly的示例代码则需要获得许可。引用本书的示例代码来回答问题也不需要许可,将本书中的很大一部分示例代码放到自己的产品文档中则需要获得许可。
非常欢迎读者使用本书中的代码,希望(但不强制)注明出处。注明出处时包含书名、作者、出版社和ISBN,例如:
Applied Natural Language Processing in the Enterprise,作者Ankur A. Patel和Ajay Uppili Arasanipalai,由O'Reilly出版,书号978-1-492-06257-8
如果读者觉得对示例代码的使用超出了上面所给出的许可范围,欢迎通过permission@oreilly.com联系我们。
O'Reilly在线学习平台(O'Reilly Online Learning)
40多年来,O'Reilly Media致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。
我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O'Reilly的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O'Reilly和200多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。
如何联系我们
对于本书,如果有任何意见或疑问,请按照以下地址联系本书出版商。
美国:
O'Reilly Media,Inc.
1005 Gravenstein Highway North
Sebastopol,CA 95472
中国:
北京市西城区西直门南大街2号成铭大厦C座807室(100035)
奥莱利技术咨询(北京)有限公司
要询问技术问题或对本书提出建议,请发送电子邮件至errata@oreilly.com.cn。
本书配套网站https://oreil.ly/Applied_NLP_in_the_Enterprise上列出了勘误表、示例以及其他信息。
关于书籍、课程、会议和新闻的更多信息,请访问我们的网站http://www.oreilly.com。
我们在Facebook上的地址:http://facebook.com/oreilly
我们在Twitter上的地址:http://twitter.com/oreillymedia
我们在YouTube上的地址:http://youtube.com/oreillymedia
致谢
我们要感谢O'Reilly团队的所有成员,正是他们的帮助才使得这个项目成为可能,首先是Jonathan Hassell在2019年夏天支持并批准了本书的选题。我们想向编辑Melissa Potter致以崇高的敬意。尽管面临COVID-19的严峻挑战,但她还是帮助我们让整个2020年的计划如期进行。
非常感谢Jeremy Howard早期提供了有价值的建议并分享了FastDoc的源代码,FastDoc是我们整个写作过程中用于将Jupyter Notebook转换为AsciiDoc的令人难以置信的工具。他与Rachel Thomas、Sylvain Gugger、Zach Mueller、Hamel Husain以及许多fastai贡献者合作,使深度学习变得易于理解和实用,这一直是本书写作的巨大灵感来源。
本书的制作编辑Deborah Baker和内容服务经理Kristen Brown在Kim Cofer、David Futato、Karen Montgomery、Kate Dullea以及Piper编辑咨询公司和nSight公司团队的帮助下将本书润色完成,他们使写作过程的最后阶段完成得轻而易举。
特别感谢Artiom Tarasiuk、Victor Borges和Benjamin Muskalla,感谢他们花费无数个小时来阅读和审校本书,并在此过程中提供重要反馈。
Ajay
首先,我要感谢我的父母Uppili和Hema,他们在肆虐的流行疾病中不知疲倦地支持我,还要感谢对我寄予厚望的姐姐Anika。
还有许多其他人,我对他们感激不尽。Gayathri Srinivasan多年前指导过我,他很友善地让一个高中生路人使用超级计算机,第一次让我知道机器可以学习。Ganesan Narayanaswamy通过OpenPOWER基金会慷慨地为我的研究提供所需的计算资源和基础设施。Diganta Misra、Trikay Nalamada、Himanshu Arora以及我在Landskape的其他同事花费了大量时间进行实验并与我一起参加凌晨2点关于注意力机制的讨论会,仅出于对深度学习的共同热爱以及对回馈学术界的渴望。他们对本书的热情和对我的工作的鼓励弥足珍贵。
Ankur
我很高兴生活在一个非常慷慨和互相支持的家庭,我取得的任何成绩都与此密不可分。我要感谢我的父母Amrat和Ila,感谢他们多年来的牺牲以及对我的培养。如果没有他们,我根本就不会做我感兴趣的事情。我要感谢我的姐姐Bhavini和我的兄弟Jigar一直支持我。最后,我非常感谢我美丽的女朋友Maria Koval和我们的金毛猎犬Brody,他们都耐心地忍受我多次在深夜和周末进行写作和编码。谢谢!
我还要感谢Glean的联合创始人Howard Katzenberg和Alexander Jia,以及我的好朋友兼Mellow的联合创始人Nate Collins,感谢他们在整个写作过程中给予的耐心和支持。我真的很幸运有这么棒的朋友和同事——他们每天都给我的生活带来欢乐。