ONNX 模型库
返回模型

说明文档

BERT基础模型(未分词)

在英语语料上使用掩码语言建模(MLM)目标进行预训练的模型。该模型在本文中首次提出,并于此仓库中首次发布。此模型未分词:它不区分english和English。

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

模型描述

BERT是一个基于Transformer的预训练模型,在大量英语数据上以自监督方式进行预训练。这意味着它是在原始文本上进行预训练的,没有任何人工标注(这也是它能够使用大量公开数据的原因),使用自动流程从这些文本中生成输入和标签。更准确地说,它通过两个目标进行预训练:

  • 掩码语言建模(MLM):取一个句子,模型随机遮盖输入中15%的单词,然后将整个被遮盖的句子通过模型,让模型预测被遮盖的单词。这与传统的循环神经网络(RNN)不同,后者通常逐个查看单词,也不同于像GPT这样的自回归模型——它们在内部遮盖未来的token。这使得模型能够学习句子的双向表示。
  • 下一句预测(NSP):模型在预训练期间将两个被遮盖的句子连接作为输入。有时它们对应于原始文本中相邻的句子,有时则不是。然后模型需要预测这两个句子是否相邻。

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

模型变体

BERT最初发布了基础版和大型版本,分为分词和未分词输入文本。未分词模型还会去除重音符号。
中文和多语言未分词及分词版本随后不久发布。
在后续工作中,使用整词掩码的改进预处理取代了子词掩码,同时发布了两个模型。
之后又发布了其他24个更小的模型。

详细的发布历史可以在GitHub上的google-research/bert readme中找到。

模型 参数数量 语言
bert-base-uncased 110M 英语
bert-large-uncased 340M 英语
bert-base-cased 110M 英语
bert-large-cased 340M 英语
bert-base-chinese 110M 中文
bert-base-multilingual-cased 110M 多语言
bert-large-uncased-whole-word-masking 340M 英语
bert-large-cased-whole-word-masking 340M 英语

预期用途与限制

你可以将原始模型用于掩码语言建模或下一句预测,但它主要用于在下游任务上进行微调。查看模型市场以寻找你感兴趣任务的微调版本。

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

如何使用

你可以直接使用此模型和pipeline进行掩码语言建模:

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

[{'sequence': "[CLS] hello i'm a fashion model. [SEP]",
  'score': 0.1073106899857521,
  'token': 4827,
  'token_str': 'fashion'},
 {'sequence': "[CLS] hello i'm a role model. [SEP]",
  'score': 0.08774490654468536,
  'token': 2535,
  'token_str': 'role'},
 {'sequence': "[CLS] hello i'm a new model. [SEP]",
  'score': 0.05338378623127937,
  'token': 2047,
  'token_str': 'new'},
 {'sequence': "[CLS] hello i'm a super model. [SEP]",
  'score': 0.04667217284440994,
  'token': 3565,
  'token_str': 'super'},
 {'sequence': "[CLS] hello i'm a fine model. [SEP]",
  'score': 0.027095865458250046,
  'token': 2986,
  'token_str': 'fine'}]

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

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertModel.from_pretrained("bert-base-uncased")
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-uncased')
model = TFBertModel.from_pretrained("bert-base-uncased")
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-base-uncased')
>>> unmasker("The man worked as a [MASK].")

[{'sequence': '[CLS] the man worked as a carpenter. [SEP]',
  'score': 0.09747550636529922,
  'token': 10533,
  'token_str': 'carpenter'},
 {'sequence': '[CLS] the man worked as a waiter. [SEP]',
  'score': 0.0523831807076931,
  'token': 15610,
  'token_str': 'waiter'},
 {'sequence': '[CLS] the man worked as a barber. [SEP]',
  'score': 0.04962705448269844,
  'token': 13362,
  'token_str': 'barber'},
 {'sequence': '[CLS] the man worked as a mechanic. [SEP]',
  'score': 0.03788609802722931,
  'token': 15893,
  'token_str': 'mechanic'},
 {'sequence': '[CLS] the man worked as a salesman. [SEP]',
  'score': 0.037680890411138535,
  'token': 18968,
  'token_str': 'salesman'}]

>>> unmasker("The woman worked as a [MASK].")

[{'sequence': '[CLS] the woman worked as a nurse. [SEP]',
  'score': 0.21981462836265564,
  'token': 6821,
  'token_str': 'nurse'},
 {'sequence': '[CLS] the woman worked as a waitress. [SEP]',
  'score': 0.1597415804862976,
  'token': 13877,
  'token_str': 'waitress'},
 {'sequence': '[CLS] the woman worked as a maid. [SEP]',
  'score': 0.1154729500412941,
  'token': 10850,
  'token_str': 'maid'},
 {'sequence': '[CLS] the woman worked as a prostitute. [SEP]',
  'score': 0.037968918681144714,
  'token': 19215,
  'token_str': 'prostitute'},
 {'sequence': '[CLS] the woman worked as a cook. [SEP]',
  'score': 0.03042375110089779,
  'token': 5660,
  'token_str': 'cook'}]

这种偏见也会影响此模型的所有微调版本。

训练数据

BERT模型在BookCorpus(一个包含11,038本未出版书籍的数据集)和英文维基百科(不包括列表、表格和标题)上进行了预训练。

训练过程

预处理

文本被转换为小写并使用WordPiece进行分词,词汇量为30,000。模型的输入格式如下:

[CLS] 句子 A [SEP] 句子 B [SEP]

有50%的概率,句子A和句子B对应于原始语料库中连续的两个句子,在其他情况下,则是语料库中另一个随机句子。请注意,这里被视为句子的文本通常是比单个句子更长的连续文本片段。唯一的限制是这两个"句子"组合后的长度小于512个token。

每个句子的掩码程序细节如下:

  • 15%的token被掩码。
  • 80%的情况下,被掩码的token被替换为[MASK]
  • 10%的情况下,被掩码的token被替换为与原token不同的随机token。
  • 剩余10%的情况下,被掩码的token保持不变。

预训练

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

评估结果

在下游任务上进行微调后,该模型取得以下结果:

GLUE测试结果:

任务 MNLI-(m/mm) QQP QNLI SST-2 CoLA STS-B MRPC RTE 平均分
84.6/83.4 71.2 90.5 93.5 52.1 85.8 88.9 66.4 79.6

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

<a href="https://huggingface.co/exbert/?model=bert-base-uncased"> <img width="300px" src="https://cdn-media.huggingface.co/exbert/button.png"> </a>

google-bert/bert-base-uncased

作者 google-bert

fill-mask transformers
↓ 72.6M ♥ 2.6K

创建时间: 2022-03-02 23:29:04+00:00

更新时间: 2024-02-19 11:06:12+00:00

在 Hugging Face 上查看

文件 (16)

.gitattributes
LICENSE
README.md
config.json
coreml/fill-mask/float32_model.mlpackage/Data/com.apple.CoreML/model.mlmodel
coreml/fill-mask/float32_model.mlpackage/Data/com.apple.CoreML/weights/weight.bin
coreml/fill-mask/float32_model.mlpackage/Manifest.json
flax_model.msgpack
model.onnx ONNX
model.safetensors
pytorch_model.bin
rust_model.ot
tf_model.h5
tokenizer.json
tokenizer_config.json
vocab.txt