google-bert/bert-base-uncased
摘要
对BERT base uncased模型的描述,这是一个在英文文本上使用掩码语言模型和下一句预测进行预训练的语言模型,可在Hugging Face上获取。
查看缓存全文
缓存时间: 2026/09/02 17:46
google-bert/bert-base-uncased · Hugging Face
来源:https://huggingface.co/google-bert/bert-base-uncased 这是一个使用掩码语言模型(MLM)目标在英语语料上预训练的模型。它在本文(https://arxiv.org/abs/1810.04805)中被介绍,并首次发布于此代码库(https://github.com/google-research/bert)。该模型不区分大小写:它不区分“english”和“English”。
声明:发布BERT的团队并未为此模型编写模型卡片,因此此模型卡片由Hugging Face团队编写。
模型描述
BERT是一个在大规模英语数据语料库上以自监督方式预训练的transformers模型。这意味着它仅在原始文本上进行预训练,没有任何人工标注(因此可以使用大量公开可用数据),并通过一个自动化流程从这些文本生成输入和标签。具体来说,它使用两个目标进行预训练:
- 掩码语言模型(MLM):给定一个句子,模型随机遮盖输入中15%的单词,然后将整个带掩码的句子输入模型,要求预测被遮盖的单词。这与传统的循环神经网络(RNN)通常逐个查看单词的方式不同,也与像GPT这样的自回归模型(其内部会遮盖未来的token)不同。它使模型能够学习句子的双向表示。
- 下一句预测(NSP):在预训练期间,模型将两个带掩码的句子拼接作为输入。有时它们对应于原始文本中相邻的句子,有时则不然。然后模型需要预测这两个句子是否是连续的。
通过这种方式,模型学习了英语语言的内部表示,该表示可用于提取对下游任务有用的特征:例如,如果你有一个带标签的句子数据集,你可以使用BERT模型生成的特征作为输入来训练一个标准分类器。
模型变体
BERT最初以base和large版本发布,分别对应带大小写和不区分大小写的输入文本。不区分大小写的模型还会去除重音符号。中文和多语言版本(包括带大小写和不区分大小写)随后不久也发布了。在后续工作中,采用了改进的预处理方式(使用全词遮盖代替子词遮盖),并发布了两个模型。之后又发布了其他24个更小的模型。
详细的发布历史可以在GitHub上的google-research/bert自述文件(https://github.com/google-research/bert/blob/master/README.md)中找到。
预期用途与限制
您可以使用原始模型进行掩码语言建模或下一句预测,但其主要目的是在下游任务上进行微调。请查看模型中心(https://huggingface.co/models?filter=bert)以查找您感兴趣任务的微调版本。
请注意,此模型主要针对在使用整个句子(可能带掩码)进行决策的任务上进行微调,例如序列分类、token分类或问答。对于文本生成等任务,您应该查看像GPT2这样的模型。
使用方法
您可以直接通过管道使用此模型进行掩码语言建模:
>>> 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(https://yknzhu.wixsite.com/mbweb)和英语维基百科(https://en.wikipedia.org/wiki/English_Wikipedia)(不包括列表、表格和标题)上进行预训练。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保持不变。
预训练
模型在4个云端TPU Pod配置(总共16个TPU芯片)上训练了100万步,批大小为256。序列长度在90%的步骤中限制为128个token,在其余10%的步骤中为512。使用的优化器是Adam,学习率为1e-4,β1=0.9,β2=0.999,权重衰减为0.01,学习率在开始的10,000步进行预热,之后线性衰减。
评估结果
在下游任务上进行微调后,此模型取得了以下结果:
Glue测试结果:
| 任务 | 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}
}
相似文章
distilbert/distilbert-base-uncased
DistilBERT是BERT基础模型的蒸馏版本,更小更快,使用蒸馏损失、掩码语言建模和余弦嵌入损失进行训练。它旨在用于序列分类、标记分类和问答等任务的微调。
词与道:面向德国医学自然语言处理的领域特定BERT预训练策略
本文介绍了ChristBERT,一个基于RoBERTa的面向德国临床NLP的领域特定语言模型家族,并在医学命名实体识别和文本分类任务上评估了三种领域适应策略(继续预训练、从头预训练和词汇适应),取得了最先进的结果。
openai-community/gpt2
本页详细介绍了GPT-2,这是一个基于Transformer的语言模型,经过英语文本预训练用于文本生成,可在Hugging Face上获取,并附有使用说明和示例。
LiquidAI/LFM2.5-ColBERT-350M
LiquidAI 发布 LFM2.5-ColBERT-350M,这是一种后期交互多语言检索模型,同时还有一个密集双编码器变体,两者均基于 LFM2.5-350M-Base,支持 11 种语言,并设计为 RAG 管道的即插即用替代品。
m3BERT:一种现代、多语言、套娃式双向编码器
本文介绍了m3BERT,一种多语言双向编码器,采用新颖的预训练策略,联合优化跨Transformer层和多个嵌入维度的表示,使得单个模型能够适应不同的资源约束。在Bing-Click工业检索数据集上,它显著优于现有最优模型。