英文

BERT大型模型(大小写)整词遮盖

预训练模型,使用遮盖语言建模(MLM)目标在英文语言上。该模型在 this paper 年提出, this repository 年首次发布。该模型区分大小写:它区分english和English。

与其他BERT模型不同,该模型使用了一种新技术:整词遮盖。在这种情况下,与一个单词对应的所有标记一次性被遮盖。整体遮盖率保持不变。

训练过程相同 - 每个遮盖的WordPiece标记独立预测。

免责声明:BERT发布团队未为此模型编写模型卡片,所以此模型卡片是由Hugging Face团队编写的。

模型描述

BERT是一个在大量英文数据上进行自监督训练的transformers模型。这意味着它仅在原始文本上进行预训练,没有人以任何方式标记它们(这就是它可以使用大量公开可用数据的原因),它使用自动过程从这些文本中生成输入和标签。更确切地说,它的预训练有两个目标:

  • 遮盖语言建模(MLM):取一个句子,模型随机遮盖输入中15%的单词,然后将整个遮盖的句子通过模型运行,预测遮盖的单词。这与传统的循环神经网络(RNN)通常按顺序查看单词,或者与内部遮盖未来令牌的自回归模型(如GPT)不同。它使模型学习到了句子的双向表示。
  • 下一句预测(NSP):模型在预训练期间将两个遮盖的句子连接起来作为输入。它们有时对应于原始文本中相邻的句子,有时则不是。然后,模型要预测这两个句子是否相邻。

通过这种方式,该模型学习到了英语语言的内在表示,可以用于提取对下游任务有用的特征:例如,如果您拥有一组带标签的句子数据,可以使用BERT模型产生的特征作为输入训练标准分类器。

该模型采用以下配置:

  • 24层
  • 1024隐藏维度
  • 16个注意力头
  • 336M参数。

预期用途和限制

您可以在掩码语言建模或下一句预测方面直接使用原始模型,但它主要用于在下游任务上进行微调。查看 model hub 以寻找您感兴趣的任务的基于BERT的微调版本。

请注意,该模型主要旨在进行整个句子(可能遮盖)来进行决策的任务上进行微调,例如序列分类、标记分类或问题回答。对于文本生成等任务,您应该查看像GPT2这样的模型。

如何使用

您可以直接使用此模型进行遮盖语言建模的管道:

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='bert-large-cased-whole-word-masking')
>>> unmasker("Hello I'm a [MASK] model.")
[
   {
      "sequence":"[CLS] Hello I'm a fashion model. [SEP]",
      "score":0.1474294513463974,
      "token":4633,
      "token_str":"fashion"
   },
   {
      "sequence":"[CLS] Hello I'm a magazine model. [SEP]",
      "score":0.05430116504430771,
      "token":2435,
      "token_str":"magazine"
   },
   {
      "sequence":"[CLS] Hello I'm a male model. [SEP]",
      "score":0.039395421743392944,
      "token":2581,
      "token_str":"male"
   },
   {
      "sequence":"[CLS] Hello I'm a former model. [SEP]",
      "score":0.036936815828084946,
      "token":1393,
      "token_str":"former"
   },
   {
      "sequence":"[CLS] Hello I'm a professional model. [SEP]",
      "score":0.03663451969623566,
      "token":1848,
      "token_str":"professional"
   }
]

以下是如何在PyTorch中使用此模型获取给定文本的特征:

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-large-cased-whole-word-masking')
model = BertModel.from_pretrained("bert-large-cased-whole-word-masking")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='pt')
output = model(**encoded_input)

以及在TensorFlow中的使用方式:

from transformers import BertTokenizer, TFBertModel
tokenizer = BertTokenizer.from_pretrained('bert-large-cased-whole-word-masking')
model = TFBertModel.from_pretrained("bert-large-cased-whole-word-masking")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)

限制和偏差

