自然语言处理(NLP)是一项极具挑战性的任务,目前没有哪个人工智能领域比 NLP 更引人注目了。在许多场景中,我们需要让计算机理解人类的自然语言,并进行相应的操作。近年来可以执行类似人类语言任务的语言模型(LM)已经发展到比任何人预期的都要好。尽管 BERT 模型在今天很少以原始形式使用,但这种模型架构仍有很多值得借鉴的地方。本文介绍其中具有代表性的 BERT 模型,探讨 BERT 的工作原理及在 NLP 中的应用。
介绍
2018 年底,Google AI Language 的研究人员开源了一种名为 BERT 的自然语言处理(NLP) 新技术,这在当时是一项重大突破,凭借令人难以置信的性能席卷了深度学习社区。在Jacob Devlin 等人发表的论文 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 中,有关于 BERT 设计的详细说明。
BERT(Bidirectional Encoder Representations from Transformers)模型的目标是为了在自然语言理解和生成方面取得突破。传统的NLP方法主要基于规则和统计方法,而BERT则通过深度学习方法,利用预先训练的神经网络来学习语言知识。BERT的核心创新点在于,它采用了来自 Transformer(学习文本中单词之间上下文关系的注意力机制)的双向编码器结构,通过预先训练来学习语言模式,从而提高了模型的性能。
除了通过对语义的深刻理解来改善谷歌的搜索结果外,BERT的主要功能是作为特定"下游"任务的基础,如问答或情感分析。因为它能够在接近人类的水平上处理书面语言,所以帮助了BERT语言模型解决其他基于语言的任务。
核心思想
BERT 语言模型试图解决依据上下文的"完形填空"问题,例如:
在 床前明月光,_____。_____,低头思故乡。
场景下,大概率会用 疑是地上霜。举头望明月,
填补空白来完成这句话。
在 BERT 之前的世界里,语言模型会在训练过程中从左到右或从左到右和从右到左的组合来查看这个文本序列。这种单向方法非常适合生成句子------我们可以预测下一个单词,将其附加到序列中,然后预测下一个单词,直到我们有一个完整的句子。BERT 模型出现后,意味着与单向语言模型相比,我们现在可以更深入地了解语言上下文和流程。
BERT不是预测序列中的下一个单词,而是使用一种称为 Masked LM (MLM) 的技术:随机隐藏句子中的单词,然后尝试预测它们。隐藏意味着模型在两个方向上查看,并使用句子的完整上下文(包括左右环境)来预测隐藏的单词。与以前的语言模型不同,它同时考虑了上一个和下一个标记 (token) 。
运作原理
Pre-training + Fine-Tuning Paradigm(预训练+微调)
Transformer 由一个用于读取文本输入的编码器和一个用于生成任务预测的解码器组成,BERT 依赖于 Transformer。由于 BERT 的目标是生成语言表示模型,因此它只需要编码器部分。BERT 编码器的输入是一系列标记,这些标记首先被转换为向量,然后在神经网络中处理。但在开始处理之前,BERT 需要对输入进行处理,并用一些额外的元数据进行修饰:
- 标记嵌入:在第一个句子的开头将
[CLS]
标记添加到输入单词标记中,并在每个句子的末尾插入[SEP]
标记; - 语段嵌入:将指示句子 A 或句子 B 的标记添加到每个标记中。这允许编码器区分句子;
- 位置嵌入:将位置嵌入添加到每个标记中,以指示其在句子中的位置。
从本质上讲,Transformer 堆叠了一个将序列映射到序列的层,因此输出也是一个向量序列,在同一索引处的输入和输出标记之间具有 1:1 的对应关系。BERT 使用了 2 种训练策略:
1. Masked LM (MLM)
在将单词序列输入 BERT 之前,每个序列中 15% 的单词被替换为 [MASK]
标记。然后,该模型会根据序列中其他未屏蔽的单词提供的上下文来预测被屏蔽单词的原始值。从技术上讲,输出词的预测需要:
- 在编码器输出的顶部添加分类层;
- 将输出向量乘以嵌入矩阵,将它们转换为词汇维度;
- 使用 softmax 计算词汇表中每个单词的概率。
其中:
- 80% 的时间,更换为[MASK]
went to the store ---> went to the [MASK]
- 10% 的时间,替换随机单词
went to the store ---> went to the running
- 10% 的时间,保持不变
went to the store ---> went to the store
在训练时,BERT 损失函数仅考虑屏蔽标记的预测,而忽略未屏蔽标记的预测。这导致模型的收敛速度比从左到右或从右到左的模型慢得多。
2. 下一句预测 (NSP)
在 BERT 训练过程中,模型接收成对的句子作为输入,并学习预测该对中的第二个句子是否是原始文档中的后续句子。在训练过程中,50% 的输入是一对,其中第二句话是原始文档中的后续句子,而另外 50% 的输入从语料库中随机选择一个句子作为第二句话。假设随机句子将与第一个句子断开连接。
为了预测第二句话是否连接到第一句话,基本上完整的输入序列通过基于 Transformer 的模型,使用简单的分类层将 [CLS]
标记的输出转换为 2×1 形状的向量,并使用 softmax 分配 IsNext-Label。
微调
BERT 可用于各种语言任务:
- 分类任务(如情感分析)的完成方式与"下一句"分类类似,方法是在
[CLS]
标记的 Transformer 输出顶部添加一个分类层。 - 在问答任务 (例如 SQuAD v1.1) 中,软件接收有关文本序列的问题,并需要在序列中标记答案。使用BERT,可以通过学习两个额外的向量来训练问答模型,这些向量标志着答案的开始和结束。
- 在命名实体识别 (NER) 中,软件接收文本序列,并需要标记文本中出现的各种类型的实体(人员、组织、日期等)。使用 BERT,可以通过将每个标记的输出向量输入预测 NER 标签的分类层来训练 NER 模型。
BERT 当时提出的独特价值(2019年)
- 全方位上下文理解: 与以前的模型(例如GPT) 相比,BERT 能够双向理解上下文,即同时考虑一个词的左边和右边的上下文。这种全方位的上下文理解使得 BERT 能够更好地理解语言,特别是在理解词义、消歧等复杂任务上有明显优势。
- 预训练+微调 (Pre-training+Fine-tuning) 的策略: BERT 模型先在大规模无标签文本数据上进行预训练,学习语言的一般性模式,然后在具体任务的标签数据上进行微调。这种策略让BET能够在少量标签数据上取得很好的效果,大大提高了在各种 NLP 任务上的表现。
- 跨任务泛化能力: BERT 通过微调可以应用到多种 NLP 任务中,包括但不限于文本分类、命名实体识别、问答系统、情感分析等。它的出现极大地简化了复杂的 NLP 任务,使得只需一种模型就能处理多种任务。
- 多语言支持: BERT 提供了多语言版本 (Multilingual BERT) ,可以支持多种语言,包括但不限于英语、中文、德语、法语等,使得 NLP 任务能够覆盖更广的语言和区域。
- 性能优异: 自 BERT 模型提出以来,它在多项 NLP 基准测试中取得了优异的成绩,甚至超过了人类的表现。它的出现标志着 NLP 领域进入了预训练模型的新时代。
- 开源和可接入性: BERT 模型和预训练权重由 Google 公开发布,让更多的研究者和开发者可以利用 BERT 模型进行相关研究和应用开发,推动了整个 NLP 领域的发展。
BERT 与 GPT 异同
BERT vs GPT 差异
特性 | BERT | GPT |
---|---|---|
训练方式 | 自编码(Autoencoding) | 自回归(Autoregressive) |
预测目标 | 给定上下文,预测其中的一个或多个缺失单词 | 在给定前面的单词时,预测下一个单词 |
输入处理 | 双向,可以同时考虑一个词的左右上下文 | 单向(从左到右或者从右到左) |
适用场景 | 适合理解上下文,有助于信息提取、问答系统、情感分析等 | 适合生成式任务,如文章生成、诗歌创作等 |
架构 | 基于Transformer的编码器 | 基于Transformer的解码器 |
语言模型 | 判别式(Discriminative) | 生成式(Generative) |
优点 | 对上下文理解能力较强 | 预测的连贯性较强 |
缺点 | 生成的文本连贯性较弱 | 对上下文理解能力相对较弱 |
BERT vs GPT 共识
类别 | 内容 |
---|---|
模型架构 | Transformer |
数据预处理 | 都需要对数据进行 Tokenization,一般使用词片方法(Subword Tokenization) |
模型训练 | 均使用了大量的无标签数据进行预训练 |
任务迁移 | 都可以通过 Fine-tuning 方式进行任务迁移 |
训练目标 | 试图通过预训练理解语言的一般模式,如语法、 语义、上下文关系等 |
多语言支持 | 均支持多语言模型训练 |
总结
BERT无疑是使用机器学习进行自然语言处理的突破,在 GPT-3 论文发表之前,大家普遍的结论是,BERT 作为预训练的模型效果也是优于GPT 的。未来,随着预训练技术和 NLP 任务的不断发展和变化,BERT模型在 NLP 领域的应用可能更加广泛。