参与Panda

自然语言处理基础:上下文词表征入门解读

自然语言处理的基础涉及到对词的表征。华盛顿大学计算机科学与工程教授 Noah Smith(史諾亞)近日在 arXiv 发布了一篇入门介绍论文,由浅入深通俗易懂地介绍了自然语言处理中对词的处理和表示方法。机器之心重点编译介绍了其中涉及上下文的第 4 和 5 节,略过了第 2 和 3 节的基础介绍。感兴趣的读者可参阅机器之心之前发布的系列文章《词嵌入系列博客:一、二、三》。

论文:https://arxiv.org/abs/1902.06006

摘要:这篇介绍论文的目的是讲述如何让计算机处理语言的故事。这是自然语言处理(NLP)领域的一部分,而 NLP 又是人工智能的一个分支领域。本文的目标是让广泛的受众都能获得对计算机编程的基本理解,但其中避免了详细的数学描述,并且不会给出任何算法。本文的重点也并非 NLP 的任何特定的应用,比如翻译、问答信息抽取。这里给出的思想经过了许多研究者数十年的发展,所以引用的文献并非详尽无遗,但能为读者指出一些在作者看来影响深远的论文。在读完本文之后,你应当会有对词向量(也被称为词嵌入)的大致理解:它们为何存在、它们解决的是什么问题、它们来自何处、它们如何随时间变化、有关它们还有那些有待解决的问题。建议已经熟悉词向量的读者跳至第 5 节查看有关当前最新进展「上下文词向量」的讨论。

1 前提准备

我们有两种谈论词的方式。

  • word token,这是一段文本形式的词。在某些语言中,确认 word token 的边界是一个复杂的过程(而且该语言的说话人可能不认同「正确的」规则),但在英语中,我们往往使用空格和标点符号来分割词;在本文中,我们假设这已被「解决」。

  • word type,这是抽象的词。每个 word token 据说都「属于」自己的 type。当我们统计一个词在一段文本(称为语料库)中的出现情况时,我们统计的是属于同一 word type 的 token 的数量。

4 词即分布向量:上下文即含义

语言学中有一个重要思想:能以类似方式使用的词(表达)很可能具有相关的含义。在大型语料库中,我们可以收集有关一种 word type w 的使用方式的信息,比如,通过统计它出现在每个其它词旁边的次数。当我们开始调查 w 所在的语料库中上下文的完整分布时,我们就能从分布的角度看待词义。

基于这一思想设计的一种自动推导特征的一种很成功的方法是聚类;比如 Brown et al. (1992) 的聚类算法能基于词在语料库中的上下文自动将词组织成不同的集群。经常出现在同样的相邻上下文(其它词)中的词会被划入到同一个集群。然后这些集群会融合成更大的集群。所得到的层次结构尽管与 WordNet 中专家设计的数据结构绝不相同,但在可解释性和实用性方面好得惊人。它还有可在任意给定语料库上重建的优势,而且每个被观察的词都会被包含进来。因此,可以为新闻文本或生物医学文章或微博分别构建合适的词聚类

另一类方法首先是创建词向量,其中每个维度对应于该 word type 出现在某个上下文中的频率(Deerwester et al., 1990)。比如,一个维度可能对应于 the,包含该词紧随 the 之后出现的次数。其中可能包含在左侧或右侧以及不同的距离和长度的上下文模式。结果可能是一个长度超过词库大小许多倍的向量,其中每个维度都包含微量可能有用或没用的信息。使用来自线性代数的方法(被恰当地称为「降维」),这些向量可被压缩成更短的向量,其中各维度间的冗余可被折叠起来。

这些降维后的向量有一些优势。首先,为了满足程序的需要,NLP 程序开发者可以对这些维度进行选择。更紧凑的向量可能计算起来更为高效,而且压缩所造成的信息损失也可能是有益的,因为特定语料的「噪声」可能就会这样消失。但也存在一些权衡;更长、压缩更少的向量能保留分布向量中更多的原始信息。尽管压缩向量的单个维度难以解读,但我们可以使用众所周知的算法寻找一个词在该向量空间中的最近邻,而且已经发现这些词往往在语义上是相关的。

(实际上,这些观察催生了向量空间语义(vector space semantics)这一思想(参见 Turney and Pantel, 2010),即可将代数运算应用于这些词向量以调查其中学习到了何种「含义」。举一个著名的例子:「男人之于女人相当于国王之于女王」这个类比可以得到一个测试方法,即 v(男人) − v(女人) = v(国王) − v(女王)。人们设计了一些遵守这类性质的词向量算法。)

