BERT, ELMo大语言模型详解

引言

2018年,对于处理文本的机器学习模型来说,可谓是一个转折点(更准确地说,是自然语言处理或简称NLP领域)。我们对于如何最佳地表示词语和句子,以捕捉其潜在的含义和关系的理解正在迅速发展。更有趣的是,NLP领域的研究者们纷纷推出了一些令人称奇的组件,你可以自由下载并在自己的模型和流程中使用(这被誉为NLP的“ImageNet时刻”,回顾几年前,类似的发展加速了计算机视觉任务中机器学习的发展)。

想象一下,如果有人问你:“2018年,NLP领域有什么大事件?”你可以自信地回答:“那是NLP的‘ImageNet时刻’啊!”这听起来就像是NLP领域的超级英雄们正集结,准备开启一场知识革命。当年,ImageNet大赛在计算机视觉领域掀起了一场风暴,而2018年,NLP领域也迎来了自己的变革高潮。

在这个转折点上,我们开始重新思考词语和句子的表达方式。就像是在巧妙地拼凑一幅巨大的拼图,每一块都密切相关,共同构建出一个更加完整、更加丰富的语义世界。这不仅仅是对单词的简单排列组合,而是对它们深层次含义和关系的精妙捕捉。简而言之,我们正在学习如何让机器更好地理解语言的微妙之处。

而且,最令人兴奋的是,这些强大的NLP组件并不是遥不可及的高科技产品,它们就像是一座开放的宝库,任由研究者和开发者自由取用。这正是NLP领域的一大魅力所在:分享、合作、不断创新。这些组件的出现,就像是向我们展示了一条通往知识深海的捷径,我们只需搭上这艘NLP的快船,便能驶向更深远的认知领域。

所以,回顾2018年,这不仅是NLP历史上的一个重要节点,更是一场关于语言、知识和智能理解的革命性探索的开始。而我们,正站在这场革命的前沿,见证着一个崭新的智能语言处理时代的诞生。

图片[1]- BERT, ELMo大语言模型详解-点头深度学习网站

BERT引领NLP新时代:开源大潮中的里程碑

在自然语言处理(NLP)领域的最新发展中,BERT的发布无疑是标志性的事件,它被誉为开启了NLP新时代。想象一下,如果NLP是一场马拉松,那么BERT就像是一个突破终点线的冠军运动员,刷新了多项记录。

BERT不仅仅是一种模型,它是一种革命。这个模型在语言任务处理方面打破了多项纪录,就像是语言处理领域的“施瓦辛格”,力量惊人。更令人振奋的是,BERT团队在发布模型的论文之后,不久就开源了模型代码,并提供了已经在海量数据集上预训练的模型版本供下载。这一开源行为可以说是慷慨如雨,为广大机器学习和NLP爱好者送上了一份厚礼。

这一举措的意义重大,它使得任何从事语言处理的机器学习模型构建者都可以将这个强大的组件作为现成资源来使用。这就像是在搭建一座大楼时,突然发现已经有了一个坚固的基座,既省去了从零开始搭建的时间和精力,也减少了对深厚知识和资源的需求。

想象一下,一个初学者想要从头开始训练一个语言处理模型,这无异于试图用勺子挖掘一座山 —— 功夫大且效率低。而BERT的出现,就好比是提供了一台先进的挖掘机,不仅效率高,而且还节约了大量的时间和资源。这无疑大大降低了进入NLP领域的门槛,让更多的研究者和开发者能够站在巨人的肩膀上,更快地推进自己的项目和研究。

总的来说,BERT的发布和开源,不仅是一个技术里程碑,更是一个合作和共享精神的胜利。它不仅改变了NLP领域的游戏规则,更为未来的研究和应用打开了新的大门,让我们对AI和机器学习的未来充满了更多期待。

图片[2]- BERT, ELMo大语言模型详解-点头深度学习网站

