用BERT构建最先进语言模型

简介: 由于BERT高度实用的方法和具有更高效的性能,它被用于各种NLP任务,在语言模型中取得了最先进的成果。本文将通过一些重要的背景细节对BERT的体系结构进行广泛的说明。我们还将通过实际操作,使用PyTorch库对讨论关于如何使用该模型获得最先进成果进行测试。

image.png

2018年,在引入了迁移学习之后,自然语言处理(NLP,Natural Language Processing)领域发生了革命性的变化。BERT(Bidirectional Encoder Representations from Transformers)是谷歌人工智能团队在2018年推出的一个典型的迁移学习案例,它在各种NLP任务中展现出的最先进成果震撼了整个NLP领域。

由于BERT高度实用的方法和具有更高效的性能,它被用于各种NLP任务,在语言模型中取得了最先进的成果。本文将通过一些重要的背景细节对BERT的体系结构进行广泛的说明。我们还将通过实际操作,使用PyTorch库对讨论关于如何使用该模型获得最先进成果进行测试。

有一种非常有效的方法可以进行预训练神经网络,并创建一个预训练的语言模型,这被称为语言建模(LM)。

一些关于BERT的说明:
• 与那些使用之前的标记(token)来预测下一个标记的传统语言模型不同,BERT同时使用下一个标记和之前的标记进行预测;
• BERT还专门为下一个句子进行预测,这使得它成为问答类或句子比较类预测任务的一个合适选择;
• BERT使用了编码语句的编码器和解码器的Transformer架构,参数的变化很大,即使在小数据集上,其性能也非常显著;

BERT迁移学习

image.png

在深入研究BERT之前,让我们首先了解一下BERT使用的迁移学习的概念。

传统的NLP模型仅限于单词嵌入,如GloVeword2vec这两个模型,其中每个单词都被链接到了一个向量,该向量用于表示它的某些含义特征。之后,这些单词嵌入在一个巨大的未标记过的语料库上进行训练,然后使用该语料库对已标记的数据进行训练,为不同的任务如文本分类和情感分析,创建特定的模型。这些模型从大数据集中获得语言方面的知识。在这种情况下,单词嵌入在几乎所有的NLP任务中都很有用。但所有这些都是有成本的,我们将在下文中进一步讨论。

Word2vec或GloVe模型通常在一些简单语言建模应用上进行训练,这使得很难获取所有的含义,尤其是当上下文发生变化的时候。在像LSTM这样非常复杂的神经网络中,基于Word2vec建立的语言模型并没有获取到句子的细微差别和含义。这就造成了使用Word2vec或GloVe模型的单词嵌入对于语言建模过程没有什么效果。

为了证明这一点,让我们以两个句子为例进行说明。第一句话是“The cottage needs a good cleaning”,第二句话是“He clean forgot about dropping the letters in the post box”。在这两个句子中,clean有着不同的含义,在第一个例子中,clean是一个名词,而在第二个例子中,clean是一个副词。

基于单词嵌入建立的模型通常不考虑任何上下文的因素。以前,每个单词都被传统的单词嵌入方法分配一个向量,这就迫使模型必须得考虑单词的含义。

这些缺点使得像LSTM这样的深度神经网络解决了使用迁移学习的问题,与单词嵌入不同的是,将每个单词映射到了一个向量上,它们训练了一个深度神经网络,该网络将一个向量映射到完全基于语句里的每个单词上。

核心思想

语言模型的基本任务是在空白处预测单词,或者预测一个单词在特定上下文中出现的概率。我们再看一个例子:

“FC Barcelona is a _ club”

在这里,语言模型可以以80%的概率将空白处的单词预测为“足球”,并且20%的概率可以预测为板球。

通常来说,一个语言模型是从“左到右”进行训练的,因此设计用来预测下一个单词。请看下面的例子,

“Tallest mountain is”

这里,用一个通用语言模型来预测下一个单词。当我们想要生成一些新的句子时,这是一个定义好的方法,即一个语言模型可以预测下一个单词。增加了句子之后,继续预测,并且增加更多的句子。但这是训练语言模型的唯一方法吗?更重要的是,这是使用深度学习进行语言建模最有效的方法吗?

BERT驳斥了这种语言模型的原始创造性,即它们必须被设计成从左到右的方式进行预测。这试图说明了,如果我们不想生成新的句子,就不需要从左到右的方式来训练语言模型。

