前言
2018年,其实是自然语言处理领域收获颇丰的一年,尤其是以Google公司在2018年11月份发布的BERT模型最为世人所瞩目,可以说是最近AI研究领域最为火爆的历史性突破。最近几年,无论从媒体报道还是切身感受,我们都看到人工智能目前的发展势头非常迅猛。如果我们简单回顾一下人工智能发展历程,不难发现其轨迹有三个发展阶段:第一个阶段是计算智能阶段,其典型表现在于计算机和人类相比是能存会算,其超大存储量、超高计算速度方面均可完胜我们人类;第二个阶段是感知智能阶段,具体表现在以语音识别和图像识别技术为代表的迅猛发展,如综艺电视节目中的“机智过人”“最强大脑”就是其很好的呈现形式;第三个阶段是认知智能阶段,这个阶段需要机器能够思考并具有情感。正因为人工智能与我们日常生活的联系越来越紧密,且自然语言处理技术是推动机器实现认知的关键性研究领域,所以我们有必要对自然语言处理应用进行深入探索。本书将利用目前流行的Google技术框架(TensorFlow)来实现自然语言处理方面的应用。
由于我们生活的方方面面被赋予了越来越多的数字化内容,因此相应的数据量也在呈指数级增长,并且大多数数据是与语言相关的数据,如电子邮件、社交媒体帖子、电话和网络文章,自然语言处理(NaturalLanguageProcessing,NLP)能够有效地利用这些数据帮助人们完成日常业务工作。NLP已经彻底改变了我们使用数据改善业务和生活的方式,并将在我们未来的日常生活中发挥更大的作用。
NLP最普遍的使用案例之一是虚拟助手(Virtual Assistants,VA),如百度小度助手、Apple的Siri、谷歌助手(Google Assistant)和亚马逊Alexa。当我向VA询问“附近最便宜的火锅”时(笔者利用手机上百度地图小度时,它会把附近最便宜的火锅店排在第一位),就会触发一系列复杂的NLP任务。首先VA需要了解(解析)我的请求(了解它需要检索火锅的价格,而不是停车位计时的价格),VA做出的决定是“什么是便宜的?”;然后VA需要对附近火锅的价格进行排名(也有可能基于我过去吃过的火锅店);最后VA抓取相关数据获取附近火锅的价格,并通过分析每家火锅店的价格和评论对它们进行排名。其实,我们在几秒钟内看到的结果是执行一系列非常复杂NLP任务的结果。
正是NLP在我们日常生活中呈现出越来越多的便利性,笔者才更想对NLP背后的模型原理和具体应用进行深入的探讨,以便我们对NLP有更多的认知。另外,笔者查看了近些年来的相关文献,发现单独讲解NLP方面的理论文献国内外都有,单独撰写NLP任务实现的技术工具(如TensorFlow)的图书也很多,而将二者结合起来的图书,目前在国内还没有发现(也许有,只是笔者没有发现而已)。于是,2018年4月,笔者就想对关于利用TensorFlow技术框架来实现NLP任务应用方面进行成体系地探索,以便对今后的工作有所积累。本书在创作过程中参考了《Natural Language Processing with TensorFlow》(Thushan Ganegedara著)中的一些内容,在此向Thushan Ganegedara表达个人的敬意!
通过阅读本书,你将学会如何利用深度学习来实现许多有意义的NLP任务。对于本书中涉及的NLP任务,我们都有具体的代码实现(含实现过程),使用的技术框架为TensorFlow(1.8版本),编程语言为Python(3.6版本)。
本书主要内容
第1章 自然语言处理基础。首先介绍自然语言处理的含义及NLP中的一些常见子任务;然后讲述NLP的发展历程:偏理论的理性主义、偏实践应用的经验主义和深度学习阶段;接着对NLP任务中深度学习的局限性进行了大致分析;最后,我们对于NLP的应用场景和发展前景做了简要阐述。
第2章 深度学习基础。首先介绍深度学习的概念和演变过程,同时介绍了深度学习的基础模型——神经元模型,并对单层神经网络和多层神经网络模型(深度学习)的结构和原理进行了深度解读;然后介绍Encoder-Decoder网络和深度学习中最常见的优化算法——随机梯度下降;最后介绍反向传播算法(BP算法)。
第3章 TensorFlow。首先介绍TensorFlow的产生、主要特征和相关安装等基础准备内容,同时介绍了在执行TensorFlow程序时需要构建计算图及其构成元素,并详细解读了TensorFlow的架构和工作原理,还给出了一个示例来加深理解;然后从TensorFlow客户端的角度通过代码逐层剖析TensorFlow的内部运行情况,以便让我们对TensorFlow的内部运行机制、各个基础组件之间的关联等有深入的了解;最后介绍变量作用域机制并实现一个完整的神经网络示例。
第4章 词嵌入。首先介绍分布式表示,对其含义、类型及简要特征有一个直观的认识;其次,我们重点对CBOW模型、Skip-gram模型及GloVe模型的工作原理和内部架构进行深度解析;最后利用前面的模型,通过TensorFlow实现一个文档分类任务。
第5章 卷积神经网络(CNN)与句子分类。首先介绍CNN的历史演变过程,并对其5个层级结构(输入层、卷积运算层、激励层、池化层、全连接层)和4个基本运算单元(卷积运算、池化运算、全连接运算和识别运算)进行了介绍;然后介绍几种常见的经典卷积神经网络:AlexNet、VGGNet、Google Inception Net和ResNet,并逐一从模型思想、结构、特性亮点等方面进行详细解读;最后为了将上述解析的模型思想真正落实到代码层面上,我们给出两个应用案例:利用CNN对MNIST数据集进行图片分类和利用CNN对句子进行分类。
第6章 循环神经网络(RNN)。首先通过计算图及其展开解读了循环的任何函数本质上可以认为是一种循环神经网络的说法;然后介绍时间的反向传播算法(BPTT),我们将学习反向传播的工作原理、为什么不能对RNN使用标准反向传播、如何使用BPTT对数据进行RNN训练、截断BPTT和BPPTT的局限性等,并解读其局限性中的常见问题及对应的解决方法;最后我们将看到一个RNN的应用——文本生成,并研究了一种能够捕获更长记忆的RNN变体(被称为RNN-CF),还给出了其在实例中的应用。
第7章 长短期记忆网络(LSTM)。首先介绍LSTM及其高级架构,并深入研究LSTM中发生的详细计算,结合一个例子讨论了该计算的过程;然后介绍了几个可以提高LSTM性能的扩展,即贪心采样(一种非常简单的技术)、集束搜索(一种更复杂的搜索技术)及BiLSTM模型等;最后介绍了标准LSTM的两种变体:窥视孔连接和GRU。
第8章 利用LSTM自动生成文本。首先广泛地评估了LSTM在文本生成任务中的表现;然后定性和定量地测量LSTMS生成的文本有多好,并对LSTM、带窥视孔连接的LSTM和GRU进行比较;最后如何将词嵌入引入模型中,以改进LSTM生成的文本。
第9章 利用LSTM实现图像字幕自动生成。首先回顾了图像字幕的主要发展及其对研究和行业部署的影响;其次详细介绍了基于深度学习的图像字幕自动生成的两大框架;最后对图像字幕的自动生成任务进行了详解。
第10章 情感分析。首先介绍情感分析的应用、情感问题的界定及情感文档的分类,同时对句子观点的主观性、基于Aspect的情感分析、情感词典的生成、比较观点分析及观点的检索做了介绍;然后重点阐述了垃圾评论的各种情况;最后利用TensorFlow对于酒店评论样本数据进行了情感分析建模比较,并得出相关结论。
第11章 机器翻译。首先对基于规则的机器翻译、统计机器翻译等传统的机器翻译情况进行了详细解释,并对基于神经网络的神经网络机器翻译模型的架构和工作机制进行了深度剖析,同时对2018年11月份发布的具有重大突破性的BERT模型进行了分析;然后介绍如何实现一个NMT系统;最后讲解如何改进标准NMT系统。
第12章 智能问答系统。本章简要介绍了基于深度学习的问答方法,特别是对知识库和机器理解的问答。深度学习的优点是可以将所有文本跨度(包括文档、问题和潜在答案)转换为向量嵌入,然而基于深度学习的QA模型存在许多挑战。例如,现有的神经网络(RNN和CNN)仍然不能精确地捕获给定问题的语义含义,特别是对于文档,主题或逻辑结构不能通过神经网络容易地建模,并且在知识库中嵌入项目仍然没有有效的方法,以及QA中的推理过程很难通过向量之间的简单数值运算来建模。这些问题是质量保证任务面临的主要挑战,未来应引起更多的关注。
代码下载与技术支持
本书示例代码下载地址请扫描下面的二维码获得。如果发现书中存在问题或对本书有什么建议,请联系电子邮箱280751474@qq.com。
致谢
笔者在撰写这样一本技术性很强的书时确实有不少感慨,但正如一位技术界的前辈说的“没有等出来的美丽,只有走出来的辉煌”,所以在人生的路上,能够让自己用行动对冲遗憾,足矣。
在此,我要感谢本书的每一位读者,希望本书能够为大家带来一些启发。感谢清华大学出版社夏毓彦及其他老师的支持。感谢周一铁先生、张述睿先生的支持。感谢我的朋友和同学们,得益于你们一直以来的理解和支持,我才能有信心完成这本书的创作。
笔者自认才疏学浅,对深度学习和自然语言处理也仅是略知皮毛,且因时间有限,书中难免有错谬之处,还请各位读者予以告知,将不胜感激!
李孟全
2019年5月