当我们谈论BERT时,我们实际上是在讨论一个巨大的知识集合体。BERT并非凭空出现,而是建立在一系列智慧的基础之上,这些智慧正是从近年来NLP社区的沸腾思想中汲取而来的。它的构建涵盖了众多创新概念,包括但不限于:

  1. 半监督序列学习 – Andrew Dai和Quoc Le的研究。
  2. ELMo – 由Matthew Peters领衔的AI2和华盛顿大学计算机科学与工程系(UW CSE)的研究者们共同完成。
  3. ULMFiT – fast.ai创始人Jeremy Howard和Sebastian Ruder的成果。
  4. OpenAI Transformer – OpenAI研究员Radford, Narasimhan, Salimans和Sutskever的贡献。

要真正理解BERT,我们需要先了解这些概念。但在深入探索模型本身之前,让我们先来看看你可以如何使用BERT。

如何使用BERT?

BERT的应用广泛而深远,从基础的文本分类到更复杂的问答系统,BERT都能大放异彩。你可以将其作为一个功能强大的NLP工具,来提升你的文本处理任务。具体来说,你可以:

  • 文本分类:利用BERT对文本进行分类,比如情感分析或主题识别。
  • 命名实体识别:识别文本中的专有名词,如人名、地点和机构名称。
  • 问答系统:构建能够理解自然语言问题并提供精准回答的系统。
  • 文本摘要:自动生成文章或文档的摘要。

理解这些应用场景,有助于我们更深入地理解BERT背后的核心概念。每一个概念,都像是一块拼图,当它们组合在一起时,就构成了BERT这个强大的NLP模型。

接下来,我们将深入探索BERT模型背后的关键概念,揭开它的神秘面纱,理解为何它能如此革命性地改变NLP领域。

BERT:文本分类的典范

让我们以垃圾邮件分类为例,来看看BERT是如何工作的。

图片[3]- BERT, ELMo大语言模型详解-点头深度学习网站

BERT的训练模式:微调(Fine-Tuning)

使用BERT进行文本分类的模型构建过程相当直观。你的主要任务是训练一个分类器,而BERT模型本身在训练阶段只需做最小程度的调整。这种训练过程被称为“微调(Fine-Tuning)”,其概念源自半监督序列学习和ULMFiT。

微调的过程有点像给一辆赛车做细微调整,以适应特定的赛道。BERT已经是一辆性能卓越的赛车,你只需要根据你的赛道(即特定的文本分类任务)来进行微调。

深入解析BERT微调:原理与实践

在谈到BERT的微调(Fine-Tuning)时,很多人可能会有疑问:到底是改变BERT模型的参数,还是仅仅在其顶部添加几层神经网络进行训练?这是一个非常好的问题,让我们来详细解答。

微调BERT:两种关键操作

  1. 调整BERT的参数:在微调过程中,BERT模型的参数确实会发生变化。这意味着,虽然我们使用的是预训练的BERT模型,但是在针对特定任务(如垃圾邮件分类)的过程中,模型的内部权重会根据新的数据进行调整。这一步骤是必要的,因为它使模型能够适应特定任务的语言特征和数据结构。
  2. 在BERT顶部添加层:除了调整现有参数外,通常还会在BERT模型的顶部添加一些新的层。这些层专门用于执行特定任务(如分类)。例如,在文本分类任务中,我们可能会添加一个或多个全连接层,以处理BERT输出的高维特征,并最终产生分类结果。

微调的关键在于上述这两个步骤的结合。首先,通过调整BERT内部的参数,模型能够更好地理解和处理针对特定任务的数据。其次,通过在模型顶部添加专门的层,我们能够将BERT的强大能力转化为针对特定任务的具体输出。

这种方法的优势在于,它允许我们利用BERT强大的通用语言理解能力,同时又能够针对特定的任务和数据集进行优化。这样,即使是在相对较小的数据集上,BERT也能够实现出色的性能,因为它已经在大规模数据集上进行了预训练。

