1.自然语言处理方法
解决自然语言处理问题的方法通常分为三类:启发式、机器学习和深度学习。本节只对每种方法做简单介绍。这些概念即使不能全部掌握,也没关系,后面的内容还会详细讨论。下面先从启发式方法开始。
1.1基于启发式的自然语言处理
基于启发式的自然语言处理(Heuristic-based Natural Language Processing)是一种方法,其中算法或系统使用启发式规则来解决语言处理问题,而不是依赖于统计学习或深度学习。启发式是一种经验丰富的方法,通过基于领域专业知识和规则来进行决策。这种方法通常用于那些难以用传统统计模型解决或数据不足的问题。
和其他人工智能系统类似,早期的自然语言处理系统也是基于规则设计的。这就要求开发人员具有相关领域的专业知识,才能制定规则并整合到程序中。另外,这类系统还需要词典、同义词库等资源,这些资源的编写和数字化通常需要一定的时间。使用这些资源设计规则来解决自然语言处理问题的一个例子是基于词汇的情感分析。它利用文本中正向词和负向词的计数来推断文本的情感。
除了词典和同义词库外,自然语言处理,特别是基于规则的自然语言处理,还需要构建更详细的知识库。例如 WordNet,它是单词及其语义关系的数据库。这种语义关系包括同义词、下义词和部分词。同义词是指意思相近的词。下义词捕捉的是从属关系。例如,棒球、相扑和网球是体育的下义词。部分词捕捉的是部分和整体的关系。例如,手和腿是身体的部分词。在构建基于规则的语言系统时,所有这些信息都会派上用场。图 1-9 展示了一个 WordNet 的示例。

图 1-9:单词“SPORT”的 WordNet 图示
近期,常识和世界知识也被纳入知识库,如“开放思维常识库”,这也有助于构建基于规则的系统。虽然上面的词汇资源主要是基于词汇信息的,但是基于规则的系统完全可以突破词汇的限制,整合其他形式的信息。下面介绍其中的一些。
对于文本分析和构建基于规则的系统,正则表达式(regex)是一个很好的工具。正则表达式是一组字符或一个模式,用于匹配和查找文本中的子字符串。例如,正则表达式 '^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$' 可用于查找文本中所有的电子邮件地址。正则表达式是将领域知识整合到自然语言处理系统的一种好方法。例如,如果顾客通过聊天或电子邮件投诉,那么如何构建一个系统来自动识别顾客所投诉的产品?如果现在有一系列的产品代码可以映射到特定的品牌名称,那么使用正则表达式就可以轻松地匹配这些。
正则表达式是构建基于规则的系统的常见范式。自然语言处理软件 StanfordCoreNLP 自带的 TokensRegex 是一个定义正则表达式的框架。它用于识别文本中的模式,并使用匹配到的文本来创建规则。正则表达式用于确定性匹配,这意味着它要么匹配,要么不匹配。概率正则表达式是正则表达式的一个分支,它通过增加匹配概率来克服这一缺陷。感兴趣的读者可以查看 pregex 等软件库。
上下文无关语法(context-free grammar, CFG)是一种用于自然语言建模的形式语法。CFG 由著名语言学家和科学家诺姆•乔姆斯基教授发明。CFG 可用于捕获正则表达式可能无法捕获的复杂和层次化的信息。例如,Earley 解析器可以解析各种 CFG。如果要对更复杂的规则建模,可以使用 JAPE(Java 注解模式引擎)等语法语言。JAPE 兼具正则表达式和 CFG 的特性,可用于基于规则的自然语言处理系统,如 GATE(文本工程通用架构)。对于定义明确的封闭域,准确率和全覆盖更为重要,因此可用 GATE 构建文本提取。例如,JAPE 和 GATE 曾用于起搏器植入手术临床报告的信息提取。图 1-10 显示了 GATE 界面:文本中有几类信息得到了突出显示。

