ONNX 模型库
返回模型

说明文档

BETELGEUSE BERT BASED UNCASED

row01

模型描述

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

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

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

模型变体

BERT 最初发布了 base 和 large 两个版本,分别针对大小写敏感和不敏感的输入文本。不区分大小写的模型还会去除重音符号。
中文和多语言的区分大小写及不区分大小写版本随后很快发布。
在后续工作中,使用整词遮盖(whole word masking)替代子词遮盖的改进预处理方法发布了两款模型。
随后又发布了其他 24 个较小的模型。

预期用途与限制

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

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

如何使用

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

>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='prithivMLmods/Betelgeuse-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('prithivMLmods/Betelgeuse-bert-base-uncased')
model = BertModel.from_pretrained("prithivMLmods/Betelgeuse-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('prithivMLmods/Betelgeuse-bert-base-uncased')
model = TFBertModel.from_pretrained("prithivMLmods/Betelgeuse-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='prithivMLmods/Betelgeuse-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'}]

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

训练数据

训练过程

预处理

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

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

句子 A 和句子 B 有 0.5 的概率对应于原始语料库中两个连续的句子,在其他情况下,则是语料库中的另一个随机句子。请注意,这里所谓的句子实际上是连续的文本片段,通常比单个句子更长。唯一的限制是两个"句子"的组合长度少于 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

prithivMLmods/Betelgeuse-bert-base-uncased-ONNX

作者 prithivMLmods

fill-mask transformers
↓ 0 ♥ 1

创建时间: 2025-01-26 21:21:53+00:00

更新时间: 2025-01-26 21:23:33+00:00

在 Hugging Face 上查看

文件 (17)

.gitattributes
README.md
config.json
generation_config.json
onnx/model.onnx ONNX
onnx/model_bnb4.onnx ONNX
onnx/model_fp16.onnx ONNX
onnx/model_int8.onnx ONNX
onnx/model_q4.onnx ONNX
onnx/model_q4f16.onnx ONNX
onnx/model_quantized.onnx ONNX
onnx/model_uint8.onnx ONNX
quantize_config.json
special_tokens_map.json
tokenizer.json
tokenizer_config.json
vocab.txt