
Communications Mining 用户指南
Communications Mining™ 的机器学习算法基于预训练的Transformer模型,该模型能够学习文本序列的语义信息表示(称为嵌入)。在过去的几年中,Transformer 模型在大多数常见的自然语言处理 (NLP) 任务上都取得了最先进的结果。
但是我们是怎么走到这一步的呢? 是什么导致变换器成为训练嵌入的首选模型? 在过去的 10 年中,NLP 的最大进步得益于学习无监督预训练文本嵌入方面的进步。 在这篇文章中,我们将着眼于嵌入方法的历史,以及它们如何随着时间的推移而改进。
这篇文章将
- 解释什么是嵌入以及嵌入在常见 NLP 应用程序中的用法。
- 介绍训练嵌入的流行方法的历史,包括 word2vec 等传统方法和 BERT 等基于 Transformer 的现代方法。
- 讨论嵌入方法的缺点及其解决方法。
假设我们有一个大型文档语料库,要对其执行任务,例如识别讲话者的意图。 大多数先进的 NLP 方法都使用基于神经网络的方法。 首先将每个单词编码为数字向量,称为嵌入。 然后,神经网络可以将这些嵌入作为输入,以执行给定的任务。
假设语料库包含 10,000 个唯一的单词。 我们可以使用“one-hot”嵌入(即一个除与单词对应的单个位置为 0 的稀疏 10,000 维向量,其值为 1)对每个单词进行编码,例如
'a' = [1, 0, 0, ..., 0, 0]
...
'my' = [0, ..., 0, 1, 0, ..., 0]
...
'you' = [0, 0, ..., 0, 0, 1]
'a' = [1, 0, 0, ..., 0, 0]
...
'my' = [0, ..., 0, 1, 0, ..., 0]
...
'you' = [0, 0, ..., 0, 0, 1]
但是,此方法存在一些问题:
- 不含语义信息的嵌入
- 使用 one-hot 编码方法时,所有嵌入都彼此垂直。 理想情况下,我们希望在语义上彼此相关的单词具有“相似”的嵌入,但 one-hot 嵌入不会直接对相似性信息进行编码。
- 高维
- 每个单词都有一个 10,000 维向量,这意味着在使用基于神经网络的方法时,我们可能很快就会耗尽内存。 在许多领域中,10,000 个词汇量已经被视为较小的词汇量,而词汇表的大小通常是其 5 到 10 倍。
因此,低维密集嵌入更受欢迎。 除了解决 one-hot 嵌入的内存问题外,它们还可以对两个词在语义上相似的概念进行编码。 例如,假设我们有 4 维密集嵌入。 我们可能希望“apple”和“annana”的嵌入相似,例如
apple = [3.14, -0.03, -0.26, -2.27]
banana = [2.95, -0.18, -0.11, 0.09]
apple = [3.14, -0.03, -0.26, -2.27]
banana = [2.95, -0.18, -0.11, 0.09]
两者的第一个位置都有较大的正值。 我们可能还希望“apple”和“microsoft”的嵌入相似,例如
apple = [3.14, -0.03, -0.26, -2.27]
microsoft = [-0.12, 0.48, -0.05, -2.63]
apple = [3.14, -0.03, -0.26, -2.27]
microsoft = [-0.12, 0.48, -0.05, -2.63]
两者的第四个位置都有一个较大的负值。
如何使用嵌入?
对语义信息进行编码的嵌入在所有 NLP 应用程序中至关重要。 无论使用它们的模型设计得多么好,如果嵌入的信息不足,则模型将无法提取必要的信号以进行准确的预测。
分类
对于分类任务(例如情感分析)时,最常见的方法是将文档的嵌入聚合到单个向量中,然后将此文档向量作为输入传递到负责进行预测的前馈网络(请参见图 1 中的图示)。
聚合嵌入可以使用简单的启发式方法计算(例如 计算嵌入的平均值),或者它本身可以是神经网络(例如 LSTM 或变换器)的输出。
语义搜索
除了分类任务之外,嵌入对于语义搜索也特别有用。 此任务不仅根据关键字检索结果,还根据搜索查询的语义检索结果。
语义搜索的工作原理是,首先为语料库中的每个文档计算聚合嵌入(同样,聚合函数可以是启发式的,也可以是学习性的)。然后,还会嵌入给定的搜索查询,并且返回嵌入与该搜索查询的嵌入最接近的文档(参见图 2 中的说明)。紧密度通常是根据比较两个嵌入之间距离的指标来衡量的,例如余弦相似度。
大多数单词嵌入方法的训练方法是,获取大量文本语料库,并查看语料库中句子中哪些单词经常相邻出现。 例如,“计算机”一词通常可能与“键盘”、“软件”和“互联网”等词一起出现;这些常见的相邻词表示嵌入的“computer”应编码的信息。
本节介绍学习嵌入的四种流行技术,从 word2vec 到基于 Transformer 的 BERT。
Word2vec
word2vec于 2013 年发布,可以说是第一个普及预训练词嵌入并将其带入现代 NLP 主流的方法。 word2vec 包含两种学习嵌入的方法:
- 连续词包(参见 图 3 中的示例)。
- 根据两边的k个相邻词预测给定词。
- 这是通过投影来完成的(即 矩阵乘法)将相邻单词的 one-hot 编码向下转换为低维密集嵌入,取均值,并使用此值来预测丢失的单词。
- 根据两边的k个相邻词预测给定词。
- Skipgram(参见图 4 中的示例)。
- 在给定一个单词的情况下,预测两侧的k个相邻单词。
- 这是通过投影来完成的(即 矩阵乘法)将给定单词的 one-hot 编码转换为低维密集嵌入,并使用该编码来预测缺失的单词。
- 在给定一个单词的情况下,预测两侧的k个相邻单词。
作者证明了嵌入之间几个非常直观的线性类比。给定两个具有特定关系的单词 x 和 y ,以及与 y 在同一“类别”中的另一个单词 z ,作者找到了(使用余弦距离)嵌入(使用余弦距离)最接近 emb( x ) – emb( y )+ 的单词 w 的单词 w emb( z )。结果词w与z的关系通常与x与y 的关系相同(请查看表 1 以获取一些示例)。
表 1:word2vec 模型学到的类比。
X | y | z | w=nearest(emb(x)−emb(y)+emb(z)) |
---|---|---|---|
最大 | 大 | 小 | 最小 |
巴黎 | 法国 | 意大利 | 罗马 |
铜 | 铜 | 锌 | 铜 |
鼠标左键
如前所述,word2vec 基于局部滑动窗口。这意味着,word2vec 不会直接利用全局单词共现统计信息,而是通过创建的训练示例数量来利用。例如,嵌入不直接包含“银行”一词在“货币”一词的上下文中比“银行”更频繁这一事实,除了“银行”和“货币”会一起出现这一事实可以使用比“Bank”和“river”更多的训练示例。
因此,在 word2vec 之后一年, GloVe发布了,它将基于局部滑动窗口的方法的优点与全局方法(即 语料库级别)的单词共现计数。 它通过训练嵌入来实现此目的,以便根据两个词之间的全局共现计数确定它们嵌入的相似程度。
其中 V 是词汇表, u是单词向量, v是上下文向量, b和c是偏差。 f (Xi,j) 是一个权重函数,用于防止对具有极低和极高值的共现给予过多权重。 训练后,单词i的最终单词嵌入为 Wi,j= Ui + Vi 。
如前所述,在词语类推任务上,GloVe 嵌入的性能显着优于 word2vec,并且在命名通用字段识别中略好一些。因此,GloVe 向量多年来一直是首选的预训练单词嵌入,并且迄今为止仍然很受欢迎。
到目前为止提出的方法的一个主要缺点是它们是静态的,即给定单词的嵌入始终相同。 例如,考虑“银行”一词,这可能指河边或金融机构;它的嵌入必须对两种含义进行编码。
ELMo
在 2010 年代中期,递归神经网络 (RNN) 是大多数 NLP 任务中最受欢迎的架构。 RNN 逐步对文本序列执行计算,一次读取和处理每个单词。 它们会更新“隐藏状态”,该状态会跟踪到目前为止的整个序列。
2018 年发布的ELMo是最早流行的上下文嵌入技术之一。 ELMo 通过使用下一个词预测目标在大型自然语言语料库上预训练双向 RNN 模型来学习嵌入。 具体来说,ELMo 通过在每一步分别预测下一个或上一个单词来训练前向和后向堆叠 LSTM,如图 5 所示。
训练完成后,前向和后向 LSTM 的权重将冻结,并在每层的每一步连接输出。 作者发现不同的层学习语言的不同方面,最初的层对语法进行建模,而后面的层则捕获词义与上下文相关的方面。 因此,各层上特定于任务的加权平均值将被视为每个单词的嵌入。
当时,ELMo 在许多任务上的性能都显着优于以前最先进的方法,包括回答问题、识别文本包含和情感分析。
BERT
At a similar time to the development of ELMo, the (now famous) Transformer was released as an architecture for performing machine translation. It replaces the sequential computations of RNNs with an attention mechanism - this computes a contextual representation of every word in parallel, and is therefore much faster to run than an RNN.
人们很快意识到,Transformer 架构可以推广到机器翻译以外的其他任务,包括学习嵌入。 BERT于 2019 年发布,是最早、也可以说是最受欢迎的基于 Transformer 架构的上下文嵌入方法之一。
但是,与目前提出的方法不同,BERT 不会直接学习单词的嵌入。 相反,它会学习“子词”令牌的嵌入。 学习单词嵌入时的主要问题是需要固定大小的词汇表,否则,我们将用尽内存。 相反,BERT 使用一种称为WordPiece的算法将句子标记为子词单元。 这意味着单词可能会被拆分为单独的令牌,例如单词 {'等待', '等待', '等待'} 可能会被令牌化为 {['等待'], ['等待', '## ing'], ['等待', '##er']},所有这些共享相同的词干,但具有不同的后缀。
BERT 使用两个目标函数进行预训练(如图 6 所示):
- 掩码语言建模
- 系统会从序列中删除一些随机选择的令牌,然后让模型对其进行预测。
- 预测下一个句子
- 两个(掩码)序列将连接在一起,在每个序列的开头使用特殊的 [CLS] 令牌,并在每个序列的末尾使用 [SEP] 令牌。 然后,模型必须使用 [CLS] 令牌的最后一层嵌入来预测第二个词是否直接在原始语料库中的第一个词之后。
执行下游任务时,CLS 嵌入可用于句子/文档级别的任务,例如 意图识别或情感分析,而单个令牌嵌入可用于单词级任务,例如 命名为“通用字段识别”。
由于变换器不是顺序架构,因此输入层不仅仅是 one-hot 令牌编码的投影。 相反,它是三个不同嵌入的总和:
- 独热令牌编码的投影。
- 位置嵌入(即令牌在序列中所处位置的嵌入)。
- 嵌入段(即无论令牌是来自第一个序列还是第二个序列,在下一个句子预测目标中,如前所述。
一旦完成预训练,BERT 通常会针对下游任务进行“微调”(即,其权重会针对每个任务进一步更新;不会像 ELMo 那样冻结)。 在包括SQuAD (问答)和GLUE 基准在内的许多任务中,BERT 的性能显着优于当时最先进的方法。
BERT(及其后续变体)彻底改变了 NLP 领域;现在很难找到不依赖于基于 Transformer 架构的上下文嵌入的最先进方法。
正如本文所述,训练嵌入方面的进步彻底改变了 NLP。 但是,在使用预训练的嵌入时,需要注意某些陷阱。
首先,嵌入模型可以对其训练所基于的数据集中包含的偏差进行编码,甚至放大。 例如,事实证明,嵌入可以对基于性别的职业刻板印象进行编码,例如,女性与家务等工作相关联,而男性与计算机编程等工作相关联。 进一步的研究表明,嵌入模型可以从训练数据中识别出带有歧义的语言、种姓氏和其他有害的意识型态。 消除语言模型的偏差是一个活跃的研究领域。识别和减轻此类偏差的最佳方法仍然是一个悬而未决的问题。
Secondly, modern contextual embedding methods involve training models with hundreds of billions of parameters on clusters of thousands of GPUs for several weeks. This can be extremely costly, both financially as well as for the environment. There is a wide range of methods for training more efficient models, as we previously reviewed.