即使用于该模型的训练数据可以被看作是相对中立的,但该模型可能具有偏见的预测结果:

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='bert-large-cased-whole-word-masking')
>>> unmasker("The man worked as a [MASK].")
[
   {
      "sequence":"[CLS] The man worked as a carpenter. [SEP]",
      "score":0.09021259099245071,
      "token":25169,
      "token_str":"carpenter"
   },
   {
      "sequence":"[CLS] The man worked as a cook. [SEP]",
      "score":0.08125395327806473,
      "token":9834,
      "token_str":"cook"
   },
   {
      "sequence":"[CLS] The man worked as a mechanic. [SEP]",
      "score":0.07524766772985458,
      "token":19459,
      "token_str":"mechanic"
   },
   {
      "sequence":"[CLS] The man worked as a waiter. [SEP]",
      "score":0.07397029548883438,
      "token":17989,
      "token_str":"waiter"
   },
   {
      "sequence":"[CLS] The man worked as a guard. [SEP]",
      "score":0.05848982185125351,
      "token":3542,
      "token_str":"guard"
   }
]


>>> unmasker("The woman worked as a [MASK].")
[
   {
      "sequence":"[CLS] The woman worked as a maid. [SEP]",
      "score":0.19436432421207428,
      "token":13487,
      "token_str":"maid"
   },
   {
      "sequence":"[CLS] The woman worked as a waitress. [SEP]",
      "score":0.16161060333251953,
      "token":15098,
      "token_str":"waitress"
   },
   {
      "sequence":"[CLS] The woman worked as a nurse. [SEP]",
      "score":0.14942803978919983,
      "token":7439,
      "token_str":"nurse"
   },
   {
      "sequence":"[CLS] The woman worked as a secretary. [SEP]",
      "score":0.10373266786336899,
      "token":4848,
      "token_str":"secretary"
   },
   {
      "sequence":"[CLS] The woman worked as a cook. [SEP]",
      "score":0.06384387612342834,
      "token":9834,
      "token_str":"cook"
   }
]

此偏见也会影响该模型的所有基于微调的版本。

训练数据

BERT模型在 BookCorpus 上进行了预训练,该数据集包含11,038本未发布的书籍和 English Wikipedia (不包括列表、表格和标题)。

训练过程

预处理

文本经过小写处理并使用WordPiece进行标记化,词汇量为30,000。模型的输入形式如下:

[CLS] Sentence A [SEP] Sentence B [SEP]

概率为0.5,句子A和句子B对应于原始语料库中的两个连续句子,在其他情况下,它是语料库中的另一个随机句子。注意,在这里被视为句子的内容通常比一个单独句子要长。唯一的限制是两个“句子”的结果长度总共少于512个标记。

每个句子的遮盖过程的细节如下:

  • 15%的标记被遮盖。
  • 在80%的情况下,遮盖的标记被替换为[MASK]。
  • 在剩下的10%情况下,遮盖的标记保持不变。
  • 在剩下的10%情况下,遮盖的标记被替换为与其不同的随机标记。

预训练

该模型使用4个云TPU在Pod配置下(总共16个TPU芯片)进行100万步的训练,批量大小为256。90%的步骤将序列长度限制为128个标记,剩下的10%为512个标记。使用Adam优化器,学习率为1e-4,β1 = 0.9,β2 = 0.999,权重衰减为0.01,在训练的前10,000个步骤中进行学习率预热,然后线性衰减学习率。

评估结果

当在下游任务上进行微调时,该模型实现了以下结果:

Model SQUAD 1.1 F1/EM Multi NLI Accuracy
BERT-Large, Cased (Whole Word Masking) 92.9/86.7 86.46

BibTeX条目和引文信息

@article{DBLP:journals/corr/abs-1810-04805,
  author    = {Jacob Devlin and
               Ming{-}Wei Chang and
               Kenton Lee and
               Kristina Toutanova},
  title     = {{BERT:} Pre-training of Deep Bidirectional Transformers for Language
               Understanding},
  journal   = {CoRR},
  volume    = {abs/1810.04805},
  year      = {2018},
  url       = {http://arxiv.org/abs/1810.04805},
  archivePrefix = {arXiv},
  eprint    = {1810.04805},
  timestamp = {Tue, 30 Oct 2018 20:39:56 +0100},
  biburl    = {https://dblp.org/rec/journals/corr/abs-1810-04805.bib},
  bibsource = {dblp computer science bibliography, https://dblp.org}
}