实践中的注意事项

  • 数据依赖:尽管BERT的预训练提供了强大的基础,但微调的效果仍然依赖于特定任务的数据质量和量级。
  • 计算资源:微调BERT需要相当的计算资源,因为即使是在微调阶段,模型也是非常庞大和复杂的。

实际操作步骤

  1. 准备数据集:收集并标记一组电子邮件,标记为“垃圾邮件”或“非垃圾邮件”。
  2. 微调BERT模型:利用这些数据对BERT进行微调,使其能够理解并区分这两种类别的邮件。
  3. 训练分类器:训练一个简单的分类器,它将利用微调后的BERT模型的输出来做出最终的分类决策。

通过这种方式,BERT可以被应用于各种文本分类任务,从垃圾邮件检测到情感分析,再到更复杂的文本分类挑战。BERT的出色表现和灵活性使它成为当前NLP领域的一个强大工具。

Bert模型架构

现在您已经有了一个关于如何使用 BERT 的示例用例,让我们仔细看看它是如何工作的。

图片[4]- BERT, ELMo大语言模型详解-点头深度学习网站

论文提出了 BERT 的两种模型大小:

  • BERT BASE – 大小与 OpenAI Transformer 相当,以便比较性能
  • BERT LARGE – 一个巨大的模型,达到了论文中报道的最先进的结果

BERT 基本上是经过训练的 Transformer 编码器层堆栈。我在之前的文章中解释了 Transformer 模型的设计原理。

图片[5]- BERT, ELMo大语言模型详解-点头深度学习网站

两种 BERT 模型大小都具有大量编码器层(论文中将其称为 Transformer Blocks)——基本版本有 12 个,大型版本有 24 个。与初始论文中 Transformer 参考实现中的默认配置(6 个编码器层、512 个隐藏单元、和 8 个注意力头)。

图片[6]- BERT, ELMo大语言模型详解-点头深度学习网站

第一个输入token由一个特殊的 [CLS] token提供,其原因稍后解释。这里的CLS代表分类。

就像 Transformer 的普通编码器一样,BERT 将一系列单词作为输入,这些单词不断在堆栈中流动。每一层都应用自注意力,并将其结果通过前馈网络传递,然后将其传递给下一个编码器。

图片[7]- BERT, ELMo大语言模型详解-点头深度学习网站

就架构而言,到目前为止,这与 Transformer 相同(除了大小,这只是我们可以设置的配置)。正是在输出中,我们首先开始看到事情是如何分歧的。

每个位置输出一个大小为hidden_ ​​size的向量(BERT Base中为768)。对于我们上面看到的句子分类示例,我们仅关注第一个位置的输出,即[CLS] token。

图片[8]- BERT, ELMo大语言模型详解-点头深度学习网站

[CLS] token可以用作我们选择的分类器的输入。该论文仅使用单层神经网络作为分类器就取得了很好的结果。如下图所示:

图片[9]- BERT, ELMo大语言模型详解-点头深度学习网站

实际上,在自然语言处理(NLP)中,特别是在使用像BERT这样的预训练模型时,”[CLS]” token(分类token)有着特殊的意义。以下是它的主要功能和意义:

  1. 句子表示的代表:在BERT和类似模型中,”[CLS]” token通常被置于输入文本的最前面。在模型处理完输入数据后,”[CLS]” token的最终隐藏状态被用作整个输入序列的汇总表示。这种表示捕获了整个输入文本的上下文信息。
  2. 分类任务的基础:对于分类任务(如情感分析、意图识别等),”[CLS]” token的隐藏状态被用作最终分类的基础。模型会在这个状态上添加一个或多个全连接层来进行具体的分类判断。
  3. 训练过程中的标签:在BERT的预训练阶段,”[CLS]” token也被用于“下一个句子预测”(Next Sentence Prediction, NSP)任务,这是BERT预训练的两个主要任务之一。通过这个任务,模型学习了判断两个句子是否在原文中相邻的能力。

