模型简介
模型特点
模型能力
使用案例
🚀 DistilBERT基础模型(无大小写区分)
DistilBERT基础模型(无大小写区分)是BERT基础模型的蒸馏版本,它在相同语料库上以自监督方式进行预训练,速度更快且体积更小,可用于掩码语言建模、下一句预测等任务,也适合在下游任务中进行微调。
🚀 快速开始
你可以直接使用此模型进行掩码语言建模,也可以将其用于下游任务的微调。以下是使用该模型进行掩码语言建模的示例代码:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='distilbert-base-uncased')
>>> unmasker("Hello I'm a [MASK] model.")
[{'sequence': "[CLS] hello i'm a role model. [SEP]",
'score': 0.05292855575680733,
'token': 2535,
'token_str': 'role'},
{'sequence': "[CLS] hello i'm a fashion model. [SEP]",
'score': 0.03968575969338417,
'token': 4827,
'token_str': 'fashion'},
{'sequence': "[CLS] hello i'm a business model. [SEP]",
'score': 0.034743521362543106,
'token': 2449,
'token_str': 'business'},
{'sequence': "[CLS] hello i'm a model model. [SEP]",
'score': 0.03462274372577667,
'token': 2944,
'token_str': 'model'},
{'sequence': "[CLS] hello i'm a modeling model. [SEP]",
'score': 0.018145186826586723,
'token': 11643,
'token_str': 'modeling'}]
✨ 主要特性
- 体积小、速度快:DistilBERT是一个比BERT更小、更快的Transformer模型。
- 自监督预训练:在相同语料库上以自监督方式进行预训练,使用BERT基础模型作为教师模型。
- 学习双向表示:通过掩码语言建模(MLM)任务,模型可以学习句子的双向表示。
- 多任务适用性:可用于掩码语言建模、下一句预测等任务,也适合在下游任务中进行微调。
📦 安装指南
你可以使用transformers
库来使用这个模型,安装命令如下:
pip install transformers
💻 使用示例
基础用法
以下是使用该模型进行掩码语言建模的示例代码:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='distilbert-base-uncased')
>>> unmasker("Hello I'm a [MASK] model.")
[{'sequence': "[CLS] hello i'm a role model. [SEP]",
'score': 0.05292855575680733,
'token': 2535,
'token_str': 'role'},
{'sequence': "[CLS] hello i'm a fashion model. [SEP]",
'score': 0.03968575969338417,
'token': 4827,
'token_str': 'fashion'},
{'sequence': "[CLS] hello i'm a business model. [SEP]",
'score': 0.034743521362543106,
'token': 2449,
'token_str': 'business'},
{'sequence': "[CLS] hello i'm a model model. [SEP]",
'score': 0.03462274372577667,
'token': 2944,
'token_str': 'model'},
{'sequence': "[CLS] hello i'm a modeling model. [SEP]",
'score': 0.018145186826586723,
'token': 11643,
'token_str': 'modeling'}]
高级用法
以下是使用该模型获取给定文本特征的示例代码,分别展示了在PyTorch和TensorFlow中的使用方法:
PyTorch
from transformers import DistilBertTokenizer, DistilBertModel
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
model = DistilBertModel.from_pretrained("distilbert-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 DistilBertTokenizer, TFDistilBertModel
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
model = TFDistilBertModel.from_pretrained("distilbert-base-uncased")
text = "Replace me by any text you'd like."
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
📚 详细文档
预期用途和限制
你可以使用原始模型进行掩码语言建模或下一句预测,但它主要用于在下游任务中进行微调。你可以在模型中心查找针对你感兴趣的任务进行微调的版本。
需要注意的是,该模型主要旨在针对使用整个句子(可能经过掩码处理)进行决策的任务进行微调,例如序列分类、标记分类或问答任务。对于文本生成等任务,你应该考虑使用像GPT2这样的模型。
局限性和偏差
即使该模型使用的训练数据可以被描述为相当中立,但该模型的预测仍可能存在偏差。它还继承了其教师模型的一些偏差。这种偏差也会影响该模型的所有微调版本。
训练数据
DistilBERT在与BERT相同的数据上进行预训练,这些数据包括BookCorpus(一个由11,038本未出版书籍组成的数据集)和英文维基百科(不包括列表、表格和标题)。
训练过程
预处理
文本先转换为小写,然后使用WordPiece进行分词,词汇表大小为30,000。模型的输入形式如下:
[CLS] Sentence A [SEP] Sentence B [SEP]
有50%的概率,句子A和句子B对应原始语料库中的两个连续句子,在其他情况下,句子B是语料库中的另一个随机句子。这里的“句子”通常是指比单个句子更长的连续文本片段。唯一的限制是两个“句子”组合后的长度小于512个标记。
每个句子的掩码处理细节如下:
- 15%的标记被掩码。
- 在80%的情况下,被掩码的标记被替换为
[MASK]
。 - 在10%的情况下,被掩码的标记被替换为一个与它们不同的随机标记。
- 在剩下的10%的情况下,被掩码的标记保持不变。
预训练
该模型在8个16GB的V100 GPU上训练了90小时。有关所有超参数的详细信息,请参阅训练代码。
评估结果
在下游任务上进行微调时,该模型取得了以下结果:
Glue测试结果:
任务 | MNLI | QQP | QNLI | SST - 2 | CoLA | STS - B | MRPC | RTE |
---|---|---|---|---|---|---|---|---|
82.2 | 88.5 | 89.2 | 91.3 | 51.3 | 85.8 | 87.5 | 59.9 |
🔧 技术细节
DistilBERT是一个Transformer模型,它比BERT更小、更快,并且在相同的语料库上以自监督方式进行预训练,使用BERT基础模型作为教师模型。具体来说,它在预训练时具有三个目标:
- 蒸馏损失:训练模型以返回与BERT基础模型相同的概率。
- 掩码语言建模(MLM):这是BERT基础模型原始训练损失的一部分。在处理句子时,模型会随机掩码输入中15%的单词,然后将整个掩码后的句子输入模型,并预测被掩码的单词。这与传统的循环神经网络(RNN)不同,RNN通常逐个处理单词,也与像GPT这样的自回归模型不同,GPT会在内部掩码未来的标记。这种方式允许模型学习句子的双向表示。
- 余弦嵌入损失:训练模型生成与BERT基础模型尽可能接近的隐藏状态。
通过这种方式,模型学习到与教师模型相同的英语语言内部表示,同时在推理或下游任务中速度更快。
📄 许可证
本项目采用Apache 2.0许可证。
BibTeX引用
@article{Sanh2019DistilBERTAD,
title={DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter},
author={Victor Sanh and Lysandre Debut and Julien Chaumond and Thomas Wolf},
journal={ArXiv},
year={2019},
volume={abs/1910.01108}
}