图 1-10:GATE 工具
即使是现在,规则和启发式在自然语言处理项目的整个生命周期中仍然发挥着一定的作用。在项目的开始阶段,规则和启发式是构建自然语言处理系统最初版本的好方法。简单地说,规则和启发式有助于快速构建模型的第一个版本,帮助理解手头的问题。第 4 章和第 11 章将深入讨论这一点。在项目的中间阶段,对于基于机器学习的自然语言处理系统,规则和启发式可以用于提取特征。在项目的最后阶段,规则和启发式可以堵住系统的漏洞。任何使用统计、机器学习或深度学习技术构建的自然语言处理系统都难免出错,有些错误可能会导致严重的损失。例如,如果一个医疗保健系统查看了某个患者的所有医疗记录,却错误地决定不建议进行关键检查,那么这种错误甚至可能会让人付出生命的代价。规则和启发式是堵住生产系统中这类漏洞的好方法。接下来我们换一个话题,讨论用于自然语言处理的机器学习技术。
1.2用于自然语言处理的机器学习
和图像、语音、结构化数据等其他形式的数据一样,文本数据也可以使用机器学习技术。分类、回归等有监督的机器学习技术已经大量用于各种自然语言处理任务。例如,将新闻文章按照体育、政治等主题分类就是自然语言处理分类任务。再比如,社交媒体上关于股票的讨论经过处理后,就可以使用回归技术来给出预测数值,从而估计股票的价格。类似地,无监督聚类算法可以对文本文档进行聚类。
任何用于自然语言处理的机器学习方法,无论是监督学习还是无监督学习,都可以描述为三个步骤:提取文本特征、使用特征表示来学习模型,以及评估和改进模型。文本的特征表示将在第 3 章中专门介绍,模型评估将在第 2 章中讨论。这里简要介绍第二步(使用特征表示来学习模型)中常用的监督机器学习方法。对这些方法有一个基本的认识,将有助于理解后续内容中讨论的概念。
朴素贝叶斯
朴素贝叶斯是一种用于分类任务的经典算法。顾名思义,该算法的基础是贝叶斯定理。朴素贝叶斯计算的是给定输入数据的特征集合,观察到某个类别标签的概率。该算法的一个特点是,它假设每个特征都是独立的。对于本章前面提到的新闻分类示例,用数值表示文本的一种方法是使用文本中出现的体育或政治类词汇的计数。假设这些词汇计数彼此不相关。如果假设成立,就可以使用朴素贝叶斯对新闻文章进行分类。虽然这在许多情况下是一个强假设,但朴素贝叶斯通常是文本分类的起始算法。这主要是因为它简单易懂,训练和运行速度非常快。
支持向量机
支持向量机(support vector machine, SVM)是另一种常见的分类算法。任何分类方法的目标都是学习一个决策边界,作为不同类别文本之间的分隔(例如,新闻分类中的政治和体育类)。该决策边界可以是线性的,也可以是非线性的(例如圆)。支持向量机可以通过学习线性和非线性决策边界来区分不同类别的数据点。线性决策边界通过使不同类别之间的差异变得明显的方式来学习数据的表示。图 1-11 展示了二维特征表示的一个示例,其中黑点、白点分别属于不同的类别(例如,体育类新闻和政治类新闻)。支持向量机的目标是学习一个最优的决策边界,使得不同类别点之间的距离达到最大。支持向量机的最大优点是对数据变化和噪声具有稳健性。这种方法的主要缺点是训练时间长,当有大量训练数据时,便无法扩展。

图 1-11:支持向量机的二维特征表示
隐马尔可夫模型
隐马尔可夫模型(hidden Markov model, HMM)是一种统计模型,它假定存在一个不可观察、具有隐藏状态的潜在过程,数据由潜在过程生成。也就是说,只有在数据生成后才能观察到数据。隐马尔可夫模型试图根据这些数据对隐藏状态进行建模。例如,考虑词性标注任务(将词性标记分配给句子)。HMM 可用于文本数据的词性标注。这里假设文本是根据背后的隐藏语法生成的。隐藏状态就是词性,这些词性按照自然语言的语法,内在地定义了句子的结构,但我们只观察到了受这些隐藏状态支配的词。除此之外,HMM 还做了马尔可夫假设,即每个隐藏状态都依赖于先前的一个或多个状态。人类语言本质上是顺序的,句子中的当前词依赖于前面的词。因此,有了这两个假设,HMM 成为文本数据建模的强大工具。图 1-12 展示了学习句子词性的 HMM 示例。JJ(形容词)、NN(名词)等词性是隐藏状态,而“natural language processing (NLP) ...”是直接观察到的句子。