综上所述,”[CLS]” token在BERT类模型中扮演着核心角色,它不仅作为整个输入文本的代表,而且在许多下游任务中是决定模型性能的关键。

与卷积网络的相似之处

对于具有计算机视觉背景的人来说,这种向量传递类似于 VGGNet 等网络的卷积部分与网络末端的全连接分类部分的关系。如下图所示:

图片[10]- BERT, ELMo大语言模型详解-点头深度学习网站

嵌入技术的新纪元:从Word Embedding到Contextual Embedding

在自然语言处理(NLP)的新纪元中,词嵌入(word embedding)技术的发展和应用是不可忽视的一环。到目前为止,词嵌入一直是领先NLP模型处理语言的主要方式。像Word2Vec和GloVe这样的方法已被广泛用于各种任务。在探讨新的变化之前,让我们先回顾一下词嵌入是如何使用的。

词嵌入Word Embedding回顾

为了让机器学习模型处理单词,我们需要一种将单词转换为数字表示的方法。Word2Vec展示了我们可以使用向量(一列数字)来有效地表示单词,以捕捉它们的语义或意义相关的关系(例如,判断单词是否相似、相反,或者像“Stockholm”和“Sweden”与“Cairo”和“Egypt”之间有相同关系一样)。此外,词嵌入还可以捕捉句法或基于语法的关系(例如,“had”和“has”之间的关系与“was”和“is”之间的关系相同)。下面是一个“stick”这个词的GloVe嵌入示例(嵌入向量大小为200):

图片[11]- BERT, ELMo大语言模型详解-点头深度学习网站

“stick”一词的 GloVe 词嵌入 – 200 个浮点数的向量(四舍五入到小数点后两位)。它持续了 200 个值。

新的转变:Contextual Embedding上下文嵌入

随着BERT等模型的出现,我们见证了从传统词嵌入到上下文嵌入(contextual embedding)的转变。这种新型嵌入考虑了词在特定句子中的上下文,这意味着相同的词在不同的句子中可以有不同的嵌入,反映出其不同的语义。

这种上下文敏感的特性使得上下文嵌入在捕捉词义、句法和语义关系方面更为精准和有效。例如,单词“bank”在“河岸”和“银行”这两种语境中会有完全不同的嵌入表示。

BERT模型的核心目标

在深入理解BERT及类似模型时,我们必须认识到,它们的核心目的在于实现上下文嵌入(Contextual Embedding)。这种嵌入方式是NLP领域的一次重大革新,它与传统的词嵌入方法有着根本的不同。BERT等模型的目标在于通过上下文嵌入,捕捉和利用语言的丰富多样性和复杂性,从而在各种NLP任务中实现更高水平的性能。


ELMo(Embeddings from Language Models)

ELMo(Embeddings from Language Models)是一种深度学习的自然语言处理(NLP)技术,用于创建词语的上下文相关表示。ELMo的特点和重要性可以通过以下几个方面来理解:

  1. 上下文敏感的词嵌入
    • 不同于早期的词嵌入方法(如Word2Vec或GloVe),ELMo生成的词嵌入是上下文敏感的。这意味着同一个词在不同的句子中可以有不同的表示,反映了其在各种上下文中的不同含义。
  2. 深度双向模型
    • ELMo使用基于双向LSTM(长短时记忆网络)的深度模型。这种双向结构允许模型同时考虑到词汇的前后上下文,从而生成更丰富、更准确的词表示。
  3. 预训练和微调
    • ELMo模型首先在大型文本语料库上进行预训练,以学习语言的广泛特性。然后,这些预训练的词嵌入可以被用来微调特定的NLP任务(如情感分析、问答系统等),提高其性能。
  4. 层级特征表示
    • ELMo模型的不同层捕获了不同类型的信息。例如,较低的层可能更专注于语法特征,而较高的层则可能捕获更多与语义相关的信息。这些层级特征的组合使得ELMo非常强大和灵活。
  5. 对NLP领域的影响
    • ELMo的提出标志着NLP领域的一个重要进步,它极大地推动了多种NLP任务性能的提升。它也为后续的模型,如BERT和GPT,奠定了基础,这些模型进一步发展了上下文敏感的词嵌入和预训练技术。

