问题

如何评价 BERT 模型?

回答
BERT 模型深度评价:革命性的语言理解基石

BERT(Bidirectional Encoder Representations from Transformers)自2018年发布以来,无疑是自然语言处理(NLP)领域一个里程碑式的模型。它以其革命性的双向预训练能力,极大地提升了下游NLP任务的性能,并深刻地改变了我们理解和处理文本的方式。下面我将从多个维度对BERT模型进行详细评价:

一、 BERT 的核心创新与优势

BERT最显著的创新点在于其双向预训练和Transformer Encoder架构的应用。

1. 双向预训练 (Bidirectional Pretraining):
挑战传统NLP模型: 在BERT之前,许多预训练模型(如ELMo, GPT)采用的是单向(或伪双向)的语言模型预训练。例如,单向模型只能从左到右或从右到左地捕捉上下文信息,无法同时考虑一个词的左右两侧所有词的语义。
BERT的解决方案: BERT通过引入Masked Language Model (MLM) 任务,能够同时学习一个词在整个句子中的上下文信息。MLM随机遮盖(mask)输入句子中的一部分词,模型需要根据未被遮盖的词预测被遮盖的词。这种“填空题”式的训练,迫使模型去理解句子中词语之间的复杂关系,从而学习到更丰富的语义信息。
优势: 这种双向性使得BERT能够更全面地理解词语的含义,特别是对于多义词和需要丰富上下文信息的句子,表现尤为突出。例如,在“我去了银行取钱”和“我坐在河岸边”这两个句子中,“银行”和“岸边”的含义完全不同,BERT的双向性使其能够准确区分。

2. Transformer Encoder架构:
自注意力机制 (SelfAttention): Transformer的核心是自注意力机制,它允许模型在处理一个词时,同时关注输入序列中的所有其他词,并根据它们与当前词的相关性赋予不同的权重。这使得模型能够捕捉长距离依赖关系,而无需像RNN/LSTM那样受限于序列长度的限制。
并行计算能力: Transformer的架构允许并行计算,这大大加快了模型的训练速度,使得训练更大规模的模型成为可能。
优势: 基于Transformer Encoder的BERT,能够有效地捕捉句子中词语之间的复杂依赖关系,包括语法结构、语义关联等,为下游任务提供了高质量的语言表示。

3. Next Sentence Prediction (NSP) 任务:
目的: 除了MLM,BERT还引入了NSP任务,旨在让模型学习句子之间的关系。在NSP任务中,模型接收一对句子,需要判断第二个句子是否是第一个句子的下一句。
优势: 这使得BERT不仅能理解单句的语义,还能理解段落、对话等更复杂的文本结构,对于问答、自然语言推理等任务有重要意义。

4. 迁移学习的强大能力:
预训练微调范式 (Pretrain and Finetune): BERT开创了NLP领域“预训练微调”的强大范式。首先在大规模无标注语料库(如维基百科、BookCorpus)上进行通用的语言理解预训练,学习通用的语言知识。然后,将预训练好的模型在特定下游任务(如情感分析、命名实体识别、问答)的标注数据上进行微调。
优势: 这种范式使得模型能够在少量标注数据的情况下,快速适应并取得优异的性能,极大地降低了NLP任务的开发成本和数据需求。

二、 BERT 的具体应用与性能表现

BERT在发布后,在多项NLP基准测试中取得了突破性的成果,显著提升了当时的SOTA(StateoftheArt)水平。

GLUE (General Language Understanding Evaluation) Benchmark: BERT在GLUE基准测试中,如MNLI (MultiGenre Natural Language Inference), QQP (Quora Question Pairs), SST2 (Stanford Sentiment Treebank) 等任务上,都取得了显著的提升。
SQuAD (Stanford Question Answering Dataset) Benchmark: BERT在SQuAD 1.1和SQuAD 2.0上的问答性能表现尤为抢眼,能够更准确地定位答案,甚至能够识别出无法回答的问题。
其他任务: 此外,BERT在命名实体识别(NER)、词性标注(POS Tagging)、文本分类、机器翻译等多种NLP任务中都展现出强大的泛化能力和优异的性能。

三、 BERT 的局限性与挑战

尽管BERT取得了巨大的成功,但它并非完美无缺,也存在一些局限性:

1. 计算成本高昂:
预训练: BERT的模型规模较大(如BERTBase有1.1亿参数,BERTLarge有3.4亿参数),预训练过程需要大量的计算资源(GPU/TPU)和时间。
微调与推理: 即便是在下游任务上进行微调,也需要一定的计算资源。对于资源受限的设备或实时性要求极高的场景,BERT的部署仍然是一个挑战。
模型大小: 模型参数量大,占用的存储空间也较大。

2. NSP任务的有效性争议:
研究表明,NSP任务在一些情况下可能并不如MLM任务那样有效,甚至对某些下游任务的性能提升作用有限。后续的一些模型(如RoBERTa)在改进预训练策略时,甚至取消了NSP任务,而采用更长的连续文本作为输入。

3. 对领域外数据的泛化能力:
虽然BERT在通用领域表现出色,但在特定专业领域(如医学、法律)的数据上,其性能可能会有所下降,需要进行领域特定的微调或预训练。

4. 对输入序列长度的限制:
Transformer的自注意力机制在计算复杂度上与序列长度的平方成正比。BERT的原生版本通常限制输入序列长度为512个token,这对于处理长篇文章等任务会遇到困难。后续的改进模型(如Longformer, BigBird)针对这个问题进行了优化。