图 1-12:隐马尔可夫模型图示
关于自然语言处理的 HMM,请参阅 Daniel Jurafsky 和 James H. Martin 的著作 Speech and Language Processing (3rd ed. draft) 中第 8 章的详细讨论。
条件随机场
条件随机场(conditional random field, CRF)是另一种用于序列数据的算法。从概念上讲,CRF 本质上是对序列中的每个元素执行分类任务。考虑同样的词性标注例子,CRF 可以通过将每个词分类到某个词性(属于词性标注池)来逐词标注。由于 CRF 考虑了顺序输入和标注的语境,因此比其他常用的分类方法更具表现力,并且效果更好。在词性标注等依赖语言顺序的任务上,CRF 的性能优于 HMM。第 5 章、第 6 章和第 9 章将讨论 CRF 及其变体和应用程序。
以上是一些常见的机器学习算法,它们在自然语言处理任务中被大量使用。对这些机器学习方法有一些了解,将有助于理解本书中讨论的各种解决方案。除此之外,了解何时使用哪种算法也很重要,这些会在接下来的内容中讨论。如果想深入了解机器学习过程和详细的理论细节,推荐阅读 Christopher Bishop 的教科书 Pattern Recognition and Machine Learning。如果从应用的角度来学习机器学习,Aurélien Géron 的《机器学习实战:基于 Scikit-Learn、Keras 和 TensorFlow》是很好的入门读物。下面介绍自然语言处理的深度学习方法。
1.3用于自然语言处理的深度学习
前面简要介绍了自然语言处理任务中常用的几种机器学习方法。在过去的几年里,使用神经网络处理复杂、非结构化数据的任务出现了大幅度增长。语言本质上是复杂和非结构化的。因此,理解和解决语言任务的模型,需要具有更好的表示能力和学习能力。下面是几种常见的深度神经网络结构,它们在自然语言处理中已经深入人心。
循环神经网络
正如前面提到的,语言本质上是顺序的。任何语言的句子都是沿着一种方向阅读的。例如,英语句子是从左到右阅读的。因此,一个能够从头到尾逐步读入输入文本的模型对于语言理解是非常有用的。循环神经网络(recurrent neural network, RNN)的特殊设计可以确保这样的顺序处理和学习。RNN 的神经单元能够记忆目前为止所处理的内容。这种记忆是时间性的,当 RNN 每隔一个时间步读取输入中的下一个词时,信息就会被存储和更新。图 1-13 显示了一个展开的 RNN,以及它如何在不同的时间步跟踪输入。

图 1-13:展开的循环神经网络(参见 Christopher Olah 的文章“Understanding LSTM Networks”)
RNN 功能强大,非常适合处理文本分类、命名实体识别、机器翻译等各种自然语言处理任务。RNN 还可以用来生成文本,即通过读取前面的文本,预测下一个词或下一个字符。
长短期记忆
尽管 RNN 功能强大、用途广泛,但它们也存在健忘的问题。它们无法记住较长的语境,因此当输入文本较长时,就会表现不佳,而输入文本较长是普遍情况。长短期记忆(long short-term memory, LSTM)网络是 RNN 的一种,但它弥补了 RNN 的不足。LSTM 放弃了不相关的语境,只记住解决手头任务所需的语境,从而避开了这个问题。这减轻了向量表示的负担,不必记忆很长的语境。由于这种解决方法的优点,LSTM 在大多数应用程序中已经取代了 RNN。门控循环单元(gated recurrent unit, GRU)是 RNN 的另一种变体,主要用于语言生成。图 1-14 展示了单个 LSTM 单元的结构。第 4、5、6 和 9 章将讨论 LSTM 在各种自然语言处理应用程序中的具体用途。

