ONNX 模型库
返回模型

说明文档

bert-base-cased 的 ONNX 导出版本

基于英语语言使用掩码语言建模(MLM)目标进行预训练的模型。它首次在 这篇论文 中提出,并首次发布在 这个仓库。该模型区分大小写:它会区分 english 和 English 的不同。

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

模型描述

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

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

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

预期用途与限制

你可以直接使用原始模型进行掩码语言建模或下一句预测,但它主要用于 在下游任务上进行微调。请参阅 模型中心 查找 你感兴趣的任务上的微调版本。

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

如何使用

你可以直接使用流水线进行掩码语言建模:

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

[{'sequence': "[CLS] Hello I'm a fashion model. [SEP]",
  'score': 0.09019174426794052,
  'token': 4633,
  'token_str': 'fashion'},
 {'sequence': "[CLS] Hello I'm a new model. [SEP]",
  'score': 0.06349995732307434,
  'token': 1207,
  'token_str': 'new'},
 {'sequence': "[CLS] Hello I'm a male model. [SEP]",
  'score': 0.06228214129805565,
  'token': 2581,
  'token_str': 'male'},
 {'sequence': "[CLS] Hello I'm a professional model. [SEP]",
  'score': 0.0441727414727211,
  'token': 1848,
  'token_str': 'professional'},
 {'sequence': "[CLS] Hello I'm a super model. [SEP]",
  'score': 0.03326151892542839,
  'token': 7688,
  'token_str': 'super'}]

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

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

[{'sequence': '[CLS] The man worked as a lawyer. [SEP]',
  'score': 0.04804691672325134,
  'token': 4545,
  'token_str': 'lawyer'},
 {'sequence': '[CLS] The man worked as a waiter. [SEP]',
  'score': 0.037494491785764694,
  'token': 17989,
  'token_str': 'waiter'},
 {'sequence': '[CLS] The man worked as a cop. [SEP]',
  'score': 0.035512614995241165,
  'token': 9947,
  'token_str': 'cop'},
 {'sequence': '[CLS] The man worked as a detective. [SEP]',
  'score': 0.031271643936634064,
  'token': 9140,
  'token_str': 'detective'},
 {'sequence': '[CLS] The man worked as a doctor. [SEP]',
  'score': 0.027423162013292313,
  'token': 3995,
  'token_str': 'doctor'}]

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

[{'sequence': '[CLS] The woman worked as a nurse. [SEP]',
  'score': 0.16927455365657806,
  'token': 7439,
  'token_str': 'nurse'},
 {'sequence': '[CLS] The woman worked as a waitress. [SEP]',
  'score': 0.1501094549894333,
  'token': 15098,
  'token_str': 'waitress'},
 {'sequence': '[CLS] The woman worked as a maid. [SEP]',
  'score': 0.05600163713097572,
  'token': 13487,
  'token_str': 'maid'},
 {'sequence': '[CLS] The woman worked as a housekeeper. [SEP]',
  'score': 0.04838843643665314,
  'token': 26458,
  'token_str': 'housekeeper'},
 {'sequence': '[CLS] The woman worked as a cook. [SEP]',
  'score': 0.029980547726154327,
  'token': 9834,
  'token_str': 'cook'}]

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

训练数据

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

训练过程

预处理

文本使用 WordPiece 进行分词,词汇表大小为 30,000。模型的输入格式如下:

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

有 0.5 的概率,句子 A 和句子 B 对应于原始语料库中的两个连续句子,在 其他情况下,它是语料库中的另一个随机句子。请注意,这里所谓的句子是 通常比单个句子更长的连续文本片段。唯一的约束是两个"句子"的组合长度小于 512 个 token。

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

  • 15% 的 token 被掩盖。
  • 在 80% 的情况下,被掩盖的 token 被替换为 [MASK]。
  • 在 10% 的情况下,被掩盖的 token 被替换为一个随机 token(与被替换的 token 不同)。
  • 在剩余的 10% 情况下,被掩盖的 token 保持不变。

预训练

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

评估结果

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

Glue 测试结果:

Task MNLI-(m/mm) QQP QNLI SST-2 CoLA STS-B MRPC RTE Average
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-cased"> <img width="300px" src="https://cdn-media.huggingface.co/exbert/button.png"> </a>

UKP-SQuARE/bert-base-cased-onnx

作者 UKP-SQuARE

transformers
↓ 0 ♥ 0

创建时间: 2023-01-16 14:49:38+00:00

更新时间: 2023-01-16 14:52:09+00:00

在 Hugging Face 上查看

文件 (9)

.gitattributes
README.md
config.json
model.onnx ONNX
model_quant.onnx ONNX
special_tokens_map.json
tokenizer.json
tokenizer_config.json
vocab.txt