5. “黑箱”问题:
作为深度学习模型,BERT内部的决策过程仍然像一个“黑箱”,理解其具体的推理逻辑和决策依据仍然具有挑战性,这在一些需要可解释性的应用场景下可能是一个问题。

6. 对输入顺序的敏感性:
尽管MLM任务在一定程度上学习了词语的上下文,但模型本身并没有显式的记忆机制。对于需要严格按照顺序处理的任务,其表现可能不如RNN/LSTM等模型。

四、 BERT 的影响与后续发展

BERT的出现极大地推动了NLP领域的发展,催生了一系列优秀的模型和技术:

1. 模型架构的启发: Transformer Encoder架构成为了后续许多NLP模型的基石,例如:
RoBERTa: 改进了BERT的预训练策略(更大规模数据、更长训练时间、移除NSP任务),性能更优。
ALBERT: 通过参数共享和分解注意力机制,大幅减小了模型参数量,提高了训练效率。
ELECTRA: 采用更加高效的预训练任务(Replaced Token Detection),在相同计算量下获得更好的性能。
SpanBERT: 专注于预测连续的文本片段(span),在问答等任务上表现更好。

2. 预训练微调范式的普及: BERT证明了预训练微调范式的强大威力,使得研究人员和开发者能够更轻松地构建高性能的NLP应用。

3. 下游任务的提升: BERT及其变种模型至今仍是许多NLP任务的强大基线模型,并在不断被优化和改进。

4. 零样本/少样本学习的探索: 基于BERT强大的语言理解能力,研究人员也在探索如何利用其进行零样本(zeroshot)或少样本(fewshot)学习,进一步减少对标注数据的依赖。

总结

总而言之,BERT模型是一项革命性的技术,它通过双向预训练和Transformer Encoder架构,极大地提升了NLP任务的性能,并为整个领域带来了新的发展方向。它的出现标志着NLP进入了一个新的时代,即“预训练模型时代”。尽管存在计算成本高昂、对长文本处理能力有限等挑战,但BERT及其后续的改进模型,已经成为构建现代NLP应用不可或缺的基石,并将继续在自然语言处理领域发挥着至关重要的作用。评估BERT,不仅仅是评估一个模型,更是评估它所引领的技术浪潮及其对整个NLP领域产生的深远影响。

网友意见

user avatar

深度神经网络的超强有效性一直让人疑惑。


经典论文《可视化与理解CNN》(Visualizing and Understanding Convolutional Networks)解释了在图像领域中CNN从低层到高层不断学习出图像的边缘、转角、组合、局部、整体信息的过程,一定层面论证了深度学习的有效性。另一方面,传统的NLP神经网络却并不是那么深,而bert的出现直接将NLP的神经网络加到12层以上。


那么如何理解各层学到了怎样的信息?


本文作者Jesse Vig通过可视化工具对此进行了非常有意义的探究。文章分两部分,第一部分介绍bert中的6种模式,第二部分介绍其底层细节。


可视化BERT之一


在BERT错综复杂的注意力网络中,出现了一些直观的模式。

2018年是自然语言处理领域的转折之年,一系列深度学习模型在智能问答、情感分类等多种NLP 任务上取得了最佳结果。特别是最近谷歌的BERT ,成为了一种“以一当十的模型”,在各种任务上都取得了的极佳的表现。


BERT主要建立在两个核心思想上,这两个思想都包含了NLP 最新进展:(1)Transformer 的架构(2)无监督学习预训练。


Transformer 是一种序列模型,它舍弃了 RNN 的顺序结构,转而采用了一种完全基于注意力的方法。这在经典论文 《Attention Is All You Need》中有具体介绍。


BERT 同时也要经过预训练。它的权重预先通过两个无监督任务学习到。这两个任务是:遮蔽语言模型(masked language model,MLM)和下句一句预测(next sentence prediction)。


因此,对于每个新任务,BERT 不需要从头开始训练。相反,只要在预训练的权重上进行微调(fine-tuning)就行。有关BERT的更多详细信息,可以参考文章《图解BERT》。


BERT是一只多头怪


Bert不像传统的注意力模型那样只使用一个平坦的注意力机制。相反,BERT 使用了多层次的注意力(12或24层,具体取决于模型),并在每一层中包含多个(12或16)注意力“头”。由于模型权重不在层之间共享,因此一个BERT 模型就能有效地包含多达24 x 16 = 384个不同的注意力机制。


可视化BERT


由于BERT 的复杂性,所以很难直观地了解其内部权重的含义。而且一般来说,深度学习模型也是饱受诟病的黑箱结构。所以大家开发了各种可视化工具来辅助理解。


可我却没有找到一个工具能够解释BERT 的注意力模式,来告诉我们它到底在学什么。幸运的是,Tensor2Tensor有一个很好的工具,可用于可视化Transformer 模型中的注意力模式。因此我修改了一下,直接用在BERT的一个pytorch版本上。修改后的界面如下所示。你可以直接在这个Colab notebook (colab.research.google.com)里运行,或在Github 上找到源码。(github.com/jessevig/ber)。




这个工具将注意力看做不同的连线,它们用来连接被更新的位置(左半边)与被注意的位置(右半边)。(译注:可以想象为神经网络是从右向左正向传播的。)不同的颜色分别代表相应的注意头,而线条颜色的深浅代表被注意的强度。在这个小工具的顶部,用户可以选择观察模型的第几层,以及第几个注意力头(通过单击顶部的色块即可,它们分别代表着12个头)。


BERT 到底学了什么?


我使用该工具探索了预训练 BERT 模型各个层和各个头的注意力模式(用全小写(uncased)版本的BERT-Base 模型)。虽然我尝试了不同的输入句子,但为了方便演示,这里只采用以下例句:


句子A:I went to the store.
句子B:At the store, I bought fresh strawberries.


BERT 用 WordPiece工具来进行分词,并插入特殊的分离符([CLS],用来分隔样本)和分隔符([SEP],用来分隔样本内的不同句子)。


因此实际输入序列为: [CLS] i went to the store . [SEP] at the store , i bought fresh straw ##berries . [SEP]


在探索中,我发现了一些特别显著的令人惊讶的注意力模式。下面是我确认的六种关键模式,将产生每一种模式的特定层和头都进行可视化展示。


模式1:注意下一个词


在这种模式中,每个位置主要注意序列中的下一个词(token)。下面将看到第2层0号头的一个例子。(所选头部由顶部颜色条中突出的显示色块表示。)




模式1:注意下一个词。

左:所有词的注意力。 右:所选词的注意力权重(“i”)


左边显示了所有词的注意力,而右侧图显示一个特定词(“i”)的注意力。在这个例子中,“i”几乎所有的注意力都集中在“went”上,即序列中的下一个词。

在左侧,可以看到 [SEP]符号不符合这种注意力模式,因为[SEP]的大多数注意力被引导到了[CLS]上,而不是下一个词。因此,这种模式似乎主要在每个句子内部出现。


该模式与后向RNN 有关,其状态的更新是从右向左依次进行。模式1出现在模型的多个层中,在某种意义上模拟了RNN 的循环更新。


模式2:注意前一个词


在这种模式中,大部分注意力都集中在句子的前一个词上。例如,下图中“went”的大部分注意力都指向前一个词“i”。


这个模式不像上一个那样显著。有一些注意力也分散到其他词上了,特别是[SEP]符号。与模式1一样,这与RNN 有些类似,只是这种情况下更像前向RNN。



模式2:注意前一个词。

左:所有词的注意力。 右:所选词的注意力权重(“went”)


模式3:注意相同或相关的单词


这种模式注意相同或相关的单词,包括其本身。在下面的例子中,第一次出现的“store”的大部分注意力都是针对自身和第二次出现的“store”。这种模式并不像其他一些模式那样显著,注意力会分散在许多不同的词上。




模式3:注意相同/相关的词。

左:所有词的注意力。 右:所选词的注意权重(“store”)


模式4:注意“其他”句子中相同或相关词


这种模式注意另一个句子中相同或相关的单词。例如,第二句中“store”的大部分注意力都指向第一句中的“store”。可以想象这对于下句预测任务(BERT预训练任务的一部分)特别有用,因为它有助于识别句子之间的关系。



模式4:注意其他句子中相同/相关的单词。

左:所有词的注意力。 右:所选词的注意权重(“store”)


模式5:注意能预测该词的其他单词


这种模式似乎是更注意能预测该词的词,而不包括该词本身。在下面的例子中,“straw”的大部分注意力都集中在“##berries”上(strawberries 草莓,因为WordPiece分开了),而“##berries”的大部分注意力也都集中在“straw”上。



模式5:注意能预测该单词的其他单词。