图 1-14:LSTM 单元的结构(参见 Christopher Olah 的文章“Understanding LSTM Networks”)
卷积神经网络
卷积神经网络(convolutional neural network, CNN)在图像分类、视频识别等计算机视觉任务中得到了广泛应用。CNN 在自然语言处理,特别是文本分类任务中也取得了成功。将句子中的每个词替换为对应的词向量,所有的向量都具有相同的维度 d(见第 3 章的 3.3.1 节),因此,它们可以编排在一起形成维数为 n×d 的矩阵或二维数组,其中 n 是句子的词数,d 是词向量的大小。现在可以像图像一样处理这个矩阵,并且可以用 CNN 进行建模。CNN 的主要优点是能够使用语境窗口查看一组词。例如,在做情感分类时,有这样的句子:“我非常喜欢这部电影!(I like this movie very much!)”为了理解这句话,就需要关注词及其不同的相邻词集。根据结构定义,CNN 自然可以做到这一点。后面的内容将详细讨论这个问题。图 1-15 展示了 CNN 作用于一段文本,从中提取有用的短语,最终得出一个二进制数来指示句子的情感。
如图 1-15 所示,CNN 使用若干卷积层和池化层来实现文本的压缩表示,然后将其作为输入馈送到一个全连接层,从而学习文本分类等自然语言处理任务。第 4 章也会讨论 CNN。

图 1-15:CNN 模型示意
Transformer
Transformer 是自然语言处理深度学习模型联盟的新成员。在过去的两年中,Transformer 模型在几乎所有主要的自然语言处理任务中都达到了先进水平。Transformer 对文本语境进行建模,但不是按顺序进行的。给定输入中的一个词,Transformer 着重关注其周围的所有词(称为自注意力),并根据其语境来表示每个词。例如,“bank”一词根据其出现的语境可能具有不同的含义。如果语境涉及金融,那么它很可能指的是银行。另一方面,如果语境提到河流,那么它很可能指的是河岸。Transformer 能对这样的语境进行建模,因此在自然语言处理任务中被大量使用。这是因为与其他深度网络相比,Transformer 具有更强的表示能力。
最近,大型 Transformer 已被用于下游小型任务的迁移学习。迁移学习是将解决一个问题时获得的知识应用到其他不同但相关的问题的人工智能技术。Transformer 的思想是以无监督的方式训练一个非常大的 Transformer 模型(称为预训练)。Transformer 根据句子的其他部分预测句子的一部分,从而能对语言中高层次的细微差别进行编码。训练 Transformer 模型的文本数据超过 40GB,是从整个互联网收集的。大型 Transformer 的一个例子是 BERT(来自 Transformer 的双向编码器表示),如图 1-16 所示,它由海量数据预训练而得,并由谷歌开源。

图 1-16:BERT 架构:预训练模型和微调后适用于特定任务的模型
预训练模型如图 1-16 左侧所示。微调后可以用于文本分类、实体提取、问题回答等下游自然语言处理任务,如图 1-16 右侧所示。由于预训练知识量巨大,BERT 可以高效地将知识迁移到下游任务中,并且在许多下游任务中都达到了先进水平。本书将介绍使用 BERT 执行各种任务的各种示例。图 1-17 展示了 Transformer 的关键组件,即自注意力机制的工作原理。第 4、6 和 10 章将介绍 BERT 及其应用。

图 1-17:Transformer 中的自注意力机制(参见 Jay Alammar 的文章“The Illustrated Transformer”)
自动编码器
自动编码器(autoencoder)是一种不同类型的网络,主要用于学习输入的密集向量表示。例如,如何用一个向量来表示一个文本?这时不妨学习一个从输入文本到向量的映射函数。为了使映射函数有效,可以从向量表示反过来“重构”输入。这是一种无监督学习方式,不需要人工标注。训练结束后得到的密集向量表示,可以作为输入文本的编码。自动编码器通常用于创建下游任务所需的特征表示。图 1-18 描述了自动编码器的结构。