具体来说,ELMo 没有为每个单词使用固定的嵌入,而是先查看整个句子,然后再为其中的每个单词分配嵌入。它使用针对特定任务训练的双向 LSTM 来创建这些嵌入。

图片[12]- BERT, ELMo大语言模型详解-点头深度学习网站

ELMo 为 NLP 背景下的预训练迈出了重要一步。ELMo LSTM 将以我们数据集的语言在海量数据集上进行训练,然后我们可以将其用作其他需要处理语言的模型的组件。

ELMo 的秘密是什么?

ELMo 通过接受训练来预测单词序列中的下一个单词,从而获得了语言理解能力,这项任务称为语言建模。这很方便,因为我们有大量的文本数据,这样的模型可以从中学习而无需标签。

图片[13]- BERT, ELMo大语言模型详解-点头深度学习网站

预训练的一步:语言建模

考虑一个例子,如果输入是“Let’s stick to”,那么任务是预测下一个最可能的单词。这是一个典型的语言建模任务。当在大量数据集上训练时,模型开始捕捉语言模式。尽管在这个特定例子中,模型未必能准确猜出下一个单词,但它能够学习到更普遍的语言结构。例如,在单词“hang”之后,模型将赋予“out”(组成“hang out”)比“camera”更高的概率。

ELMo的隐藏状态

在ELMo的预训练过程中,每个展开的长短期记忆网络(LSTM)步骤的隐藏状态都是可见的,这些隐藏状态在预训练后的嵌入过程中非常重要。我们可以想象这些隐藏状态就像是从ELMo的“头”后面窥视出来的小窗口,让我们得以一窥模型如何内部处理语言。

双向LSTM的进一步步骤

ELMo训练了一个双向的LSTM。这意味着它的语言模型不仅仅能够预测下一个单词,还能够理解前面的单词。这种双向理解赋予了ELMo更全面的语言感知能力,使其能够更准确地理解和编码语言的含义。

总结来说,ELMo的预训练过程通过语言建模和双向LSTM的结合,有效地训练模型去捕捉和理解语言的复杂性。这种能力使ELMo成为处理多种NLP任务的强大工具。

图片[14]- BERT, ELMo大语言模型详解-点头深度学习网站

在ELMo中,每个单词的表示不仅仅取决于它的初始嵌入,还取决于通过LSTM网络产生的隐藏状态。这些隐藏状态捕获了单词在特定上下文中的语言特征。

  1. 拼接(Concatenation):首先,ELMo将不同层的LSTM的隐藏状态进行拼接。这一步骤是关键,因为它结合了模型在处理文本时从各个层中学习到的不同方面的信息。
  2. 加权求和(Weighted Summation):接下来,ELMo对这些拼接的隐藏状态进行加权求和。这一步骤允许模型调整每个隐藏状态层对最终嵌入的贡献度,这样就可以根据特定任务或应用的需求来优化嵌入。

上下文化嵌入的重要性

通过这种方法,ELMo为每个单词生成了一个独特的、上下文相关的嵌入。这意味着相同的单词在不同的句子中可以有不同的嵌入表示,反映出其在各个句子中的不同含义和用法。

图片[15]- BERT, ELMo大语言模型详解-点头深度学习网站

ULM-FiT与Transformer:NLP中的迁移学习与创新

在自然语言处理(NLP)的领域中,ULM-FiT和Transformer的出现,标志着对迁移学习的理解和应用上的重大进步。这两种技术在模型预训练和微调方面的创新,极大地提升了NLP任务的处理能力。

