
Communications Mining 用户指南
业务依赖于通信。客户可以在需要时提供帮助。同事可以相互连接以完成工作。在 Communications Mining™,我们的使命是从根本上改变企业中的服务工作的经济学,释放每次交互中的价值,使服务高效且可扩展。为此,我们让先进的 NLP 和 NLU 普及化。
具体来说,Communications Mining 的模型使用称为“变换器”的深度学习架构。 转换器有助于大幅提升 NLU 的性能。 但是,它们也属于高度计算密集型项目 - 无论是训练模型学习新概念,还是使用新概念进行预测。 这个由两部分组成的系列将探讨多种技术,以提高使用这些大型变换器架构的速度并降低计算成本。
这篇文章将:
- 介绍 NLP 中嵌入模型的简史。
- 解释为什么变换器的自注意机制具有很高的计算工作负载。
- 查看对传统变换器架构的修改,这些修改可以在不显着影响性能的情况下提高训练和运行的计算效率。
下一篇文章将介绍可进一步提高效率的其他计算和近似技术。 下一篇文章将:
- 探索提纯技术,通过训练较小的模型来近似较大模型的性能。
- 解释高效的微调技术,其中参数更新受到限制。
- 就何时使用其中每种方法,提供我们的建议。
在过去的 10 年中,NLP 方法在执行各种任务方面取得了显着进步。 这在很大程度上可以归因于从手动的基于特征工程的方法转向由机器学习驱动的方法。 性能的最大改进要归功于无监督的预训练语义表示学习的进步。 这涉及训练一个映射自然语言序列(例如 单词、句子)转换为表示其语义的向量(数字序列)。 然后,可以使用这些向量执行感兴趣的任务,例如 意图识别、情感分类、命名一般字段识别等。
词嵌入
范式转变始于 2010 年代,当时出现了word2vec和Gmail等词嵌入方法。 这些技术使用大型自然语言数据集,以无监督方式学习单词的嵌入(向量的别称)。 嵌入根据词语经常出现的上下文对语义信息进行编码。 例如,“计算机”一词通常可能与“键盘”、“软件”和“互联网”等词一起出现;这些常见的相邻词包含嵌入的“computer”应编码的信息。
传统的单词嵌入有一个关键的缺点 - 它们是静态的,即给定单词的嵌入始终相同。 例如,考虑“银行”一词,这可能指河边或金融机构;它的嵌入必须对两种含义进行编码。
上下文嵌入
为了解决这个问题,人们开发了上下文嵌入方法。 根据序列的不同,每个单词都有不同的嵌入(例如 句子、文档)。 这项工作改变了游戏规则;现在很难找到不依赖上下文嵌入的最先进方法。
ELMo是最早流行的上下文嵌入技术之一,该技术涉及使用下一个词预测目标在大型自然语言语料库上预训练递归神经网络 (RNN) 模型。 然后,将此模型的内部表示用作模型(通常是小型模型)的输入,以执行监督任务。 在当时,这种方法在几个任务上都比以前的技术水平有了显着改进。
RNN 逐个处理序列中的每个单词,因此在处理长文档时,它们可能会很慢。 因此, BERT和RoBERTa等模型已成为首选方法,它们使用对并行计算更友好的 Transformer 替换了 ELMo 的经常性组件。 这些模型通常使用掩码语言建模目标进行预训练 - 删除序列中的一部分单词,让模型预测缺失的单词。
但是,基于 Transformer 的现代语言模型通常都非常大,其中可能包含数十亿个参数,并且运行时的计算要求非常高。 典型的工作流是:
- 在通用的未注释数据集上预训练语言模型。
- 在特定于领域的未注释数据集上进一步预训练语言模型。
- 使用带注释的数据微调语言模型,以执行相关的监督任务。
尽管第一步通常是一次性成本,但后两个步骤却不是。 虽然计算能力越来越低,但 Transformer 架构却越来越大。 这意味着最先进性能的成本不一定会下降。
因此,本文将介绍一系列技术,以减少计算工作量,同时最大限度地减少对性能的影响。
Transformer 架构始于可学习的嵌入层。每个后续层都会使用“自注意”机制构建其内部表示,即每个单词的表示都会查看序列中每隔两个的单词(有关示例,请参见图 1)。每个自注意层都包含多个“头”(每个头都有自己的自注意)。
将它们连接在一起,分别构成 NxD 矩阵Q 、 K和V。 注意力矩阵的计算公式为:
然后,self-attention 层的输出计算方式如下:
The final output for each layer is computed by concatenating the self-attention outputs for each head and feeding this through a small feedforward network.
尽管(与 RNN 不同)可以并行完成计算,但图 1 显示,对于包含N个单词的序列,需要执行 N2 次自注意操作。 也就是说,计算复杂性与句子长度成二次方关系。 考虑到现代变换器使用数十个层,每个层都有数十个由数千个维度组成的头,即使对于单个序列,也需要执行大量操作。
Naturally, one line of research aims to reduce this N2 complexity with simpler self-attention mechanisms; this is the biggest area of research into efficient Transformer architectures. Some popular approaches are reviewed in the sections that follow. For more comprehensive coverage, check this survey paper.
逐块关注
减少操作次数的一种方法是限制自注意机制查看的序列中的字数。BlockBERT通过将序列分割为多个块来实现此目的。在给定的注意头上,组块中的注意机制只着眼于其中一个组块中的单词(参见图 2 中的示例)。每层的每个注意头都会排列注意机制查看的数据块。这意味着在经过数十层之后,每个单词的嵌入可能都已经覆盖了整个序列。根据模型大小的不同,BlockBERT 的训练速度比 RoBERTa 快 12% 到 25%,所需内存减少 19% 到 36%,并且在问答任务上几乎表现良好(SQuAD 2.0 上的 F1 分数低约 0.8 分) )。
组合多种注意力模式
类似地, Longformer也限制了自注意机制查看的单词数量。它通过结合多种简单的注意模式(参见图 3 中的示例)来实现此目的。
- 滑动窗口
- 仅注意k个相邻的单词。
- 扩大的滑动窗口
- 注意每一个单词,最多达到预定义的限制。
- 全局注意力
- 在一些预选的位置上,注意整个序列。
- 在每个位置,请注意那些预先选择的位置。
通过这种注意模式的组合,经过几个层后,每个单词的嵌入可能已经覆盖了整个序列。 特别是在处理长序列时,Longformer 比 RoBERTa 速度更快,使用的内存更少。 令人意外的是,Longformer 在各种任务(问答、共指消解和情感分类)上的表现实际上都优于 RoBERTa。
大鸟是另一种流行的方法,与长形器非常相似,不同之处在于它使用随机注意模式(即每个表示注意序列中固定数量的随机单词),而不是扩大的滑动窗口。
使用低阶近似
与目前提出的方法不同的一种方法是Informer ,该方法基于自注意操作为低排序的理论上的结果。Linformer 沿长度维度将键矩阵和值矩阵( K和V )向下线性投影为可以应用完全注意功能的较短(固定长度)序列(参见图 4 中的示例)。与标准自注意相比,对于短序列,Linformer 的运行速度要快 1.3 到 3 倍,对于长序列,其运行速度要快 3 到 20 倍。在各种文本分类任务上,它的性能与 RoBERTa 相当(在某些任务上,甚至略好于)。
这个两部分系列着眼于如何通过探索对流行但计算要求很高的基于 Transformer 的语言建模技术的修改,来提高最先进的 NLP 的效率。 此帖子:
- 简要介绍了 NLP 中语义表示学习的历史,包括传统的单词嵌入和上下文嵌入模型。
- 解释了处于 Transformer 架构核心的自注意力机制,以及运行该机制的计算成本较高的原因。
- 探索了计算效率更高且不影响性能的替代注意机制。
下一篇文章将介绍以下内容:
- 概述训练小型模型以重现大型模型输出的方法。
- 如何以参数有效的方式微调语言模型。
- 我们针对使用不同高效变换器方法的场景提出了建议。