图 1-18:自动编码器的结构
在该方案中,隐层相当于输入数据的压缩表示,能捕捉数据的本质,输出层(解码器)则从压缩表示中重构输入表示。虽然图 1-18 中所示的自动编码器结构无法处理文本等顺序数据的特有属性,但把自动编码器改造成 LSTM 自动编码器,就可以很好地解决这些问题。
上面简要介绍了自然语言处理中常用的一些深度学习结构。希望以上介绍提供了足够的背景知识,便于读者理解本书后面提到的深度学习。
鉴于深度学习模型取得的新进展,人们可能会认为,深度学习应该是构建自然语言处理系统的首选方法。然而,对于大多数行业用例来说,这远非事实。下面来看其中的原因。
1.4为什么深度学习还不是自然语言处理的灵丹妙药
在过去的几年里,深度学习在自然语言处理领域取得了惊人的进展。例如,在文本分类中,基于 LSTM 和 CNN 的模型在许多分类任务中的性能超过了朴素贝叶斯和支持向量机等标准的机器学习技术。类似地,LSTM 在序列标注任务(如实体提取)中比条件随机场模型表现得更好。最近,功能强大的 Transformer 模型在文本分类、序列标注等大多数自然语言处理任务中已经成为最先进的技术。目前的一个大趋势是,设计大型 Transformer 模型(就参数数量而言),在庞大的数据集上进行训练,以完成语言模型等通用的自然语言处理任务,然后微调 Transformer,使之适应下游的小型任务。这种迁移学习方法在计算机视觉、语音等其他领域也取得了成功。
尽管取得了如此巨大的成功,但在行业应用程序中,深度学习仍然不是所有自然语言处理任务的灵丹妙药,其中的一些关键原因列举如下。
小数据集上的过拟合
与传统的机器学习模型相比,深度学习模型具有更多的参数,这意味着它们具有更强的表达能力。但这也伴随着一个诅咒。奥卡姆剃刀法则指出,在所有其他条件都相同的情况下,更简单的解决方案总是更可取的。在开发阶段,很多时候都没有足够的训练数据来训练复杂的网络。在这种情况下,与深度学习模型相比,应该首选更简单的模型。深度学习模型在小数据集上过度拟合,导致泛化能力差,进而导致产品性能差。
少样本学习与合成数据生成
在计算机视觉等学科中,深度学习在少样本学习(即从很少的训练样例中学习)和高质量图像生成模型方面取得了重大进展。这两个进步都使得在少量数据上训练基于深度学习的视觉模型变得可行。因此,深度学习已经被广泛应用于解决行业场景中的问题。但是在自然语言处理领域,还没有看到与之类似的、成功的深度学习技术。
领域适应
如果大型深度学习模型是用某些常用领域(例如新闻文章)的数据集训练的,那么将训练好的模型应用到其他领域(例如社交媒体帖文),就可能导致性能较差。这种泛化带来的性能损失表明深度学习模型并不是百试百灵的。例如,在互联网文本和产品评论上训练的模型,如果用于法律、社交媒体或医疗保健等领域,就会效果不佳。这是因为在这些领域所用的语言,其句法和语义结构是特定的。这就需要专门的模型来编码领域知识,这种模型需要像领域特定的、基于规则的模型一样简单。
可解释模型
除了有效的领域适应外,可控性和可解释性对于深度学习模型来说也是困难的。在大多数时候,深度学习模型像黑箱一样工作。业务部门通常需要更可解释的结果,以便解释给客户或最终用户。在这些情况下,传统技术可能更有用。例如,在情感分类中,朴素贝叶斯模型可以解释强烈的正向词汇和负向词汇对最终情感预测的影响。
到目前为止,从 LSTM 分类模型中获得这样的见解是困难的。相比之下,在计算机视觉领域,深度学习模型不再是黑箱。有许多技术用于解释模型做出特定预测的原因。但在自然语言处理领域,这种方法尚不常见。
常识与世界知识
尽管机器学习和深度学习模型在基准自然语言处理任务上已经取得了很好的性能,但是对于科学家来说,语言仍然是一个较大的谜团。除了句法和语义之外,语言还包含了周围世界的知识。语言交流依赖于对世界事件的逻辑推理和常识。例如,“我喜欢比萨”意味着“我吃比萨的时候很开心”。更复杂一点,“如果约翰走出卧室去花园,那么约翰已经不在卧室了,他现在的位置是花园”。这对人类来说可能是显而易见的,但它需要机器进行多步推理来识别事件并理解其后果。由于世界知识和常识是语言所固有的,理解它们对深度学习模型在各种语言任务上的良好表现是至关重要的。当前的深度学习模型可以在标准测试上表现良好,但仍然不能进行常识理解和逻辑推理。虽然有人在收集常识事件和逻辑规则(如“若–则”推理)方面做了一些努力,但它们还没有很好地与机器学习或深度学习模型集成。
成本
为自然语言处理任务构建基于深度学习的解决方案可能非常昂贵。从金钱和时间方面来看,成本有多个来源。深度学习模型是众所周知的数据吞噬者。收集大型数据集并对其进行标注会非常昂贵。由于深度学习模型体积庞大,训练它们达到期望的性能不仅会增加开发周期,而且还会导致专用硬件(GPU)上的巨大开销。此外,部署和维护深度学习模型在硬件要求和工作量方面都很昂贵。最后,由于体积庞大,深度学习模型会在推理过程中导致延迟问题,如果低延迟是硬性要求,那么这些模型反而毫无用处。在这个缺点列表中,还可以添加一项:构建和维护重型模型会产生技术债务。宽泛地说,技术债务是由于重快速交付、轻良好设计和实现选型而产生的返工成本。
设备上部署
对于许多用例,自然语言处理解决方案需要部署在嵌入式设备上,而不是部署在云端。例如一个机器翻译系统,需要未联网的情况下,也可以帮助游客说出翻译后的文本。在这种情况下,由于设备的限制,解决方案必须在有限的内存和电量下工作。大多数的深度学习解决方案都不满足这样的约束。虽然这个方向上有一些努力,即在边缘设备上部署深度学习模型,但是这离通用的解决方案还有相当远的距离。
在大多数行业项目中,上面提到的一个或多个因素都会体现出来。这会导致更长的项目周期和更高的硬件和人力成本,但性能只与机器学习模型相当,有时甚至低于机器学习模型。这使得投资回报率很低,并且经常导致项目失败。
基于上述讨论,很明显,深度学习并不总是业界所有自然语言处理应用程序的最佳解决方案。因此,本书先介绍各种自然语言处理任务的基本情况,然后使用一系列技术,包括基于规则的系统和深度学习模型等来解决它们。本书强调数据需求和模型构建流水线,而不仅仅是单个模型的技术细节。鉴于这一领域的快速发展,预计未来会出现更新的深度学习模型,来推进技术的发展,但自然语言处理任务的基本原理不会发生实质性的变化。因此,本书先讨论自然语言处理的基础,并在此基础上开发尽可能复杂的模型,而不是直接跳到前沿技术。
与卡内基–梅隆大学的 Zachary Lipton 教授和加州大学伯克利分校的 Jacob Steinhardt 教授在其文章“Troubling Trends in Machine Learning Scholarship”中所主张的一样,我们也在此警示:不要在没有来龙去脉和适当训练的情况下大量阅读机器学习和自然语言处理方面的科学文章、研究论文和博客。紧跟大量前沿工作可能会造成概念混淆和理解不准确。许多最近的深度学习模型没有办法充分解释其经验收益的原因。Lipton 和 Steinhardt 也认识到,机器学习类的科学文章往往无法提供解决手头问题的清晰路径,而且还存在术语的混淆和语言的误用。因此,本书通过各章的示例、代码和提示,仔细描述了自然语言处理任务中机器学习的各种技术概念。
到目前为止,我们已经介绍了语言、自然语言处理、机器学习和深度学习相关的一些基本概念。在结束第 1 章之前,先来看一个案例研究,以便更好地理解自然语言处理应用程序的各个组件。
2.自然语言处理演练:对话智能体
亚马逊 Alexa、Apple Siri 等基于语音的对话智能体是最普遍的自然语言处理应用程序,也是大多数人已经熟悉的应用程序。图 1-19 展示了对话智能体的典型交互模型。