ULM-FiT:迁移学习在NLP中的应用

ULM-FiT(Universal Language Model Fine-tuning)引入了一种方法,使得模型能够在预训练期间有效利用所学习的内容,这不仅限于嵌入,甚至超越了上下文化嵌入。ULM-FiT引入了一个语言模型,以及一个针对各种任务有效微调该语言模型的过程。

这意味着NLP终于拥有了一种有效的迁移学习方法,这在一定程度上与计算机视觉领域相媲美。

Transformer:超越LSTM的进步

Transformer的发布,以及其在机器翻译等任务上取得的成果,开始让部分领域内的人认为它可能取代LSTM。这一观点还因为Transformer在处理长期依赖性方面优于LSTM而得到加强。

Transformer的编码器-解码器结构使其非常适合机器翻译。但问题是,我们如何使用它进行句子分类?又该如何使用它来预训练一个可以针对其他任务(下游任务)进行微调的语言模型?

OpenAI Transformer:预训练Transformer解码器用于语言建模

OpenAI Transformer模型的一个显著特点是,它只使用了Transformer的解码器部分,并且在这个设置中堆叠了十二层解码器层。这种结构的选择和实施对于理解模型的工作原理和应用范围至关重要。

在标准的Transformer模型中,有两个主要组成部分:编码器(encoder)和解码器(decoder)。编码器处理输入数据,解码器则生成输出。但在某些变体中,比如GPT(Generative Pre-trained Transformer),只使用解码器部分。在标准的Transformer解码器中,有两种类型的注意力机制:一种是自注意力(self-attention),另一种是编码器-解码器注意力。后者允许解码器层关注编码器层的输出。但如果没有编码器,这种编码器-解码器注意力自然就不存在了。不过,解码器中仍然保留了自注意力层。自注意力机制允许解码器层内的每个位置关注到解码器的其他位置,这对于理解和生成序列非常重要。最后,在训练时,为了防止解码器窥视未来的信息(即尚未生成的token或词汇),自注意力层被设置为“掩蔽(Mark)模式”。这意味着在生成当前词汇时,模型只能使用当前和之前的词汇信息,而不能使用未来的词汇信息。这是一种预防模型在生成文本时作弊的方法。

拥有这样的结构后,我们可以继续使用同样的语言建模任务来训练模型:使用大量的(未标记的)数据集来预测下一个词。一个有效的方法就是向模型投入大量的文本数据,比如7000本书籍的文本,让它进行学习。书籍作为训练材料非常合适,因为它们允许模型学习即使在文本中相隔很远的信息之间的关联,这是在用推文或文章训练时所无法得到的。

模型的应用范围

这种结构使得OpenAITransformer在处理长篇文本和理解复杂的语言结构方面表现出色。它适用于那些需要深入理解语境和长期依赖性的NLP任务,如文本摘要、文学作品分析等。

总结来说,ULM-FiT和Transformer在NLP领域引入了新的迁移学习和预训练模型微调方法,这些创新不仅改善了语言处理的能力,也为未来的NLP任务提供了更多可能性。

图片[16]- BERT, ELMo大语言模型详解-点头深度学习网站

将学习迁移到下游任务

现在假设 OpenAI Transformer已经过预训练,并且其层已经过调整以合理处理语言,我们可以开始将它用于下游任务。我们首先看一下句子分类(将电子邮件分类为“垃圾邮件”或“非垃圾邮件”):

图片[17]- BERT, ELMo大语言模型详解-点头深度学习网站

OpenAI 论文概述了许多不同的模型结构来处理不同类型任务的输入。论文中的下图显示了模型的结构是如何适配执行不同任务的。

图片[18]- BERT, ELMo大语言模型详解-点头深度学习网站

BERT:解码器到编码器的跃迁

