本文档解释了 BERT(Bidirectional Encoder Representations from Transformers)及其变体在 TensorFlow Model Garden 中的实现。它涵盖了代码库中的架构、组件和不同的模型变体。有关使用这些模型的 NLP 任务的信息,请参阅 NLP 任务。有关 NLP 模型数据处理的详细信息,请参阅 NLP 数据处理。
BERT 是一种基于 Transformer 的语言理解模型架构。TensorFlow Model Garden 以灵活的架构实现了 BERT 及其多个变体,允许进行定制和扩展。
来源:official/nlp/modeling/networks/encoder_scaffold.py30-78 该图显示了 BERT 架构的核心组件,其中输入张量通过嵌入层、Transformer 编码器层堆栈进行处理,然后输出序列表示和用于下游任务的池化表示。
TensorFlow Model Garden 通过灵活的架构实现了 BERT 及其变体,允许进行定制和扩展。核心实现围绕着一个脚手架设计模式构建。
EncoderScaffold 是提供基于 Transformer 的编码器架构(如 BERT)灵活实现的中心组件。它允许定制
来源:official/nlp/modeling/networks/encoder_scaffold.py30-396
EncoderScaffold 类允许通过定制嵌入网络、Transformer 层和其他组件来创建不同的 BERT 变体。
TensorFlow Model Garden 实现了一些 BERT 变体,包括 BERT、ALBERT 和 ELECTRA。这些变体使用相同的核心 Transformer 架构,但具有不同的预训练目标或架构修改。
BertPretrainer 和 BertPretrainerV2 类实现了 BERT 模型的预训练任务
来源:official/nlp/modeling/models/bert_pretrainer.py31-158 official/nlp/modeling/models/bert_pretrainer.py162-281
BertPretrainerV2 提供了一个改进的实现,支持分类头和更灵活的输出。
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 类支持标准的文本分类和回归任务
num_classes=1 支持配置为回归任务来源:official/nlp/modeling/models/bert_classifier.py24-147
BertTokenClassifier 类支持 Token 级分类任务
来源:official/nlp/modeling/models/bert_token_classifier.py22-133
BertSpanLabeler 类支持 span 预测任务
来源:official/nlp/modeling/models/bert_span_labeler.py24-125
ALBERT (A Lite BERT) 使用相同的 EncoderScaffold 实现,但进行了特定修改
在 TensorFlow Model Garden 中,可以通过使用共享 Transformer 层的 EncoderScaffold 来定制 ALBERT。
ELECTRA 通过 ElectraPretrainer 实现,该模型包含
ElectraPretrainer 处理专门的训练过程,其中生成器为被掩盖的标记生成合理的替换,判别器学习识别哪些标记被替换了。
来源:official/nlp/modeling/models/electra_pretrainer.py27-334
BERT 及其变体与 TensorFlow Model Garden 的更广泛的训练框架集成
BERT 模型可以使用不同的预训练目标(MLM、NSP、RTD)进行配置,并使用 BertClassifier、BertTokenClassifier 和 BertSpanLabeler 等特定于任务的模型类来微调以适应各种下游任务。
模型可以被实例化并用于预训练和微调
用于预训练
用于分类任务的微调
来源: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 标注。