这就是BERT的关键之处,它的作用是随机地屏蔽特定上下文中的单词,然后来预测它们。

image.png

使用迁移学习的典型模型的体系结构


这种方法迫使模型学习使用整个句子中的相关信息,并找到有效使用这种方法的屏蔽词。

image.png

向前, 向后和屏蔽的LM(Masked Language Model)

有一些常用的方法,如语言模型(ELMo)和ULMFiT嵌入,它们使用并集成了著名的Bi-LSTM模型。让我们先了解一下什么是Bi-LSTM,并且它有哪些不完美的地方,然后再了解一下如何使用BERT解决问题。双向LSTM是通过从左到右训练的方式来预测下一个单词,而从右到左训练的方式来预测前一个单词,这就意味着有两个LSTM分别用于向前和向后预测。但它们都没有同时观察这两种方式。在BERT中,这个模型是利用句子中所有位置的单词来进行学习的,就是指整个句子。此外,谷歌还使用了Transformer,这使得模型会更加准确。从本质上来讲,这从所有其它基于Bi-LSTM的模型中区分出了BERT。

体系结构

BERT在其体系结构中加入了强大的Transformer,它在输入语句上使用了attention机制。Transformer由许多attention块组成,其中每个块使用线性层转换输入序列,并应用了attention机制。它基本上汇聚了映射seq2seq的层。

在这个情况中需要注意的一点是,BERT使用了WordPiece tokenizer,这大大减少了单词量。例如,running → run + ##ing。

BERT体系结构

Transformer有一个缺点,就是它们不像RNN(Recurrent Neural Network,循环神经网络)那样确认输入单词的顺序。比如说,如果前面的单词和最后的单词相同,那么它们将被完全视为相似的标记。BERT用位置嵌入法解决了这个问题,它能告知语句中单词的位置。在给向前网络提供输入标记之前,这些标记会被输入到标记嵌入当中。

image.png

输入模式总结

对于诸如自然语言推理和问答之类的任务,BERT训练成对的句子,这有助于为区分两个句子开发一个唯一的嵌入,这种嵌入被称为片段嵌入(segment embedding)。

语言模型训练

对于BERT的屏蔽语言模型(masked LM)训练,需要遵循几个步骤。

训练一个屏蔽语言模型的一种非常传统的方法是,用[MASK]标记随机替换某些单词。BERT执行过这样的训练,比如,对于每一个例子,BERT随机地屏蔽了15%的标记。

但是这种方法有一个缺陷,即只有模型存在屏蔽标记时才进行预测。在简单的单词中,如果在输入标记中不做屏蔽,那么模型可能就会忽略过去了。我们对模型的期望只是给出正确的预测,而不管我们传递哪些输入的标记。因此,让我们了解一下谷歌是如何解决这个问题的。

从句子中随机地抽取一组单词,然后再用另外一些随机的单词来代替。这一步必须非常地谨慎,因为在替换这些原始单词的同时,添加随机单词会增加噪声级别,也会导致较差的结果。因此,BERT只交换了10%到15%的被选择用于屏蔽的标记,大约占整个标记数量的1%,另外的10%既没有被交换也没有被屏蔽,剩下的80%则被[MASK]标记屏蔽了。

用BERT预测下一个句子

为了在诸如问答和自然语言推理这样的任务中表现出色,BERT使用了下一句预测的方法。

image.png

下一个输入预测的例子

当用两个句子作为输入时,BERT使用了一个[SEP] 标记来分隔句子中的单词。在语言模型的预训练期间,给BERT输入的两个句子中,第二个句子先于第一个句子的时间占50%,而一个完全随机句子出现的时间占50%。此时,模型的任务是预测第二个句子是否真的是下一句话。

微调语言模型

BERT编码器给出了一系列的隐藏状态。比如说,对于一些分类任务,我们只需要一个预测向量,所以序列需要被截取后放入一个向量。要做到这一点,这里有两种方法。第一种方法是通过max or mean pooling,第二种方法是借助attention的功能。然而,最简单的方法是采用第一个标记对应的隐藏状态。

image.png

BERT的工作

问题是,这个池机制是如何工作的呢?

BERT还有一个特殊的标记,名为Classification,它表示为[CLS]。模型需要在句首考虑这个[CLS] 标记。

1.模型的大小。BERT_large是同类模型中最大的一个,它有3.45亿个参数,与BERT_base相比,BERT_large在小数据集上表现出卓越的性能, 而Bert_Base则有1.1亿个参数;

