🚀 BERT-base无大小写区分模型在SQuAD v1上的微调版本
本模型解决了在问答任务中模型效率和准确性平衡的问题,通过剪枝技术在保证一定准确率的情况下,显著提升了推理速度,为实际应用提供了更高效的解决方案。
🚀 快速开始
本模型使用 nn_pruning Python库创建,线性层包含原权重的 27.0%。
⚠️ 重要提示
此模型必须使用nn_pruning的 optimize_model
函数,因为它使用NoNorms而非LayerNorms,目前Transformers库不直接支持。
为加快推理速度,该模型使用ReLUs而非初始BERT网络中的GeLUs。这无需特殊处理,因为Transformers库支持此设置,并在模型配置中通过 "hidden_act": "relu"
条目标记。
模型整体包含原权重的 43.0%(嵌入层占模型的很大一部分,且此方法未对其进行剪枝)。
在评估中,通过简单调整线性矩阵大小,该模型的运行速度比bert-base-uncased快 1.96倍。这是因为剪枝方法生成了结构化矩阵,将鼠标悬停在下方的图上,可查看每个矩阵的非零/零部分。
在准确率方面,其F1值为 88.33,而bert-base-uncased的F1值为 88.5,F1值下降了 0.17。
✨ 主要特性
- 剪枝优化:通过剪枝技术减少模型参数,提高推理速度。
- 速度提升:在评估中比bert-base-uncased快1.96倍。
- 准确率保持:F1值与bert-base-uncased接近,仅下降0.17。
📦 安装指南
安装nn_pruning,其中包含优化脚本,该脚本通过移除空行/列将线性层打包成更小的层。
pip install nn_pruning
💻 使用示例
基础用法
from transformers import pipeline
from nn_pruning.inference_model_patcher import optimize_model
qa_pipeline = pipeline(
"question-answering",
model="madlag/bert-base-uncased-squadv1-x1.96-f88.3-d27-hybrid-filled-opt-v1",
tokenizer="madlag/bert-base-uncased-squadv1-x1.96-f88.3-d27-hybrid-filled-opt-v1"
)
print("bert-base-uncased parameters: 191.0M")
print(f"Parameters count (includes only head pruning, not feed forward pruning)={int(qa_pipeline.model.num_parameters() / 1E6)}M")
qa_pipeline.model = optimize_model(qa_pipeline.model, "dense")
print(f"Parameters count after complete optimization={int(qa_pipeline.model.num_parameters() / 1E6)}M")
predictions = qa_pipeline({
'context': "Frédéric François Chopin, born Fryderyk Franciszek Chopin (1 March 1810 – 17 October 1849), was a Polish composer and virtuoso pianist of the Romantic era who wrote primarily for solo piano.",
'question': "Who is Frederic Chopin?",
})
print("Predictions", predictions)
📚 详细文档
精细剪枝细节
本模型从HuggingFace的 model 检查点在 SQuAD1.1 上进行微调,并从模型 bert-large-uncased-whole-word-masking-finetuned-squad 进行蒸馏。
此模型不区分大小写,即对 "english" 和 "English" 无区别对待。
块剪枝的一个副作用是部分注意力头被完全移除,在总共144个注意力头中,有55个被移除(38.2%)。以下是剪枝后剩余注意力头在网络中的详细分布情况。
SQuAD1.1数据集详情
数据集 |
划分 |
样本数量 |
SQuAD1.1 |
训练集 |
90.6K |
SQuAD1.1 |
评估集 |
11.1k |
微调信息
CPU: Intel(R) Core(TM) i7-6700K CPU
内存: 64 GiB
GPU: 1 GeForce GTX 3090,显存24GiB
GPU驱动: 455.23.05,CUDA: 11.1
结果
Pytorch模型文件大小:374MB
(原始BERT:420MB
)
指标 |
值 |
原始值 (Table 2) |
变化 |
EM |
81.31 |
80.8 |
+0.51 |
F1 |
88.33 |
88.5 |
-0.17 |
📄 许可证
本项目采用MIT许可证。