英文

BERT多语言基础模型(大小写敏感)

在具有最大维基百科上引入遮蔽语言建模(MLM)目标的104种语言上进行预训练模型。这是在 这篇论文中介绍的 。 并首次在这个存储库中发布。此模型区分大小写:它将英语和English区分开来。

免责声明:发布BERT的团队没有为此模型撰写模型卡,因此这个模型卡是由Hugging Face团队编写的。

模型描述

BERT是一个以自监督方式在大型多语言数据语料库上进行预训练的转换器模型。这意味着它只对原始文本进行了预训练,而没有以任何方式进行人工标注(这就是为什么它可以使用大量公开可用的数据),它使用自动化过程从这些文本中生成输入和标签。更确切地说,它通过两个目标进行了预训练:

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

通过这种方式,模型学习了训练集中语言的内部表示,可以用于提取对下游任务有用的特征:例如,如果您有一个带有标记句子的数据集,可以使用BERT模型生成的特征作为输入来训练标准分类器。

使用目的和限制

您可以直接使用原始模型进行遮蔽语言建模或下一句预测,但它主要用于在下游任务上进行微调。在 模型库 中寻找您感兴趣的任务的微调版本。

请注意,此模型主要用于在使用整个句子(可能被遮蔽)进行决策的任务上进行微调,例如序列分类,标记分类或问答。对于文本生成等任务,您应该查看类似GPT2的模型。

如何使用

您可以使用此模型直接使用遮蔽语言建模流水线:

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='bert-base-multilingual-cased')
>>> unmasker("Hello I'm a [MASK] model.")

[{'sequence': "[CLS] Hello I'm a model model. [SEP]",
  'score': 0.10182085633277893,
  'token': 13192,
  'token_str': 'model'},
 {'sequence': "[CLS] Hello I'm a world model. [SEP]",
  'score': 0.052126359194517136,
  'token': 11356,
  'token_str': 'world'},
 {'sequence': "[CLS] Hello I'm a data model. [SEP]",
  'score': 0.048930276185274124,
  'token': 11165,
  'token_str': 'data'},
 {'sequence': "[CLS] Hello I'm a flight model. [SEP]",
  'score': 0.02036019042134285,
  'token': 23578,
  'token_str': 'flight'},
 {'sequence': "[CLS] Hello I'm a business model. [SEP]",
  'score': 0.020079681649804115,
  'token': 14155,
  'token_str': 'business'}]

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

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-multilingual-cased')
model = BertModel.from_pretrained("bert-base-multilingual-cased")
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-base-multilingual-cased')
model = TFBertModel.from_pretrained("bert-base-multilingual-cased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)

训练数据

BERT模型在具有最大维基百科的104种语言上进行了预训练。您可以在这里找到完整列表。

训练过程

预处理

文本以小写形式出现,并使用WordPiece和共享的110,000个词汇大小进行标记化。具有较大维基百科的语言会进行过采样,而资源较少的语言则进行过采样。对于无空格的中文、日本汉字和韩国汉字等语言,每个字符周围都添加了CJK Unicode块。

然后,模型的输入形式如下:

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

有50%的概率,句子A和句子B与原始语料库中的两个连续句子对应,在其他情况下,它是语料库中的另一个随机句子。请注意,这里被认为是一个句子的连续文本段通常比单个句子更长。唯一的限制是这两个“句子”的结果的长度总和小于512个令牌。

每个句子的遮蔽过程的详细信息如下:

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

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}
}