language: zh
tags:
- exbert
license: apache-2.0
datasets:
- bookcorpus
- wikipedia
DistilBERT基础模型(无大小写区分)
该模型是BERT基础模型的蒸馏版本,相关论文详见此处。蒸馏过程代码可在该链接查看。本模型为无大小写区分版本:不区分"english"和"English"。
模型描述
DistilBERT是基于Transformer架构的模型,相较BERT更轻量高效。该模型通过自监督方式在与BERT相同的语料库上进行预训练,并以BERT基础模型作为教师模型。其预训练过程完全基于原始文本(无需人工标注),通过BERT基础模型自动生成输入和标签。具体包含三个训练目标:
- 蒸馏损失:模型学习复现教师模型的概率输出
- 掩码语言建模(MLM):随机掩蔽15%的输入词汇进行预测,建立双向语义表征
- 余弦嵌入损失:使隐藏状态尽可能接近教师模型
这使得模型在保持与教师模型相近的语言表征能力的同时,具有更快的推理速度。
使用场景与限制
建议在下游任务中进行微调使用,可访问模型中心寻找适合任务的微调版本。注意本模型适用于序列分类、标记分类或问答等需要整句理解的任务,文本生成任务建议使用GPT2等模型。
使用方法
掩码语言建模示例:
>>> from transformers import pipeline
>>> unmasker = pipeline('fill-mask', model='distilbert-base-uncased')
>>> unmasker("Hello I'm a [MASK] model.")
PyTorch特征提取:
from transformers import DistilBertTokenizer, DistilBertModel
tokenizer = DistilBertTokenizer.from_pretrained('distilbert-base-uncased')
model = DistilBertModel.from_pretrained("distilbert-base-uncased")
text = "输入任意文本"
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 = "输入任意文本"
encoded_input = tokenizer(text, return_tensors='tf')
output = model(encoded_input)
局限性及偏差
尽管训练数据相对中立,但模型仍可能存在预测偏差(继承自教师模型)。示例显示对不同人种的职业预测存在明显差异,这种偏差会影响所有微调版本。
训练数据
使用与BERT相同的预训练数据:
训练流程
预处理
- 文本小写化处理
- WordPiece分词(词表大小30,000)
- 输入格式为
[CLS]句子A[SEP]句子B[SEP]
- 50%概率使用连续句子,50%随机组合句子
- 掩码策略:
- 15%词汇被掩蔽
- 80%替换为[MASK]
- 10%替换为随机词
- 10%保持原词
预训练
评估结果
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 |
引用信息
@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}
}