图 1-19:对话智能体流程
下面介绍图中流程用到的主要自然语言处理组件。
-
语音识别和合成。这些是任何基于语音的对话智能体的主要组件。语音识别包括将语音信号转换成音素,然后将这些音素转录成词。语音合成则是将文本结果转化成口语的反向过程。这两种技术在过去十年中都有了长足的进步,建议在大多数标准情况下使用云 API。
-
自然语言理解
。这是对话智能体流水线中的下一个组件,它使用自然语言理解系统分析接收到的用户响应(转录为文本)。这可以分解为许多小的自然语言处理子任务,列举如下。
- 情感分析。这里分析的是用户响应的情感。第 4 章将介绍这一点。
- 命名实体识别。这里识别的是用户响应中提到的所有重要实体。这将在第 5 章讨论。
- 共指消解。这里是指从对话历史中找出所提取实体的指代。例如,用户可能会说“《复仇者联盟 4:终局之战》很棒”,后面再次提到电影时说“电影的特效很棒”。在这种情况下,“电影”指的是《复仇者联盟 4:终局之战》。第 5 章会对此做简要介绍。
-
对话管理。从用户响应中提取了有用的信息之后,就需要理解用户的意图:他们是在问一个事实性的问题,比如“今天天气如何”,还是在给出一个命令,比如“播放莫扎特歌曲”。可以使用文本分类系统将用户响应分类为预定义的意图之一。这有助于对话智能体知道用户在问什么。意图分类将在第 4 章和第 6 章讨论。在此过程中,系统可能会提出一些澄清问题,以从用户那里获得进一步的信息。一旦弄清楚了用户的意图,对话智能体就需要知道应该采取哪些合适的行动来满足用户的请求。这是基于从用户响应中提取的信息和意图来完成的。适当的行动包括通过互联网生成答案、播放音乐、调暗灯光或者提出澄清问题。第 6 章将讨论这个问题。
-
响应生成。最后,对话智能体根据用户意图的语义解释和用户对话的其他输入来生成合适的执行动作。如前所述,智能体可以从知识库中检索信息,并使用预定义的模板生成响应。例如,它可能会回应说,“现在正在演奏《第 25 号交响曲》”或“灯光已经调暗”。在某些情况下,它还会生成一个全新的响应。
这个简短的案例研究概述了不同的自然语言处理组件如何结合在一起构建对话智能体应用程序。随着本书的进展,后面还会介绍更多关于这些组件的细节。第 6 章将专门讨论对话智能体。
3.什么是自然语言处理?
自然语言处理(Natural Language Processing,NLP):是计算机科学,人工智能和语言学的交叉领域。目标是让计算机处理或“理解”自然语言,以执行语言翻译和问题回答等任务。
NLP包含自然语言理解(Natural Language Understanding,NLU) 和自然语言生成(Natural Language Generation, NLG)两个重要方向,如下图所示。
- 自然语言理解NLU旨在将人的语言形式转化为机器可理解的、结构化的、完整的语义表示,通俗来讲就是让计算机能够理解和生成人类语言。
- 自然语言生成NLG旨在让机器根据确定的结构化数据、文本、音视频等生成人类可以理解的自然语言形式的文本。
4.什么是自然语言?
自然语言通常会自然地随文化发生演化,英语、汉语、日语都是具体种类的自然语言,这些自然语言履行着语言最原始的作用:人们进行交互和思想交流的媒介性工具。
- 语音:与发音有关的学问,主要在语音技术中发挥作用。
- 音韵:由语音组合起来的读音,即汉语拼音和四声调。
- 词态:封装了可用于自然语言理解的有用信息,其中信息量的大小取决于具体的语言种类。中文没有太多的词态变换,仅存在不同的偏旁,导致出现词的性别转换的情况。
- 句法:主要研究词语如何组成合乎语法的句子,句法提供单词组成句子的约束条件,为语义的合成提供框架。
- 语义和语用:自然语言所包含和表达的意思
5.NLP的流程
自然语言处理(NLP)的流程涉及多个任务,通常可以分为以下主要步骤:
- 文本预处理: 在NLP流程的初始阶段,文本通常需要进行预处理,包括去除标点符号、停用词、处理大小写,进行词干提取(stemming)或词形还原(lemmatization)等。这有助于减小数据维度和统一文本表示。
- 分词(Tokenization): 将文本分割成独立的单元,通常是词语或子词。分词是NLP中一个基础性的任务,尤其在英文中,通过将文本拆分成词语有助于后续的处理。
- 词嵌入(Word Embeddings): 将分词后的词语映射到实数向量空间,以便计算机能够理解和处理。Word Embeddings方法可以是基于预训练的模型,如Word2Vec、GloVe,或者是更先进的模型如BERT、ELMo等。
- 词性标注(Part-of-Speech Tagging): 为文本中的每个词语标注其词性,如名词、动词、形容词等。这有助于理解句子的语法结构。
- 实体识别(Named Entity Recognition,NER): 识别文本中的命名实体,例如人名、地名、组织名等。NER对于信息提取等任务非常重要。
- 句法分析(Parsing): 分析句子的结构,包括识别短语结构和依赖关系,以获得更深层次的语法信息。
- 情感分析(Sentiment Analysis): 判断文本的情感倾向,通常分为正面、负面和中性。情感分析在社交媒体监控、产品评论等方面应用广泛。
- 文本分类: 将文本分到预定义的类别中,是NLP中一个常见的任务。例如,垃圾邮件过滤、主题分类等。
- 问答系统(Question Answering): 针对给定的问题,从文本中提取相关的信息并生成答案。这种任务常用于智能助手和搜索引擎等应用。
- 机器翻译(Machine Translation): 将一种语言的文本翻译成另一种语言的文本,是NLP中的经典问题之一。
- 生成式任务: 生成式任务包括文本摘要、对话生成等,要求系统生成符合语法和语义规范的文本。
这些任务在NLP中互相交织,通常形成一个端到端的流程。对于每个任务,都有不同的技术和方法,包括传统的机器学习方法和基于深度学习的方法。近年来,预训练模型(如BERT、GPT等)的兴起推动了NLP领域的发展,使得许多任务取得了显著的性能提升。
6.文本理解和文本输出分别依赖哪些流程和方法
文本理解和文本输出是自然语言处理(NLP)中的两个重要方面,它们依赖不同的流程和方法。以下是它们各自的关键流程和方法:
文本理解
- 分词和词嵌入: 文本理解的基础是将文本分解成词语,并将这些词语映射到实数向量空间中。分词和词嵌入是实现这一步骤的关键技术,有助于计算机理解词语之间的语义关系。
- 词性标注和实体识别: 通过对文本进行词性标注和实体识别,计算机能够更好地理解文本中每个词语的语法角色和命名实体。
- 句法和语法分析: 句法分析帮助理解文本的结构,包括短语结构和依赖关系。这对于把握句子中各部分的关系非常重要。
- 语义角色标注: 标注词语在句子中的语义角色,有助于理解谓词和论元之间的关系。
- 情感分析: 对文本中的情感进行分析,判断文本的情感倾向,从而更全面地理解文本的含义。
- 核心ference Resolution: 处理代词和指代关系,以确保在文本理解中准确地连接名词短语和代词的含义。
- 知识图谱和实体关系: 利用知识图谱等知识库,识别文本中的实体之间的关系,从而扩展文本的语义理解。
文本输出
- 文本生成: 利用生成式模型,如循环神经网络(RNN)或变换器(Transformer),以生成自然语言文本。这可用于任务如机器翻译、对话生成、文章摘要等。
- 文本分类: 将文本分到不同的类别中,通过监督学习或迁移学习等技术,可用于情感分析、主题分类等。
- 序列生成: 对于序列到序列的任务,如机器翻译,模型需要学会将一个序列映射到另一个序列,实现文本的输出。
- 回归分析: 针对一些任务,可能需要生成数值型的输出,而非文本。这可以通过回归分析来实现,例如在价格预测等领域。
- 问答系统: 对于问答任务,生成适当的答案是一个重要的文本输出过程。这可以通过阅读理解模型或生成式的方法来实现。
- 文本修复: 在一些应用中,文本可能包含错误,文本输出的任务可能包括自动修复、拼写检查等。
- 文字编辑和增强: 生成修改、编辑或增强文本的模型,例如自动摘要生成,以及对文本进行风格转换等。
这两个方面的任务往往是相互关联的,文本理解提供了对输入文本的深层次理解,而文本输出涉及将这种理解转化为计算机能够生成或输出的形式。在实际应用中,通常会将这两个方面结合起来,构建端到端的NLP系统。
7.小结
从“语言是什么”的大致介绍,到真实自然语言处理应用程序的具体案例研究,本章涵盖了一系列的自然语言处理主题。本章还讨论了自然语言处理在现实世界中的应用,它的一些挑战和不同的任务,以及机器学习和深度学习在自然语言处理中的作用。这一章的目的是提供全书的基础知识。接下来的两章(第 2 章和第 3 章)将介绍构建自然语言处理应用程序所需的一些基本步骤。第 4~7 章关注自然语言处理的核心任务以及可以用它们解决的行业用例。第 8~10 章将讨论自然语言处理在电子商务、医疗保健、金融等各种垂直行业中的使用。第 11 章将所有内容汇总到一起,并讨论了在设计、开发、测试和部署方面构建端到端自然语言处理应用程序需要采取的措施。有了这个全面的概述,下面开始深入探索自然语言处理的世界。