自然语言处理实战:预训练模型应用及其产品化
上QQ阅读APP看书,第一时间看更新

1.1 什么是自然语言处理

下面是维基百科上自然语言处理的定义(访问于2021年3月)(https://oreil.ly/MRzEp):

自然语言处理(NLP)是语言学、计算机科学、信息工程和人工智能的子领域,它关注计算机和人类(自然)语言的交互,特别是关于如何通过计算机编程来处理和分析大量的自然语言数据。

自然语言处理中的挑战大都涉及语音识别、自然语言理解和自然语言生成。

展开该定义,当我们提到“自然语言”时,它的意思是指“人类的语言”,与此相对应的是编程语言。自然语言通常所指的不仅是文本数据,还包括语音和声音数据。

这很好,但如果计算机也可以处理大量的文本、语音和声音数据呢?为什么这一点会如此重要呢?

想象一下没有语言的世界,人类将如何通过文字和语音进行交流,如何阅读、听音乐或者理解电影和电视节目——我们熟知的生活将不复存在。我们将被困在石器时代,只能处理视觉信息,而不能和其他人分享知识或者进行有意义的交流[1]

与人类的情况类似,如果计算机可以处理数字和视觉信息,却不能处理自然语言,那么它们在真实世界拥有的应用程序数目和种类将十分有限。计算机缺乏处理自然语言的能力,将永远不可能实现通用人工智能或者任何与当今人类智能相类似的能力。

幸运的是,在计算机科学家的努力下,计算机现在可以相当好地处理自然语言数据。因此,让我们总结一下计算机在具备这项相对新发现的能力(自然语言处理能力)之后,让哪些商业应用成为可能。

1.1.1 热门应用

由于自然语言处理技术的发展,计算机可以处理多种自然语言任务,至少可以提供初步的结果。下面是当前的一些常见自然语言处理应用。

机器翻译machine translation

机器翻译是计算机在没有人为干预的情况下,把一种语言翻译成另外一种语言的过程。到目前为止,Google Translate是最流行的例子,它每天为超过5亿用户提供100余种语言的翻译服务。当Google Translate服务最初于2006年对外开放时,它的翻译效果明显比现在差。当前的翻译效果正快速地趋近于人类专家水平[2]

语音识别speech recognition

听起来可能令人震惊,语音识别技术已经存在50多年了。在此期间,没有一款语音识别软件具有令人满意的效果或者成为主流应用,直到最近在深度学习兴起的推动下,情况才有所改观。如今,亚马逊的Alexa、苹果的Siri、谷歌助理(Google Assistant)、微软Cortana、汽车中的数字语音助手以及其他软件都能够以很高的准确率来识别语音,从而使这些软件系统能实时处理信息并以基本上合理的方式回答问题。即使在15年前,计算机这种识别语音并以连贯的方式做出响应的能力也非常糟糕。

问答系统(question answering

对于这些数字助理来说,为人类提供愉悦的问答体验,语音识别只是工作的前半部分。该软件系统需要两步:(a)识别语音;(b)给定已识别的语音,检索出适当的响应。后半部分被称为问答系统(QA)。

文本摘要text summarization

这是人们每天最常见的任务之一,白领的案头工作就是阅读冗长的文件并对其内容进行摘要提取。计算机现在可以执行这种摘要,从较长的文本文档中提取较短的摘要。文本摘要减少了人类的阅读时间。那些每天分析大量文本的人(例如律师、律师助理、商业分析师和学生等)可以从冗长文档的由机器生成的简短摘要中进行筛选,然后根据摘要再选择对应文档仔细阅读。

聊天机器人chatbot

如果你最近花时间浏览了网站,可能会注意到现在越来越多的网站都有一个聊天机器人,它可以自动地与人类用户互动。聊天机器人通常会以友好、非胁迫的方式与人打招呼,然后向用户提问,以判断用户访问该网站的目的和意图。接着聊天机器人会自动回答用户提出的任何问题,无须人工干预。目前,这些聊天机器人正实现数字客户接待自动化。

语音合成和语音识别text-to-speech and speech-to-text

软件现在可以非常容易地将文本合成为高保真音频。例如,谷歌云的语音合成可以将文本转换成30多种语言的180多种声音的类人语音。同样,谷歌云的语音识别能够将超过120种语言的音频转换为文本,提供真正的全球化服务。

语音机器人voicebot

10年前,自动语音代理还很笨拙。除非人类以相当有限的方式进行回应(例如,使用是或否类型的回应),否则电话上的语音代理不能处理信息。现在,像VOIQ提供的人工智能语音机器人能够增强和自动化关于销售、市场营销和客户成功团队[3]的语音呼叫。

文本和音频生成text and audio generation

多年前,文本生成依赖于模板和基于规则的系统。这限制了文本生成的应用范围。现在,软件能够使用机器学习生成文本和音频,大大拓宽了应用范围。例如,Gmail现在可以根据你之前起草的句子来提示整个句子,可以在你输入的时候即时完成。虽然自然语言生成最适合生成短文本(部分句子),但很快这样的系统可能能够生成质量相当高的长格式内容。自然语言生成的一个流行的商业应用是“数据到文本”的软件系统,它生成数据库和数据集的文本摘要。“数据到文本”软件包括数据分析和文本生成。该领域的公司有Narrative Science和Automated Insights。

情感分析sentiment analysis

随着社交媒体内容的爆炸式增长,越来越需要将客户情感分析,以及推文、帖子和评论等情感分析(比如积极、消极和中立以及愤怒、悲伤和快乐等)做成一个自动化的过程。这类应用也被称为情感人工智能(emotion AI)。

信息提取information extraction

自然语言处理的一个主要挑战是从非结构化或半结构化的文档集合中创建结构化的数据。例如,命名实体识别软件能够从主流新闻等长篇文本中提取人物、组织、地点、日期和货币。信息提取还包括关系提取,如果实体之间存在关系,则提取相应的关系。

在过去的10年里,自然语言处理在企业中的应用数量激增,从语音识别、问答到能够独立生成自然语言的语音机器人和聊天机器人。考虑到该领域几十年前的情况,这个进展令人瞠目结舌。

为了更好地理解自然语言处理的当前进展,下面将从自然语音处理的起源——1950年开始,回顾其发展脉络。

1.1.2 历史

自然语言处理领域已经存在近70年了。或许最著名的是艾伦·图灵在1950年提出的图灵测试,这为该领域的发展奠定了基础。图灵测试是针对机器是否具有和人类无法区分的智力的测试。为了让机器通过图灵测试,机器必须生成类似人类的应答,这样人类评估者就无法分辨这些应答的背后是人类还是计算机(即计算机的应答具有人类应答的质量)[4]

图灵测试在当时刚起步的人工智能领域引发了重大争论,并促使研究人员开发出自然语言处理模型,作为构建有朝一日能够通过图灵测试的计算机的基石,这一研究一直持续到今天。

与更广泛的人工智能领域一样,自然语言处理也经历过许多盛衰起伏,从炒作周期顶点到人工智能寒冬。1954年,乔治城大学和IBM成功建立了一个能够自动将60多个俄语句子翻译成英语的系统。当时,乔治城大学的研究人员认为机器翻译的问题将在三到五年内解决。美国的成功也促使苏联开展了类似的尝试。乔治城-IBM的成功加上冷战思维,导致在早期对自然语言处理研究的资助不断增加。

然而,到了1966年,这一进展停滞了。自动语言处理咨询委员会(ALPAC)——旨在评估计算语言学进展的美国政府机构——发布了一份发人深思的报告。该报告指出,机器翻译比人工翻译更昂贵、更不准确、更慢,在不久的将来不太可能达到人类的水平。该报告导致了对机器翻译研究资助的减少。报告发布后,该领域的研究在近十年时间里几乎消失。

尽管有这些挫折,自然语言处理领域仍旧在20世纪70年代重新出现了。到20世纪80年代,计算机算力显著提高,成本也大幅降低,该领域又吸引了世界各地的众多研究人员。

20世纪80年代末,随着IBM的托马斯·沃森研究中心(Thomas J. Watson Research Center)的研究人员推出了第一批统计机器翻译系统,自然语言处理技术再次崭露头角。在统计机器翻译兴起之前,机器翻译依赖于人工编写的语言规则。这些系统被称为基于规则的机器翻译系统。这些规则将有助于纠正和控制机器翻译系统通常会犯的错误,但制定这样的规则是一个费力且艰辛的过程。机器翻译系统也因此变得脆弱不堪。如果机器翻译系统遇到尚未制定相应规则的边界情况,它就会失败,有时结果会非常糟糕。

统计机器翻译帮助减少了对人工制定规则的需求,它更依赖于从数据中学习。使用以平行文本为数据的双语语料库(即除它们所用的语言不同之外,两个文本是一致的),这种系统将句子分割成小的子集,并将这些小子集从源语言逐段翻译为目标语言。数据越多(即双语文本语料库)的系统,翻译效果越好。直到21世纪10年代中期神经机器翻译兴起之前,统计机器翻译一直是研究和使用最广泛的机器翻译方法。

到20世纪90年代,统计机器翻译的成功促使研究人员从文本扩展到语音识别。语音识别和机器翻译一样,自20世纪50年代初就出现了,受到贝尔实验室(Bell Labs)和IBM等公司早期成功的推动。但当时语音识别系统有严重的局限性。例如,在20世纪60年代,这样的系统可以使用语音指令下棋,但做不了其他的事。

到20世纪80年代中期,IBM将一种统计学方法应用于语音识别,并推出了一款名为Tangora的声控打字机,它可以处理20 000的词汇量。

美国国防部高级研究计划局(DARPA)、贝尔实验室和卡内基梅隆大学(Carnegie Mellon University)在20世纪80年代末也取得了类似的成功。当时,语音识别软件系统已经比一般人拥有更大的词汇量,能够进行连续的语音识别,这是语音识别历史上的一个里程碑。

20世纪90年代,该领域的几名研究人员离开研究实验室和大学进入工业领域工作,促进了语音识别和机器翻译等方面越来越多的商业应用。

当今自然语言处理的重量级公司(比如谷歌)在2007年便雇用了第一批语音识别员工。那时美国政府也关心自然语言处理技术,比如美国国家安全局(NSA)开始用特定关键词对大量通话记录进行标记,以方便情报人员的搜索。

直到21世纪10年代早期,学术界和工业界的自然语言处理研究人员开始在自然语言处理任务中使用深度神经网络进行实验。早期以深度学习主导的成功来自一种称为长短期记忆(LSTM)的深度学习方法。2015年谷歌就使用该方法对Google Voice进行了改进。

深度学习方法使得自然语言处理任务的完成效果显著提升,吸引了更多的资金投入该领域。这些成功使自然语言处理系统更深入地融入了我们的日常生活。

例如,21世纪10年代早期的汽车已拥有可以处理有限语音指令的语音识别软件。汽车现在拥有的技术可以处理更广泛的自然语言命令,更清晰地推断上下文环境和意图。

站在今天回顾过去,从早期基于规则的系统到20世纪80年代的统计机器翻译,再到21世纪10年代的基于神经网络的系统,自然语言处理进展缓慢但步伐稳健。虽然这一领域的学术研究已经火热了相当长的一段时间,但自然语言处理直到最近才成为主流话题。接下来,让我们来探究一下过去几年里使自然语言处理成为当今人工智能中最热门的话题之一的主要转折点。

1.1.3 转折点

自然语言处理和计算机视觉都是人工智能的分支领域,但是到目前为止,计算机视觉已经取得了很多商业上的成功。计算机视觉在2012年迎来了转折点(所谓的“ImageNet”时刻),当时基于深度学习的解决方案AlexNet大大降低了以前计算机视觉模型的错误率。

自2012年以来,计算机视觉为各种应用提供了支持,如照片和视频的自动标签、自动驾驶汽车、无收银员商店、设备的人脸识别认证、放射诊断等。

相比之下,自然语言处理的发展则要稍晚一些。从2014年开始,随着亚马逊的Alexa、改良版苹果Siri、谷歌助手以及微软Cortana的发布,自然语言处理掀起了一阵热潮。谷歌还在2016年推出了谷歌翻译的重大改进版,并且现在聊天机器人和语音机器人也已经非常普遍。

话虽如此,但直到2018年,随着使用Transformer架构训练的大型预训练语言模型的发布,自然语言处理才有了自己的ImageNet时刻,其中最值得注意的是于2018年11月推出的谷歌BERT模型。

2019年,OpenAI的GPT-2等生成式模型引起了轰动,在之前内容的基础上不断动态生成新内容,这是以前不可逾越的壮举。2020年,在它之前成功的基础上,OpenAI发布了一个更大、更令人印象深刻的版本GPT-3。

进入2021年,自然语言处理不再是人工智能的试验性分支领域。与计算机视觉一起,自然语言处理将在企业中得到广泛的应用。通过本书,我们希望分享一些概念和工具,帮助你在公司构建其中的一些应用。

1.1.4 最后一点

没有哪一种单一方法可以完成所有的自然语言处理任务。目前占主导地位的三种方法分别是基于规则、基于传统机器学习(基于统计)和基于神经网络。

接下来让我们探讨每一种方法。

基于规则的自然语言处理rule-based NLP

传统的自然语言处理软件严重依赖于人类精心设计的语言规则。通常是领域专家(尤其是语言学家)使用正则表达式和模式匹配之类的机制来制定这些规则。基于规则的自然语言处理在狭窄范围的测试用例中表现良好,但通常不能很好地泛化。泛化这样的系统需要越来越多的规则,这使得基于规则的自然语言处理与其他自然语言处理方法相比,成了一种劳动密集型和脆弱的解决方案。以下是基于规则的系统中的规则示例:以“ing”结尾的单词是动词,以“er”或“est”结尾的单词是形容词,以“'s”结尾的单词是所有格,等等。想想看,要创建一个能够分析和处理大量自然语言数据的系统,我们需要手工创建多少规则。不仅创建规则是一个困难且乏味的过程,而且我们还必须处理使用这些规则时可能导致的许多错误。我们必须为规则创建规则,以解决每个规则的所有极端情况。

基于传统(或经典)机器学习[traditional(or classicalmachine learning]的自然语言处理

传统的机器学习方法较少地依赖于规则,更多地依赖于数据。它使用一种统计方法,基于一个大型标注语料库而得到单词的概率分布。人类仍然扮演着有意义的角色,领域专家需要使用特征工程来改善机器学习模型的效果。特征包括大写、单数与复数、上下文词汇等。在创建了这些特征之后,你必须训练传统的机器学习模型来执行自然语言处理任务,例如文本分类。由于传统的机器学习使用统计方法来决定何时将某些特征或规则应用到处理自然语言的过程中,传统的基于机器学习的自然语言处理比基于规则的系统更容易构建和维护。与基于规则的自然语言处理方法相比,基于传统机器学习的自然语言处理的泛化效果要更好。

基于神经网络(nerual network)的自然语言处理

神经网络克服了传统机器学习的缺点。神经网络通过表示学习来“学习”重要的特征,而不是要求执行特征工程。为了运行良好,神经网络需要的只是大量的数据,但在今天的互联网时代,获取数据并不难。你可以把神经网络想象成非常强大的函数逼近器或“规则”创造者,这些规则和特征比人类创建的规则更微妙、更复杂,在处理自然语言数据时可以得到更自动化的学习和更泛化的系统。

在这三个分支中,基于神经网络的自然语言处理分支受到深层神经网络(比如深度学习)兴起的推动,是最强大的也是近年来促成许多主流商业应用的自然语言处理方法。

在本书中,我们将主要关注基于神经网络的自然语言处理方法,同时也将探索基于传统机器学习的自然语言处理方法。前者在许多自然语言处理任务中具有最好的性能,而后者则考虑到种种原因仍然活跃在商业应用中。

我们不会过多地关注基于规则的自然语言处理,由于它已经存在了几十年,你不难找到关于这个主题的其他资源。基于规则的自然语言处理方法在其他两种方法中还是有存在空间的,通常只用于处理边缘情况。