OpenAI的Transformer(GPT系列模型,参考博文【1】【2】)带来了基于Transformer架构的可微调预训练模型,但从LSTM到Transformer的过渡似乎丢失了某些元素。回想一下,ELMo的语言模型能够双向理解文本,但OpenAITransformer仅限于单向。这就引发了一个问题:我们能否构建一个基于Transformer的模型,它不仅向前看,也能向后看,即同时考虑左右两侧的上下文?

BERT应声登场,带着解决方案。

遮蔽语言模型:BERT的独创

BERT提出了一个大胆的想法:“我们使用Transformer的编码器。”

这似乎有些疯狂。毕竟,传统观点认为,如果模型在处理时同时考虑前后文,那么它可能会间接“看到”自己,从而导致信息的泄露。但BERT自信地回应:“我们用遮蔽来解决这个问题。”

BERT的核心机制

BERT的创新之处在于其遮蔽语言模型(Mark launglage Model)。在这个模型中,BERT在训练时会随机遮蔽(隐藏)输入文本的某些部分,比如遮蔽掉某些单词,然后让模型根据上下文来预测这些被遮蔽的部分。这样做的好处是,模型被迫学习考虑前后的上下文信息,从而更全面地理解语言。

双向上下文的力量

通过考虑双向上下文,BERT可以更精准地捕捉语言的微妙差异,例如同一词汇在不同上下文中的不同含义。这种全面的理解能力,使得BERT在语言处理任务中,无论是在理解句子结构还是深入挖掘语言的复杂性方面,都迈出了重大一步。

总之,BERT通过其遮蔽语言模型和对双向上下文的巧妙利用,为NLP领域带来了一种新的、更高效的语言处理方式。

图片[19]- BERT, ELMo大语言模型详解-点头深度学习网站

BERT的独特之处不仅在于它如何使用Transformer的编码器堆栈,更重要的是还在于它如何通过创新的训练任务来训练这些编码器。这其中包括了遮蔽语言模型(MLM)的概念,以及处理双句子关系的方法。

遮蔽语言模型(MLM)

BERT的语言模型任务聪明地遮蔽了输入中约15%的单词,并要求模型预测这些缺失的单词。通过这种方式,BERT能够更好地学习上下文信息,并理解每个词在句中的角色。

为了提升模型后续微调的效果,BERT还采取了一些其他策略:

  • 有时它会随机替换一个词为另一个词,并要求模型预测该位置的正确单词。
  • 这种方法不仅帮助模型学习预测遮蔽词,还训练它更准确地理解和使用上下文。

双句子任务

回顾一下OpenAI Transformer如何处理不同任务,我们会发现有些任务要求模型对两个句子做出智能判断(例如,它们是否是彼此的释义版本?给定一个维基百科条目作为输入,以及一个关于该条目的问题作为另一个输入,我们能回答这个问题吗?)。

为了使BERT更擅长处理多个句子之间的关系,预训练过程中加入了额外的任务:给定两个句子(A和B),B是否可能是紧随A之后的句子?

这种训练方法使BERT能够更好地理解句子间的逻辑和关系,进而提高了它在各种包含句子间关系的任务(如问答系统、文本蕴含识别等)中的表现。

总之,BERT通过其遮蔽语言模型和双句子任务的训练方法,巧妙地训练了模型去理解和处理复杂的语言结构和关系,为解决NLP中的各种挑战提供了强大的工具。

图片[20]- BERT, ELMo大语言模型详解-点头深度学习网站

下游任务特定模型

BERT 论文展示了使用 BERT 执行不同任务的多种方法。

图片[21]- BERT, ELMo大语言模型详解-点头深度学习网站

BERT作为特征提取工具

除了微调方法之外,BERT的另一个重要用途是作为特征提取工具。这与ELMo的使用方式类似,你可以利用预训练的BERT生成上下文化的词嵌入,然后将这些嵌入输入到现有模型中。

BERT和上下文化词嵌入