2.更多的训练步骤等于更高的准确性(如果保证有足够多的训练数据)。在MNLI task上可以进行简单的证明,相同批量的训练中,100万级别的训练,BERT的准确度要比在50万级别提高了1%;

  1. BERT的Masked LM要比自左向右的LM训练方法收敛得慢一些。这是因为每批预测的单词只有15%。但Masked LM训练在经过了几次训练前的步骤后仍然战胜了从左到右的LM训练;

image.png

来源: BERT [Devlin等, 2018]

结论

因此,我们看到了BERT是如何在NLP领域获得了重大的突破,以及它如何在不同的LM任务上取得了最先进的成果。
仅仅因为masked LM方法,它与其它的迁移学习方法如ELMo或者ULMFiT相比,带来了巨大的差异,并且很好地继承了它们的性能。
所以,在总结中,我尝试着解释BERT背后的核心思想,并且为了更深入地探索,你必须尝试着读一下BERT的那些令人惊叹的论文。至于源代码,你可以在Git存储库里查找。


本文由阿里云开发者社区组织翻译。
文章原标题《Building State-of-the-Art Language Models with BERT》
作者:Ankit Singh
译者:Mags
文章为简译,更为详细的内容,请查看原文

目录
相关文章
|
7月前
|
机器学习/深度学习 自然语言处理 算法
大型语言模型:SBERT — 句子BERT
大型语言模型:SBERT — 句子BERT
88 0
|
4月前
|
机器学习/深度学习 自然语言处理 数据挖掘
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
预训练语言模型中Transfomer模型、自监督学习、BERT模型概述(图文解释)
57 0
|
9月前
|
机器学习/深度学习 存储 人工智能
大语言模型的预训练[1]:基本概念原理、神经网络的语言模型、Transformer模型原理详解、Bert模型原理介绍
大语言模型的预训练[1]:基本概念原理、神经网络的语言模型、Transformer模型原理详解、Bert模型原理介绍
大语言模型的预训练[1]:基本概念原理、神经网络的语言模型、Transformer模型原理详解、Bert模型原理介绍
|
11月前
|
机器学习/深度学习 自然语言处理 安全
不可错过!普林斯顿陈丹琦最新《大语言模型理解》2022课程!全面讲述BERT、GPT、T5等大模型,附Slides
不可错过!普林斯顿陈丹琦最新《大语言模型理解》2022课程!全面讲述BERT、GPT、T5等大模型,附Slides
218 0
|
自然语言处理 数据挖掘
BERT:深度双向预训练语言模型
BERT:深度双向预训练语言模型
284 0
BERT:深度双向预训练语言模型
|
机器学习/深度学习 人工智能 自然语言处理
【NLP】(task3上)预训练语言模型——BERT
将Transformer模型结构发扬光大的一个经典模型:BERT。 BERT在2018年出现。2018 年是机器学习模型处理文本(或者更准确地说,自然语言处理或 NLP)的转折点。我们对这些方面的理解正在迅速发展:如何最好地表示单词和句子,从而最好地捕捉基本语义和关系?此外,NLP 社区已经发布了非常强大的组件,你可以免费下载,并在自己的模型和 pipeline 中使用。
196 0
【NLP】(task3上)预训练语言模型——BERT
|
3月前
|
PyTorch 算法框架/工具
Bert Pytorch 源码分析:五、模型架构简图 REV1
Bert Pytorch 源码分析:五、模型架构简图 REV1
|
3月前
|
机器学习/深度学习 人工智能 开发工具
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
Hugging Face是一个机器学习(ML)和数据科学平台和社区,帮助用户构建、部署和训练机器学习模型。它提供基础设施,用于在实时应用中演示、运行和部署人工智能(AI)。用户还可以浏览其他用户上传的模型和数据集。Hugging Face通常被称为机器学习界的GitHub,因为它让开发人员公开分享和测试他们所训练的模型。 本次分享如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face。
如何快速部署本地训练的 Bert-VITS2 语音模型到 Hugging Face
|
3月前
|
PyTorch 算法框架/工具
Bert Pytorch 源码分析:五、模型架构简图
Bert Pytorch 源码分析:五、模型架构简图
|
5月前
lda模型和bert模型的文本主题情感分类实战
lda模型和bert模型的文本主题情感分类实战
97 0