模型:

echarlaix/bert-base-uncased-sst2-acc91.1-d37-hybrid

英文

bert-base-uncased模型在SST-2上的微调

该模型是使用 nn_pruning Python库创建的:线性层的权重中包含了原始权重的37%。

该模型总共包含原始权重的51%(嵌入层占模型的一部分,并且不会被此方法剪枝)。

在性能方面,其准确率为91.17。

微调剪枝细节

该模型是从HuggingFace model 检查点上的任务进行微调,并从模型 textattack/bert-base-uncased-SST-2 中进行蒸馏。该模型不区分英语和English。

块剪枝方法的一个副作用是完全移除了一些注意力头:在总共144个头中,有88个头被移除(占61.1%)。以下是剪枝后剩余头部在网络中的详细分布。

SST-2数据集的细节

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)