使用BERT进行特征提取的过程大致如下:

  1. 生成嵌入:首先,利用预训练的BERT模型为输入文本的每个单词生成上下文化词嵌入。这些嵌入捕获了每个词在其特定上下文中的含义。
  2. 输入现有模型:然后,将这些生成的词嵌入作为特征输入到现有的其他机器学习模型中。这些模型可以是用于不同NLP任务的分类器、序列标记器等。

特征提取的优势

  • 增强现有模型:通过加入BERT生成的丰富、上下文敏感的特征,可以显著提升现有模型的性能。
  • 灵活性:这种方法提供了一种灵活的方式来利用BERT的强大能力,而无需完全依赖于BERT的架构。
  • 效率:在某些情况下,这种方法可能比完全微调BERT更高效,尤其是在资源有限的情况下。

应用示例:命名实体识别

例如,在命名实体识别任务中,使用BERT进行特征提取可以提供关于每个词及其上下文的深刻洞察,从而帮助模型更准确地识别和分类不同的实体(如人名、地点、组织等)。

确定最佳上下文化嵌入向量:任务依赖性

确实,选择最适合作为上下文化嵌入的向量确实取决于特定的任务。在这方面,BERT的原始论文探讨了六种不同的选择,并与微调模型的性能(在某个任务上达到了96.4的分数)进行了比较。

图片[22]- BERT, ELMo大语言模型详解-点头深度学习网站

各种嵌入向量的考量

  1. 不同层的输出:BERT模型由多个层组成,每层输出的嵌入向量可能捕获不同类型的信息。有些层可能更专注于捕捉语法信息,而另一些层可能更倾向于捕捉语义信息。
  2. 合并不同层的信息:可以考虑将不同层的输出合并,以获取更全面的表示。这可以通过简单的叠加、加权求和或者其他合并技术实现。
  3. 特定任务的微调:另一种选择是对BERT进行特定任务的微调,然后使用微调后模型的输出作为嵌入。

任务依赖性

  • 不同任务对嵌入的需求不同:例如,在命名实体识别中,可能需要更多关注语法结构的层;而在情感分析中,则可能更需要关注捕捉情感和语义的层。
  • 性能评估:选择哪种嵌入向量最佳,需要基于特定任务的性能评估来决定。这通常涉及到实验和比较不同嵌入方式对模型性能的影响。

总结

选择哪种上下文化嵌入向量最适合,取决于任务的具体需求和特点。研究不同的嵌入向量及其在各种任务中的表现是理解和有效使用BERT模型的关键。

图片[23]- BERT, ELMo大语言模型详解-点头深度学习网站

体验BERT:实践指南

如果你想亲自体验BERT,一个极好的起点是通过Google Colab上的“BERT FineTuning with Cloud TPUs”笔记本。即使你之前从未使用过Cloud TPUs,这也是一个尝试它们的好机会,因为BERT代码同时支持TPUs、CPUs和GPUs。

探索BERT代码

接下来的步骤是查看BERT的代码仓库:

  1. 模型构建:在modeling.py文件中构建的BertModel类,其结构几乎与标准的Transformer编码器相同。
  2. 微调过程示例run_classifier.py展示了微调过程,并且构建了用于监督学习模型的分类层。如果你想构建自己的分类器,请查看该文件中的create_model()方法。
  3. 预训练模型:有几种预训练模型可供下载,包括BERT Base和BERT Large,以及英语、中文和覆盖102种语言的多语言模型,这些模型都是在维基百科上训练的。
  4. 单词分割:BERT不是把单词作为整体处理,而是使用WordPieces。tokenization.py是将你的单词转换为适合BERT的WordPieces的分词器。
  5. PyTorch实现:你也可以查看BERT的PyTorch实现。AllenNLP库使用了这一实现,允许在任何模型中使用BERT嵌入。

致谢

本博文的插图来自于Jay Alammar,在此给予感谢。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容