菜单

BERT 及其变体

相关源文件

本文档解释了 BERT(Bidirectional Encoder Representations from Transformers)及其变体在 TensorFlow Model Garden 中的实现。它涵盖了代码库中的架构、组件和不同的模型变体。有关使用这些模型的 NLP 任务的信息,请参阅 NLP 任务。有关 NLP 模型数据处理的详细信息,请参阅 NLP 数据处理

BERT 架构概述

BERT 是一种基于 Transformer 的语言理解模型架构。TensorFlow Model Garden 以灵活的架构实现了 BERT 及其多个变体,允许进行定制和扩展。

架构图

来源:official/nlp/modeling/networks/encoder_scaffold.py30-78 该图显示了 BERT 架构的核心组件,其中输入张量通过嵌入层、Transformer 编码器层堆栈进行处理,然后输出序列表示和用于下游任务的池化表示。

实现组件

TensorFlow Model Garden 通过灵活的架构实现了 BERT 及其变体,允许进行定制和扩展。核心实现围绕着一个脚手架设计模式构建。

EncoderScaffold

EncoderScaffold 是提供基于 Transformer 的编码器架构(如 BERT)灵活实现的中心组件。它允许定制

  • 嵌入层
  • Transformer 层
  • 池化行为
  • 标准化选项

来源:official/nlp/modeling/networks/encoder_scaffold.py30-396

EncoderScaffold 类允许通过定制嵌入网络、Transformer 层和其他组件来创建不同的 BERT 变体。

BERT 变体和预训练

TensorFlow Model Garden 实现了一些 BERT 变体,包括 BERT、ALBERT 和 ELECTRA。这些变体使用相同的核心 Transformer 架构,但具有不同的预训练目标或架构修改。

BertPretrainer

BertPretrainerBertPretrainerV2 类实现了 BERT 模型的预训练任务

来源:official/nlp/modeling/models/bert_pretrainer.py31-158 official/nlp/modeling/models/bert_pretrainer.py162-281

BertPretrainerV2 提供了一个改进的实现,支持分类头和更灵活的输出。

ELECTRA 预训练

ELECTRA (Efficiently Learning an Encoder that Classifies Token Replacements Accurately) 使用了不同的预训练方法。它不掩盖(mask)标记,而是用来自小型生成器网络的合理替代标记替换一些标记,并训练一个判别器来检测哪些标记被替换了。

来源:official/nlp/modeling/models/electra_pretrainer.py27-163

ElectraPretrainer 类实现了 ELECTRA 预训练方法,该方法包括一个生成器和一个联合训练的判别器。

下游模型

BERT 架构及其变体可以通过专门的模型类用于各种下游 NLP 任务

来源:official/nlp/modeling/models/bert_classifier.py24-147 official/nlp/modeling/models/bert_token_classifier.py22-133 official/nlp/modeling/models/bert_span_labeler.py24-125 official/nlp/modeling/models/dual_encoder.py24-162

分类模型

BertClassifier 类支持标准的文本分类和回归任务

  • 以 BERT 编码器网络为输入
  • 在池化输出之上添加一个分类头
  • 支持可定制的分类头
  • 通过设置 num_classes=1 支持配置为回归任务

来源:official/nlp/modeling/models/bert_classifier.py24-147

Token 分类模型

BertTokenClassifier 类支持 Token 级分类任务

  • 应用于序列输出中的每个 Token
  • 用于命名实体识别(NER)和词性标注等任务

来源:official/nlp/modeling/models/bert_token_classifier.py22-133

Span 标注模型

BertSpanLabeler 类支持 span 预测任务

  • 预测文本内的开始和结束位置
  • 用于问答(如 SQuAD)和其他 span 提取任务

来源:official/nlp/modeling/models/bert_span_labeler.py24-125

BERT 变体

ALBERT

ALBERT (A Lite BERT) 使用相同的 EncoderScaffold 实现,但进行了特定修改

  • 跨 Transformer 层共享参数
  • 因子化嵌入参数化
  • 无下一句预测任务

在 TensorFlow Model Garden 中,可以通过使用共享 Transformer 层的 EncoderScaffold 来定制 ALBERT。

ELECTRA

ELECTRA 通过 ElectraPretrainer 实现,该模型包含

  • 一个生成器模型(通常是较小的 BERT)
  • 一个判别器模型(主要的 BERT 模型)
  • 一种替换标记检测目标,而非掩码语言模型

ElectraPretrainer 处理专门的训练过程,其中生成器为被掩盖的标记生成合理的替换,判别器学习识别哪些标记被替换了。

来源:official/nlp/modeling/models/electra_pretrainer.py27-334

与训练流水线的集成

BERT 及其变体与 TensorFlow Model Garden 的更广泛的训练框架集成

BERT 模型可以使用不同的预训练目标(MLM、NSP、RTD)进行配置,并使用 BertClassifierBertTokenClassifierBertSpanLabeler 等特定于任务的模型类来微调以适应各种下游任务。

使用示例

模型可以被实例化并用于预训练和微调

用于预训练

用于分类任务的微调

来源:official/nlp/modeling/models/bert_pretrainer_test.py108-227 official/nlp/modeling/models/bert_classifier_test.py26-103

总结

TensorFlow Model Garden 提供了 BERT 及其变体(包括 ALBERT 和 ELECTRA)的灵活实现。该实现基于 EncoderScaffold 架构,该架构允许定制和扩展。为下游任务提供了各种模型类,包括分类、Token 分类和 Span 标注。