左:所有词的注意力。 右:所选词的注意力(“## berries”)


这个模式并不像其他模式那样显著。例如,词语的大部分注意力都集中在定界符([CLS])上,而这是下面讨论的模式6的特征。


模式6:注意分隔符


在这种模式中,词语的大部分注意力都集中在分隔符[CLS]或 [SEP]上。在下面的示例中,大部分注意力都集中在两个 [SEP]符号上。这可能是模型将句子级状态传播到单个词语上的一种方式。




模式6:注意分隔符。 左:所有词的注意力。 右:所选词的注意权重(“store”)


说明


其实数据可视化有点像罗夏墨迹测验(译注:这种测验叫人解释墨水点绘的图形以判断其性格):我们的解释可能会被我们的主观信念和期望所影响。虽然上面的一些模式非常显著,但其他模式却有点主观,所以这些解释只能作为初步观察。


此外,上述6种模式只是描述了BERT 的粗略注意力结构,并没有试图去描述注意力可能捕获到的语言学(linguistic)层面的模式。例如,在模式3和4中,其实可以表现为许多其他不同类型的“相关性”,例如同义关系、共同指代关系等。


而且,如果能看到注意力头是否抓取到不同类型的语义和句法关系,那将会非常有趣。


可视化BERT之二:探索注意力机制的内部细节一


在这里,一个新的可视化工具将展示BERT如何形成其独特的注意力模式。





在上文中,我讲解了BERT的注意力机制是如何呈现出多种模式的。例如,一个注意力头会主要注意序列中的下一个词;而另一个注意力头会主要注意序列中的前一个词(具体看下方图示)。在这两种情况中,BERT在本质上都是学习一种类似RNN的序列更新的模式。之后,我们也将展示BERT是如何建模词袋模型(Bag-of-Words)的。




通过BERT学习下一个单词和上一个单词的注意力模式


那么BERT是如何学到这些极好的特性呢?为了解决这个问题,我从第一部分扩展了可视化工具来更深入地探索BERT——揭示提供BERT强大建模能力的神经元。你可以在这个Colab notebook或者 Github上找到这个可视化工具。


最初的可视化工具(基于由Llion Jones出色完成的Tensor2Tensor)尝试来解释什么是注意力:也就是说,BERT到底在学习什么样的注意力结构?那么它是怎样学到的呢?为了解决这个问题,我添加了一个注意力细节视图,来可视化注意力的计算过程。详细视图通过点击⊕图标按钮来查看。你可以看到以下的一个demo示例,或直接跳到屏幕截图。




可视化工具概览


BERT有点像鲁布·戈德堡机(译注:是一种被设计得过度复杂的机械组合,以迂回曲折的方法去完成一些其实是非常简单的工作,例如倒一杯茶,或打一只蛋。),尽管每个组件都非常直观,但是系统整体很难把握。现在我将通过可视化工具介绍BERT注意力架构的各个部分。(想了解有关BERT的全部教程,推荐《图解transformer》 和《图解BERT》这两篇文章。)


下方展示了新的注意力细节视图。图中正值是蓝色的,负值是橙色的,颜色的深浅反映了取值的大小。所有的向量都是64维的,并且作用于某个特定的注意力头上。和最初的可视化工具类似,连接线颜色的深浅代表了单词之间的注意力强度。




让我们结合图分析一下:


查询向量q :查询向量q是左边正在进行注意力过程的单词/位置的编码,也就是说由它来“查询”其他的单词/位置。在上述的例子中,“the”(选中的单词)的查询向量标注出来了。


键向量k:键向量k是右边正在“被注意”的单词的编码。如下所述,键向量和查询向量决定了单词被注意程度的得分。


q×k (element-wise):查询向量和键向量的逐元素积(译注:element-wise product, 也叫哈达玛积/Hadamard product)。这个逐元素积是通过选定的查询向量和每个键向量计算得到的。这是点积(逐元素乘积的和)的前导。由于它展示了查询向量中的单个元素和键向量对点积的贡献,因此将其可视化。选定的查询向量和每个键向量的点积。得到的是非归一化的注意力得分。

Softmax:所有目标单词的q·k / 8的softmax值。这一步实现了注意力得分的归一化,保证了值为正的且和为1。常量8是向量长度(64)的开方。论文(arxiv.org/pdf/1706.0376)描述了这样做的原因。


解析BERT的注意力模式


在第一部分文章中,我在BERT的注意力头的结构中发现了一些模式。来看看我们是否能使用新的可视化工具来理解BERT是如何形成这些模式的。


注意分隔符


让我们以一个简单的例子起手,这个例子中大多数注意力是聚焦于分隔符[SEP] 的(第一部分文章中的模式6)。如第一部分文章中所描述的,这个模式可能是BERT用来将句子级的状态传播到单词级状态的一种方式。




基于BERT预训练模型的第7层3号头,聚焦分隔符注意力模式。


所以,BERT是如何直接聚焦于[SEP]符号的呢?来看看可视化工具。下面是上述例子的注意力细节视图。





在键向量列,两个出现[SEP]处的键向量有显著的特点:它们都有少量的高正值(蓝色)和低负值(橘色)的激活神经元,以及非常多的接近0的(浅蓝,浅橘或白色)的神经元。




第一个分隔符[SEP]的键向量。

查询向量q会通过那些激活神经元来匹配[SEP]键向量,会使元素內积q×k产生较高的值,如下例子所示:




第一个“the”的查询向量;第一个[SEP]的键向量;两个向量的逐元素积。

其他单词的查询向量也遵循相似的模式;它们通过同一组神经元来匹配[SEP]键向量。因此,BERT似乎指定了一小部分神经元作为“[SEP]-匹配神经元”,而查询向量也通过这些相同位置的值来匹配[SEP]键向量。这就是注意分隔符[SEP]的注意力模式。


注意句子:词袋模型(Bag of Words)


这是一个不太常见的模式,在第一部分文章中没有具体讨论。在这种模式中,注意力被平均的分配到句子中的每个单词上。




基于BERT预训练模型的第0层0号头,专注句子的注意力模式


这个模式的作用是将句子级的状态分配到单词级上。BERT在这里本质上是通过对所有词嵌入进行几乎相等权重的加权平均操作来计算一个词袋模型。词嵌入就是我们之前提到的值向量。


那么BERT是怎样处理查询向量和键向量来形成这种注意力模式的呢?让我们再来看看注意力细节视图;




基于BERT预训练模型的第0层0号头,专注句子的注意力模式细节视图。


在q×k这列,我们能看到一个清晰的模式:少量神经元(2-4个)控制着注意力得分的计算。当查询向量和键向量在同个句子中时(上例中第一个句子),这些神经元的乘积显示出较高的值(蓝色)。当查询向量和键向量在不同句子中时,在这些相同的位置上,乘积是负的(橘色),如下例子所示:




在同个句子中(左边)q*k的逐元素积很高,在不同句子中(右边)q*k的逐元素积很低。


当查询向量和键向量都来自第一个句子中时,它们在激活神经元上往往有相同的符号,因此会产生一个正积。当查询向量来自第一个句子中时,键向量来自第二个句子时,相同地方的神经元会有相反的符号,因此会产生一个负值。


但是BERT是怎么知道“句子”这个概念的?尤其是在神经网络第一层中,更高的抽象信息还没有形成的时候。这个答案就是添加到输入层(见下图)的句子级嵌入(sentence-level embeddings)。这些句子嵌入的编码信息传递到下层的变量中,即查询向量和键向量,并且使它们能够获取到特定句子的值。




句子A和B的部分嵌入以及位置嵌入被添加到词嵌入中

(来自BERT论文(arxiv.org/pdf/1810.0480))


注意下一个词


在这种注意力模式中,除了分隔符,其他所有的注意力都集中在输入序列的下个单词上。




基于BERT预训练模型的第2层0号头,注意下一个词的注意力模式。


这个模式能够使BERT捕获序列关系,如二元语法(bigrams)。我们来查看它的注意力细节视图;





我们看到查询向量“the”和键向量“store”(下个单词)的乘积在大多数神经元中是很高的正值。对于下一个单词之外的其他单词,q*k乘积包含着一些正值和负值。最终的结果是“the”和“store”之间的注意力得分很高。


对于这种注意力模式,大量的神经元参与到注意力得分中。而且这些神经元根据词位置的不同而不同,如下所示:





当i取2,4,8的时候,在位置i处的查询向量和在j = i+1处的键向量的逐元素积。注意激活神经元在每一个例子中都不同。


这种方式不同于注意分隔符以及注意句子的注意力模式,它们是由少量固定的神经元来决定注意力得分的。对于这两种模式,只有少量的神经元是必须的,因此这两种模式都很简单,并且在被注意的单词上都没多少变化。与它们相反,注意下个单词的注意力模式需要追踪512个单词(译注:在BERT中每个样本最多512个单词。)中到底是哪个是被一个给定的位置注意的,即哪个是下一个单词。为了实现这个功能,需要产生一系列查询向量和键向量,其中每个查询向量会有从512个键向量有唯一一个匹配。因此使用少量神经元很难完成这个任务。


那么BERT是如何能够生成这些查询向量和键向量呢?答案就在BERT的位置嵌入(position embeddings),它在输入层(见图1)中被添加到词嵌入(word embeddings)中。BERT在输入序列中学习512个独特的位置嵌入,这些指定位置的信息能通过模型流入到键向量和查询向量中。


大家一起来探索


欢迎大家一起来试试这个可视化工具,并分享自己的发现。


Colab: colab.research.google.com


Github:

github.com/jessevig/ber


PS:非常感谢Llion Jones开发的原始Tensor2Tensor可视化工具。


原文链接:

towardsdatascience.com/

towardsdatascience.com/

user avatar

一句话概括:首个深层“原生”双向语言模型屠了榜。

-----------------------------------------------------------

分隔线下面慢慢解释:

BERT是直接对标OpenAI的GPT的,并且同时也带上ELMo一起开心地鞭打。

Jacob反复怼了好几次以前的语言模型要么只有单向的(说的就是你,从左到右接受token输入的Transformer—GPT,啪):
要么非“原生”双向(ELMo同学,你这个双向是两个单向语言模型(从左到右,从右到左)拼起来的,不算“原生”,而且太浅。你不知道何凯明老师告诉我们是深度学习就下一百层吗(大误...)):

你们两个看我做示范(合成装备中.......请稍候):

Duang:

Jacob:你们看我每一层,每一个token位置都是同时接受两边所有token输入的,这个叫intuitively powerful(论文原话啊,我没有造谣啊,3.3.1第一句)

Intuitively, it is reasonable to believe that a deep bidirectional model is strictly more powerful than either a left-to-right model or the shallow concatenation of a left-to-right and right-to- left model.

那我们来脑补一下为什么intuitively。标准的从左到右语言模型训练目标是用一句话里面某一个词左侧的所有词来作为模型输入,输出接下来会是那个词。从右往左也是类似,不再详述。然后我们切换到人力智能模式,如果你给一个人左半句话,让他预测下面那个词,他会不会问你有没有词右边的半句话?所以对于这个任务来说只要中心词左边所有词就够了吗?理想情况是不是要左右两边的词来预测中心词,整个模型的预测效果会更好,模型学到的语言模型会含有更多的语义语法信息(整体熵更小)?然后在"原生"双向的基础上再把模型叠深也更加合理。

因此使用了与ELMo完全不同的语言模型训练目标:

模型有两个训练目标,一个是Token级别(不熟悉的同学可以先简单地理解为词级别),一个是句子级别。Token级别简单来说即完形填空,一个句子中间挖个词,让模型预测那个空的是哪个词。句子级别即给两句句子,判断这两句是不是原文中的连在一起的互为上下文。(句子级别的任务对于阅读理解,推理等任务提升较大。)。Jacob在论文中反复强调了这两个新的Task的作用,把这两个任务各种打开关闭与GPT做对比,参考5.1节(GPT你先别跳起来。)

最复杂的是Token级别的Task1(完形填空部分):
他的具体操作是取一长段话,随机找出15%的token,然后针对这15%再以3种不同的概率做3种处理:
80%的时间:用[MASK]标记替换单词,例如,my dog is hairy → my dog is [MASK]
10%的时间:用一个随机的单词替换该单词,例如,my dog is hairy → my dog is apple
10%的时间:保持单词不变,例如,my dog is hairy → my dog is hairy.
这么复杂的操作作者是有一些考量的,如果总是挖空的话,那token级别下游任务中,比如序列标注,他是需要使用[mask]位置词义的,这就和pre-train形成的模型习惯不一样,会带来不好的影响。模型中总共有1.5%(15%*10%)的情况是保留原始的(引导模型去在[MASK]的位置还是考虑一下原来的token输入),还有1.5%(15%*10%)的情况是用随机词替换。随机词替换会给模型增加一点点噪声,但是因为此时模型不知道哪个词是被随机换了(不像[MASK],给模型[MASK]则模型知道此处词的是被挖了,他需要预测这个位置是啥),所以就迫使他去更好地保留每个词的词义,为下游任务提供方便。

至于这些概率是intuitively还是拍脑袋ly,反正其实都差不多吗,毕竟深度学习是一门试一试有效就好了的艺术。

至于使用Transformer作为基础模型,现在也是很自然的事情了,毕竟人家早就说了Attention is all you need是吧?总不能没过两年大谷歌就打自己脸是吧?


最后,个人认为BERT除了屠榜以外还开启了一个新的方向:money is all you need(大误)。在无监督文本数据上怎样更合理地设定训练目标能够得到更好的熵更小的语言模型表示来提升下游任务。毕竟不像CV有ImageNet,NLP没有超大的万能有标注数据集,有的只有未标注的维基百科(大误)


--------------------------

更新:看了一下ELMo的代码,ELMo确实是从左往右的语言模型和从右往左的语言模型其实是独立开来训练的,共享embedding,然后把loss平均一下,然后用的时候把两个方向的语言模型输出拼在一起。所以确实Jacob的挖洞,每个单层内部都是双向的做法更加符合直觉。

user avatar

Updated on Oct 31st:

更新Google官方发布的BERT相关代码:google-research/bert



搬运一下Reddit上Jacob的介绍(附原帖链接)。


Hi, I'm the lead author of the paper.

The basic idea is very simple. For several years, people have been getting very good results "pre-training" DNNs as a language model and then fine-tuning on some downstream NLP task (question answering, natural language inference, sentiment analysis, etc.).

Language models are typically left-to-right, e.g.:

       "the man went to a store"  P(the | <s>)*P(man|<s> the)*P(went|<s> the man)*...     

The problem is that for the downstream task you usually don't want a language model, you want a the best possible contextual representation of each word. If each word can only see context to its left, clearly a lot is missing. So one trick that people have done is to also train a right-to-left model, e.g.:

       P(store|</s>)*P(a|store </s>)*...     

Now you have two representations of each word, one left-to-right and one right-to-left, and you can concatenate them together for your downstream task.

But intuitively, it would be much better if we could train a single model that was deeply bidirectional.

It's unfortunately impossible to train a deep bidirectional model like a normal LM, because that would create cycles where words can indirectly "see themselves," and the predictions become trivial.

What we can do instead is the very simple trick that's used in de-noising auto-encoders, where we mask some percent of words from the input and have to reconstruct those words from context. We call this a "masked LM" but it is often called a Cloze task.

Task 1: Masked LM

       Input: the man [MASK1] to [MASK2] store Label: [MASK1] = went; [MASK2] = store     

In particular, we feed the input through a deep Transformer encoder and then use the final hidden states corresponding to the masked positions to predict what word was masked, exactly like we would train a language model.

The other thing that's missing from an LM is that it doesn't understand relationships between sentences, which is important for many NLP tasks. To pre-train a sentence relationship model, we use a very simple binary classification task, which is to concatenate two sentences A and B and predict whether B actually comes after A in the original text.

Task 2: Next Sentence Prediction

       Input: the man went to the store [SEP] he bought a gallon of milk Label: IsNext  Input: the man went to the store [SEP] penguins are flightless birds Label: NotNext     

Then we just train a very big model for a lot of steps on a lot of text (we used Wikipedia + a collection of free ebooks that some NLP researchers released publicly last year). To adapt to some downstream task, you just fine-tune the model on the labels from that task for a few epochs.

By doing this we got pretty huge improvements over SOTA on every NLP task that we tried, with almost task-specific no changes to our model needed.

But for us the really amazing and unexpected result is that when we go from a big model (12 Transformer blocks, 768-hidden, 110M parameters) to a really big model (24 Transformer blocks, 1024-hidden, 340M parameters), we get huge improvements even on very small datasets (small == less than 5,000 labeled examples).

We also really 100% will release the pre-trained model and code for push-button replication of the main results within the next 2-3 weeks. (Replicating the fine-tunings takes at most a few hours on a single GPU).



以下为个人翻译,一些专有词会在第一次出现时附上对应英文。如有不当之处还请指出,谢谢~


大家好,我是该论文的第一作者。

基本思路非常简单。几年来,人们已通过"预训练"『pre-training』深度神经网络『DNN』作为语言模型(language model),随后在一些后续『downstream』的自然语言处理任务(问答系统『question answering』,自然语言推理『natural language inference』,情感分析『sentiment analysis』等等)上进行微调『fine-tuning』的方式获得了很不错的结果。

一般而言语言模型是自左向右,比如:

       "the man went to a store"  P(the | <s>)*P(man|<s> the)*P(went|<s> the man)*...     

问题是对于后续任务,一般你不需要一个语言模型,而是需要每一个词的最可能语境表示『contextual representation』。如果每个词只能感知其左侧语境,显然很多信息就丢失了。所以人们想出的一个技巧是再训练一个自右向左的模型, 比如:

       P(store|</s>)*P(a|store </s>)*...     

现在对于每个词便有了两种表示形式:一种自左向右,一种自右向左。你可以连接在一起处理你的后续任务。

但是,如果我们可以训练一个单独的深度双向『deeply birectional』的模型,显然结果会更好。

不巧的是,我们无法像传统的语言模型一样训练一个深度双向模型,因为其会产生环路『cycle』,词会间接“感知自身”,而预测变得微不足道『trivial』。(不好意思这里我不是太理解……)

不过,我们可以利用去噪自动编码器『de-noising auto-encoder』中使用的简单技巧:我们可以遮盖『mask』输入中的部分词汇,并从语境中重构那些词汇。我们称之为“遮盖语言模型”『masked LM』,不过它更多地被称为完形任务『Cloze task』。

Task 1: Masked LM

       Input: the man [MASK1] to [MASK2] store Label: [MASK1] = went; [MASK2] = store     (这里个人觉得MASK2应为2)     

尤其是,我们通过一个深层转换『Transformer』编码器进行输入,随后使用对应于遮盖处的最终隐态『final hidden states』对遮盖词进行预测,正如我们训练一个语言模型一样。

另外,语言模型还不理解句间关系,而这恰恰对于许多自然语言处理任务而言十分重要。为了预训练一个句子关系模型,我们使用了非常简单的二元分类『binary classification』任务:连接两个句子A和B后,预测在原文中B是否真的出现在A之后。

Task 2: Next Sentence Prediction

       Input: the man went to the store [SEP] he bought a gallon of milk Label: IsNext  Input: the man went to the store [SEP] penguins are flightless birds Label: NotNext     

随后我们便训练一个非常巨大的模型,大量的步骤及大量的文本(我们使用了维基百科以及一系列的自然语言处理研究者去年公开发表的免费电子书)。为了适应一些后续任务,你只需根据任务对模型的标签进行几代微调。

我们在每一个尝试的自然语言处理任务上,都比原先的最佳结果『SOTA, state-of-the-art』取得了巨大的提升,并且我们的模型几乎不需要针对特定任务『task-specified』加以修改。

不过难以置信的结果是,当我们从一个较大的模型(12个Transformer块,768隐藏层,110M参数)转向一个超巨大的模型(24个Transformer块,1024隐藏层,340M参数),即使在很小的数据集(小,即意味着少于5000个标记样本)上我们也有巨大的提升。

同时我们将会在两到三周内发布预训练模型,以及复现主要结果的自动化代码『code for push-button replication of the main results』。(在单GPU上复现微调最多只需几个小时)。

user avatar

问题不准确。除了模型的改进,更重要的是用了超大的数据集(BooksCorpus 800M + English Wikipedia 2.5G单词)和超大的模型在相关的任务上做预训练,实现了在目标任务上的表现的单调增长(Figure 4.)

类似的现象在计算机视觉任务中也有体现:arxiv.org/abs/1805.0093

用超大的模型在Instagram图像上做预训练预测hashtag,在ImageNet上fine-tune,达到了目前最好的图像分类效果,且目标任务的表现随预训练数据量单调增长(Fig. 2)。

除此之外,没有什么好评价的了。毕竟一个实验需要在16个TPU上跑4天,而我只有两个GTX 1070。

user avatar

如果说这是里程碑式的工作的话,那我在Google实习期间真的是见证了历史。


每周和Jacob一起开会,他复现openAI的带预训练语言模型的GPT只花费了一周,同时发现效果不如预期。拿到大数据,重新训练定位出问题只花了两天。再下次开会他的新想法已经超过openAI模型了。再下周开会就有了现在Single Model在几个任务上的成绩。


请你认真地感受一下这个速度。OpenAI做他们的工作的时候预训练他们的语言模型花了一个月,而Jacob用TPU只花了一天。OpenAI训练语言模型基本是按照原来Transformer的配置,调整了一些参数,而Jacob可以随心所欲地尝试自己新的想法。这是超强算力和超强工程能力碰撞而迸发的能量!未来真的是算力的时代。


@林洲汉 作为共同见证者,你也来膜一下?

类似的话题

  • 回答
    BERT 模型深度评价:革命性的语言理解基石BERT(Bidirectional Encoder Representations from Transformers)自2018年发布以来,无疑是自然语言处理(NLP)领域一个里程碑式的模型。它以其革命性的双向预训练能力,极大地提升了下游NLP任务的性.............
  • 回答
    《睡前消息》409期作为一档以“睡前”为名的时事评论节目,其内容通常以轻松幽默的风格呈现社会热点、科技动态、文化现象等话题,旨在为观众提供睡前的“信息快餐”。以下是对该期节目可能涉及的分析框架和评价方向,结合其节目特点及社会语境进行详细解读: 1. 节目核心内容与选题分析 选题热点:409期可能聚焦.............
  • 回答
    俄罗斯军队在2022年2月24日入侵乌克兰后,21天内未能占领或包围基辅,这一结果涉及复杂的军事、战略和国际因素。以下从多个维度详细分析这一现象: 1. 初期快速推进的军事目标与战略调整 初期目标的矛盾性: 俄罗斯在入侵初期(2月24日)宣称“特别军事行动”的目标是“去纳粹化”和“去俄化”,但.............
  • 回答
    新华社的《破除美国金融模式迷信,中国金融要走自己的路》一文,是近年来中国在金融领域强调自主性、独立性和战略定力的重要政策表达。该文从历史经验、现实挑战和未来战略三个维度,系统阐述了中国金融发展的路径选择,具有鲜明的现实针对性和理论深度。以下从多个角度对这篇文章进行详细分析: 一、文章背景与核心论点1.............
  • 回答
    2022年俄乌战争爆发后,中国互联网上确实出现了一些复杂的现象,既有官方立场的引导,也有民间舆论的分化。以下从多个角度分析这一时期中国互联网的乱象及其背后的原因: 一、官方立场与网络管控1. 官方舆论引导 中国政府明确表态支持乌克兰的主权和领土完整,同时强调“不干涉内政”的原则。在社交媒体和.............
  • 回答
    陈道明、王志文、陈宝国、张国立、李雪健是中国影视界最具代表性的“老戏骨”之一,他们以深厚的表演功底、多样的角色塑造和持久的行业影响力,成为中国影视艺术的中流砥柱。以下从表演风格、代表作、行业地位及艺术贡献等方面进行详细分析: 一、陈道明:历史剧的“帝王”与艺术的“多面手”表演特点: 陈道明以“沉稳.............
  • 回答
    《为战争叫好的都是傻逼》这类文章通常以强烈的反战立场和道德批判为核心,其评价需要从多个维度进行分析,包括其立场的合理性、论据的逻辑性、社会影响以及可能存在的争议。以下从不同角度展开详细分析: 1. 文章的核心立场与立场合理性 立场:这类文章的核心观点是战争本质上是道德上不可接受的,支持战争的人(尤其.............
  • 回答
    龙云(1882年-1967年)是20世纪中国西南地区的重要军阀和政治人物,被尊称为“云南王”,其统治时期(1920年代至1940年代)对云南的现代化进程和民族关系产生了深远影响。以下从多个维度对其历史地位和影响进行详细分析: 一、生平与政治背景1. 出身与早期经历 龙云出生于云南昆明,出身于.............
  • 回答
    关于“前三十年的工业化是一堆破铜烂铁”的说法,这一评价需要结合历史背景、经济政策、技术条件以及国际环境等多方面因素进行深入分析。以下从多个角度展开讨论: 一、历史背景与“前三十年”的定义“前三十年”通常指中国从1949年新中国成立到1979年改革开放前的30年。这一时期,中国在经济、政治、社会等方面.............
  • 回答
    十元左右的低档快餐店顾客以男性为主的现象,可以从经济、社会文化、消费行为、地理位置等多方面进行分析。以下从多个角度详细探讨这一现象的原因及可能的背景: 1. 经济因素:价格敏感与消费习惯 性价比优先:十元左右的快餐通常以快速、便宜、标准化为特点,符合低收入群体或日常通勤人群的消费需求。男性在职场中可.............
  • 回答
    阎学通教授对00后大学生以“居高临下”心态看待世界这一批评,可以从多个维度进行深入分析,其背后既有学术视角的考量,也涉及代际差异、教育体系、社会环境等复杂因素。以下从观点解析、合理性分析、现实背景、潜在影响及改进方向等方面展开详细探讨: 一、阎学通教授的核心观点与逻辑1. “居高临下”的具体表现 .............
  • 回答
    歼8系列战机是中国在20世纪70年代至80年代期间研制的高空高速歼击机,是当时中国航空工业的重要成果之一。该系列战机在冷战时期具有显著的军事意义,但随着技术发展和国际形势变化,其性能和作用逐渐被后续机型取代。以下从历史背景、技术特点、性能分析、发展演变、军事影响及评价等方面进行详细解析: 一、历史背.............
  • 回答
    关于苏翻译和Black枪骑兵对俄乌战争局势的立场差异,需要明确的是,这两位身份可能涉及不同的信息来源和立场背景。以下从多个角度分析他们观点差异的可能原因: 1. 信息来源与立场定位 苏翻译(可能指苏晓康,中国《经济学人》翻译团队成员): 立场:更倾向于国际法、人道主义和多边主义视角。 观点:.............
  • 回答
    由于无法直接访问《睡前消息》第409期的具体内容(可能因平台更新、用户输入误差或节目名称不明确导致无法准确检索),以下将基于对“睡前消息”类节目的常见结构和主题进行推测性分析,并提供一般性的评价框架。若您有更具体的背景信息(如节目来源、发布时间等),可补充说明以便更精准回答。 一、节目内容推测(基于.............
  • 回答
    明成祖朱棣(14021424年在位)五次北伐漠北(今蒙古高原)是明王朝巩固北方边疆、遏制蒙古势力的关键历史事件。这一系列军事行动不仅体现了朱棣的军事才能,也深刻影响了明朝的边疆政策、内政格局和历史走向。以下从历史背景、军事行动、结果评价及历史影响等方面详细分析: 一、历史背景1. 政治合法性与边疆安.............
  • 回答
    2022年的俄乌战争是21世纪最具全球影响力的冲突之一,其规模、持续时间、国际影响和人道主义灾难远超以往。以下从多个维度对这场战争进行详细分析: 一、战争爆发的背景与起因1. 历史渊源 俄乌冲突的根源可追溯至2014年克里米亚危机和顿巴斯战争,俄罗斯在2014年吞并克里米亚并支持顿巴斯分离.............
  • 回答
    关于美国国务卿布林肯和波兰总统对北约向乌克兰提供战机的表态,这一问题涉及地缘政治、军事战略、国内政治和国际关系等多重因素。以下从多个角度进行详细分析: 一、背景与核心争议1. 乌克兰的军事需求 乌克兰自2022年俄乌冲突爆发以来,面临俄罗斯的军事压力,急需先进武器装备以增强防御能力。战机(尤.............
  • 回答
    亚投行(亚洲基础设施投资银行,AIIB)在2022年俄乌冲突爆发后,确实对在俄罗斯和白俄罗斯的项目进行了暂停和审查,这一举措引发了国际社会的广泛关注。以下从背景、原因、影响及评价多个角度进行详细分析: 一、事件背景1. 俄乌冲突的国际影响 2022年2月,俄罗斯入侵乌克兰,引发西方国家对俄罗.............
  • 回答
    俄乌冲突中的俄军指挥体系和行动表现是一个复杂的问题,涉及军事战略、指挥结构、后勤保障、情报系统等多个方面。以下从多个角度对俄军指挥进行详细分析: 一、指挥体系结构1. 中央指挥链 俄军的指挥体系以中央军区(俄联邦安全局)和西部军区(负责乌克兰东部战区)为核心,由总参谋部协调。 总参.............
  • 回答
    关于“幻影部队突袭利沃夫”这一假说,目前尚无确凿证据支持其真实性。以下从历史背景、军事分析、情报来源及可能的动机等方面进行详细分析: 一、历史与地理背景1. 利沃夫的战略地位 利沃夫是乌克兰东部的重要城市,位于第聂伯河畔,历史上曾是俄罗斯帝国、奥匈帝国和苏联的军事重镇。在俄乌战争中,利沃夫是.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有