降维后的向量也有一个显著的缺点,即单个维度不再是可解释的特征,不能映射回提供了该词含义的直观的构建模块。该词的含义分布在整个向量上;因此,这些向量有时也被称为「分布式表征」。

随着语料库的增长,可扩展性就成了一大难题,因为可观察上下文的数量也会增长。所有词向量算法都基于这样一个概念:每个 word type 的向量中每个维度中的值都是一个可优化的参数,再加上所有其它参数,可以最好地拟合数据中观察到的词模式。因为我们将这些参数看作是连续值,而且「拟合数据」的概念可以通过一个平滑的连续的目标函数来操作,所以可以使用基于梯度下降的迭代算法来选择这些参数值。使用机器学习领域常用的工具,研究者已经开发出了一些基于随机优化的更快速的方法。word2vec 软件包(Mikolov et al., 2013)即是一个广为人知的算法集。现在常见的模式是有大型语料库和强大计算基础设施的行业研究者会使用已经建立好的(往往成本很高)迭代方法构建词向量,然后发布这些向量以供任何人使用。

在获取分布词向量方面,还有很多人在探索新的方法。这里提一些有趣的想法:

  • 当我们希望将神经网络用于 NLP 问题时,一个有用的做法是:首先将每个输入的 word token 映射成它的向量,然后再将这些词向量「馈送」到执行翻译等任务的神经网络模型中。这些向量可以是事先固定的(即使用类似上述的方法在一个语料库上进行过预训练,通常来自其他人),或它们可被视为神经网络模型的参数,之后针对任务进行具体的调整(比如 Collobert et al., 2011)。微调(fine-tuning)是指先通过预训练初始化词向量,然后通过针对具体任务的学习算法来调整。这些词向量也可以初始化为随机值,然后仅通过任务学习来进行评估,我们可以称之为「从头学习」。

  • 使用专家构建的数据结构(如 WordNet)作为附加输入来创建词向量。一种被称为 retrofitting 的方法首先是从一个语料库提取词向量,然后想办法调整它们,使得 WordNet 中相关的 word type 在向量空间中更为接近((Faruqui et al., 2015)。

  • 使用双语词典将两种语言中的词的向量在单个向量空间中「对齐」,使得对应的词的向量有较小的欧几里德距离,比如英语 word type「cucumber」和法语 word type「concombre」(Faruqui and Dyer, 2014)。通过构建一个能将所有英语向量重新定位到法语空间(或反过来)的函数,研究者希望能对齐所有的英语词和法语词,而不只是双语词典中的那些词。

  • 词的向量的计算依据有一部分(或完全)是其字符序列(Ling et al., 2015)。这些方法往往是使用神经网络将任意长度的序列映射成固定长度的向量。这有两个有趣的效果:(1)在具有复杂的构词体系(形态学)的语言中,同一基本词根的不同变体可能具有相似的向量,(2)同一词的不同拼写的变体会具有相似的向量。这类方法在社交媒体文本方面的应用是相当成功的,因为社交媒体文本中存在丰富的拼写变体。比如,would 一词在社交媒体消息中就有多种变体,它们会具有相似的基于字符的词向量,因为它们具有类似的拼写:would、wud、wld、wuld、wouldd、woud、wudd、whould、woudl、w0uld。

5 上下文词向量

我们在一开始就对 word token 和 word type 进行了区分。一直以来,我们都假设在我们的 NLP 程序中,每个 word type 都会由一个固定的数据对象表示(先是整数,之后是向量)。这样很方便,但这样一些对语言的假设并不符合实际。最重要的是,很多词在不同的语境/上下文中会具有不同的含义。专家们在设计 WordNet 时就较粗略地包含了这个现象,比如,get 映射了超过 30 种不同的含义(或领会的意思)。应该为不同的词分配多少种含义,或一个含义与另一个含义的边界如何确定?这些问题很难得到人们广泛认同的一致性意见,何况词义还可能流动转变。实际上,在很多基于神经网络的 NLP 程序中,最先做的事情都是将每个 word token 的 type 向量传递给一个函数,该函数会基于这个 word token 临近上下文的词对其进行变换,给出这个词向量的一个新版本(现在特定于在自身特有上下文中的 token)。在我们之前的示例句子中,be 的两个实例就会有不同的向量,因为一个出现在 will 和 signed 之间,另一个则位于 we'll 和 able 之间。

现在看来,通过独立于上下文地表征 word type 实际上会让问题难度超过必需的程度。因为词在不同的上下文中会具有不同的含义,我们需要 type 的表征具备所有这些可能性(比如 get 的 30 个含义)。转向 word token 向量能简化这些事情,只需要求 word token 表征仅获取该词在这个上下文中的含义即可。因为同样的原因,一个 word type 所在的上下文集合能提供有关其含义的线索,一个特定的 token 上下文会提供有关其具体含义的线索。举个例子,你可能不知道 blicket 一词的含义,但如果我说「I ate a strawberry blicket for dessert」,你大概就能很好地猜测。

回到相似度的基本概念,我们可以预料:彼此相似的词能够很好地互相替代。比如,能够很好替代 gin 的词有哪些?只考虑 word type 的话,这个问题很难回答。WordNet 告诉我们,gin 可以指一种酒品、捕猎的陷阱、分离种子与棉花纤维的机器、一种卡牌游戏。但如果我们考虑了给定的上下文(比如 I use two parts gin to one part vermouth.),就会很简单。实际上,如果能用 vodka 替代 gin,那么可以预计 vodka 会有一个相似的上下文词向量。

ELMo 表示「embeddings from language models(来自语言模型的嵌入)」(Peters et al., 2018a),它为 word token 向量的形式(即词在上下文中的向量或上下文词向量)带来了强有力的进步,这些向量在大型语料库上进行过预训练。ELMo 背后有两个重要的见解:

  • 如果每个 word token 都有自己的向量,那么该向量就依赖于一个任意长度的临近词上下文。为了得到「上下文向量」,我们可以从 word type 向量开始,然后将它们传递通过一个神经网络,该神经网络可以将任意长度的上文词向量和下文词向量转换成单个固定长度的向量。不同于 word type 向量(本质上是查找表),上下文词向量既包括 type 层面的向量,也包括「上下文化(contextualize)」每个词的神经网络参数ELMo 会为上文训练一个神经网络(一直回到 token 所在的句子的起始位置),还会为下文训练一个神经网络(直到句子结束)。超出句子范围的更长的上下文也是可能的。

  • 回想一下,估计词向量需要通过求解一个优化问题来「拟合数据」(这里的数据是语料库)。NLP 领域有一个长期存在的数据拟合问题,即语言建模,这是指根据「历史」词的序列预测下一个词。很多已在使用的词(type)向量算法都基于概念固定大小的上下文,这收集自该 word type 在一个语料库中的所有实例。ELMo 走得更远,使用了任意长度的历史并且整合了那时候已知最有效的语言模型(基于循环神经网络,Sundermeyer et al., 2012)。尽管那时循环网络已在 NLP 领域有广泛的应用,但训练它们作为语言模型,然后使用它们为每个 word token 提供的上下文向量作为预训练的词(token)向量的方法是全新的。

了解词在计算机中的完整处理过程会很有意思。通过观察词所处的上下文,文本数据能为词义提供指导;这个强有力的思想引导我们主要通过 word token 所在的具体上下文来获取该 word token 的含义。这意味着 plant 的每个实例都有一个不同的词向量;那些上下文看起来提到了植物的预计会彼此更为接近,而那些上下文可能提到了生产制造中心的则会聚集在向量空间中的另一处。这个发展能否完全解决词具有不同含义的难题?这一点还有待观察,但研究已经表明 ELMo 在一些 NLP 程序中是非常有益的,包括:

  • 问答(在 SQuAD 基准上相对误差下降了 9%)

  • 标记动词的语义参数(在 Ontonotes 语义角色标注基准上相对误差下降了 16%)

  • 标注文本中指代人或组织等命名实体的表达(在 CoNLL 2003 基准上相对误差下降了 4%)

  • 求解哪些指示表达指代同一实体(在 Ontonotes 共指消解基准上相对误差下降了 10%)

Peters et al. (2018a) 和之后的其他研究者还报告了在其它任务上取得的进展。Howard and Ruder (2018) 引入了一种类似的方法 ULMFiT,研究表明有助于文本分类任务。之后的来自 transformer 的双向编码器表征(BERT; Devlin et al., 2018)提出了一些学习方法的创新,并且学习了更多数据,在第一个任务上实现了进一步的 45% 的误差下降(相对于 ELMo),在第二个任务上下降了 7%。在 SWAG 基准上,这些方法最近被用来测试基础常识推理(Zellers et al., 2018),Devlin et al. (2018) 发现 ELMo 相对于非上下文词向量实现了 5% 的相对误差下降,BERT 相对于 ELMo 又额外降低了 66%。

在撰写本文时,在不同方法的相对性能方面还存在很多有待解决的问题。对学习算法(尤其是神经网络架构)之间的差异进行完整的解释超出了本文范围,但可以相当合理地说:学习方法的可能空间尚未得到完全的探索;Peters et al. (2018b) 中有一些探索方向。在 BERT 上的一些发现表明微调可能具有至关重要的作用。尽管 ELMo 源自语言建模,但 BERT 求解的建模问题(即在估计阶段最小化的目标函数)却相当不同。用于学习语言模型的数据集的作用还没有得到完整的评估,除了这一个并不让人惊讶的模式:更大的数据集往往更有益。

6 注意

  • 词向量是有偏差的

  • 语言远不只是词

  • 自然语言处理不是一个单一问题

理论自然语言理解
6
相关数据
随机优化技术

随机优化(SO)方法是生成和使用随机变量的优化方法。 对于随机问题,随机变量出现在优化问题本身的表述中,其涉及随机目标函数或随机约束。

基于Transformer 的双向编码器表征技术

BERT是谷歌发布的基于双向 Transformer的大规模预训练语言模型,该预训练模型能高效抽取文本信息并应用于各种NLP任务,并刷新了 11 项 NLP 任务的当前最优性能记录。BERT的全称是基于Transformer的双向编码器表征,其中“双向”表示模型在处理某一个词时,它能同时利用前面的词和后面的词两部分信息。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

人工智能技术

在学术研究领域,人工智能通常指能够感知周围环境并采取行动以实现最优的可能结果的智能体(intelligent agent)

基准技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。

词嵌入技术

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

文本分类技术

该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

语料库技术

语料库一词在语言学上意指大量的文本,通常经过整理,具有既定格式与标记;事实上,语料库英文 "text corpus" 的涵意即为"body of text"。

目标函数技术

目标函数f(x)就是用设计变量来表示的所追求的目标形式,所以目标函数就是设计变量的函数,是一个标量。从工程意义讲,目标函数是系统的性能标准,比如,一个结构的最轻重量、最低造价、最合理形式;一件产品的最短生产时间、最小能量消耗;一个实验的最佳配方等等,建立目标函数的过程就是寻找设计变量与目标的关系的过程,目标函数和设计变量的关系可用曲线、曲面或超曲面表示。

降维技术

降维算法是将 p+1 个系数的问题简化为 M+1 个系数的问题,其中 M<p。算法执行包括计算变量的 M 个不同线性组合或投射(projection)。然后这 M 个投射作为预测器通过最小二乘法拟合一个线性回归模型。两个主要的方法是主成分回归(principal component regression)和偏最小二乘法(partial least squares)。

word2vec技术

Word2vec,为一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。 训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系。该向量为神经网络之隐藏层。 Word2vec依赖skip-grams或连续词袋(CBOW)来建立神经词嵌入。Word2vec为托马斯·米科洛夫(Tomas Mikolov)在Google带领的研究团队创造。该算法渐渐被其他人所分析和解释。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

线性代数技术

线性代数是数学的一个分支,它的研究对象是向量,向量空间(或称线性空间),线性变换和有限维的线性方程组。向量空间是现代数学的一个重要课题;因而,线性代数被广泛地应用于抽象代数和泛函分析中;通过解析几何,线性代数得以被具体表示。线性代数的理论已被泛化为算子理论。由于科学研究中的非线性模型通常可以被近似为线性模型,使得线性代数被广泛地应用于自然科学和社会科学中。

WordNet技术

WordNet是由普林斯顿大学心理学家、语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典。它不是光把单词以字母顺序排列,而是按照单词的意义组成一个“单词的网络”。

信息抽取技术

信息/数据抽取是指从非结构化或半结构化文档中提取结构化信息的技术。信息抽取有两部分:命名实体识别(目标是识别和分类真实世界里的知名实体)和关系提取(目标是提取实体之间的语义关系)。概率模型/分类器可以帮助实现这些任务。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

聚类技术

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

ELMo技术

ELMO 是“Embedding from Language Models”的简称, ELMO 本身是个根据当前上下文对 Word Embedding 动态调整的思路。ELMO 采用了典型的两阶段过程,第一个阶段是利用语言模型进行预训练;第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的 Word Embedding 作为新特征补充到下游任务中。

推荐文章
暂无评论
暂无评论~