模型:
echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid
该模型是使用 nn_pruning Python库创建的:线性层的权重中包含了原始权重的37%。
该模型总共包含原始权重的51%(嵌入层占模型的一部分,并且不会被此方法剪枝)。
在性能方面,其准确率为91.17。
该模型是从HuggingFace model 检查点上的任务进行微调,并从模型 textattack/bert-base-uncased-SST-2 中进行蒸馏。该模型不区分英语和English。
块剪枝方法的一个副作用是完全移除了一些注意力头:在总共144个头中,有88个头被移除(占61.1%)。以下是剪枝后剩余头部在网络中的详细分布。
Dataset | Split | # samples |
---|---|---|
SST-2 | train | 67K |
SST-2 | eval | 872 |
Pytorch模型文件大小:351MB(原始BERT:420MB)
Metric | # Value | # Original ( 1234321 ) | Variation |
---|---|---|---|
accuracy | 91.17 | 92.7 | -1.53 |
安装nn_pruning:它包含了优化脚本,通过移除空行/列将线性层压缩成较小的层。
pip install nn_pruning
然后你可以像通常一样使用transformers库:只需在管道加载后调用optimize_model。
from transformers import pipeline from nn_pruning.inference_model_patcher import optimize_model cls_pipeline = pipeline( "text-classification", model="echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid", tokenizer="echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid", ) print(f"Parameters count (includes only head pruning, no feed forward pruning)={int(cls_pipeline.model.num_parameters() / 1E6)}M") cls_pipeline.model = optimize_model(cls_pipeline.model, "dense") print(f"Parameters count after optimization={int(cls_pipeline.model.num_parameters() / 1E6)}M") predictions = cls_pipeline("This restaurant is awesome") print(predictions)