项目介绍:TextPruner
TextPruner 是一个用于预训练语言模型的模型剪枝工具包。它提供了一种经济高效且无需训练的方法,通过去除冗余神经元来减少模型大小并加快模型推理速度。
项目特点
兼容性
TextPruner 兼容多种自然语言理解(NLU)预训练模型。无论模型是什么,只要是基于标准预训练模型构建的,TextPruner 都可以用于对模型进行剪枝以适应各种自然语言处理(NLP)任务。
易用性
TextPruner 可以作为一个包或者命令行工具(CLI)使用,无论哪种方式都非常简便。
高效性
TextPruner 以简单快速的方式减少模型大小。它使用结构化、不基于训练的方法进行模型剪枝,比蒸馏和其他涉及训练的剪枝方法要快得多。
支持的模型
TextPruner 当前支持多种预训练模型,包括 BERT、ALBERT、RoBERTa、ELECTRA 和 XLM-RoBERTa 等。对于部分模型,该工具还支持词汇表剪枝(Vocabulary Pruning),而不仅仅是 Transformer 剪枝。
安装方法
TextPruner 需要 Python 版本 3.7 及以上,及相应的 PyTorch、transformers 等包。用户可以通过 pip install textpruner
命令实现快速安装,或者从源码安装以获取最新版本。
剪枝模式
TextPruner 提供三种剪枝模式:
-
词汇表剪枝
移除预训练模型中在下游任务数据集中很少出现的标记,以减少模型大小并加速 Masked Language Model(MLM)预训练。 -
Transformer 剪枝
通过去除不重要的注意力头和 Feed-forward 网络的神经元,减少模型大小并尽量保持模型性能。 -
流水线剪枝
自动执行 Transformer 剪枝和词汇表剪枝,以完全减少模型大小。
使用指南
使用 TextPruner 时,用户可以在 Python 脚本中导入并调用相应的类和方法,也可以使用命令行工具 TextPruner-CLI。
对于词汇表剪枝,只需提供文本文件或字符串列表,工具会将没有出现在这些文本中的标记从模型和分词器中移除。对于 Transformer 剪枝,需提供一个数据集的数据加载器,工具会计算并去除不重要的神经元。
实验结果
在 Multilingual Natural Language Inference (NLI) 任务上,使用 TextPruner 对 XLM-RoBERTa-base 模型进行剪枝。实验表明,通过词汇表剪枝和 Transformer 剪枝,可以大幅削减模型大小,而对模型准确率影响较小,同时显著减少推理时间。
常见问题
TextPruner 目前不支持 Tensorflow 2。相比于知识蒸馏,结构化、无需训练的剪枝方法速度更快,但蒸馏通常能够提供更高的压缩率和性能。如果用户希望结合使用知识蒸馏,请参考 TextPruner 的姊妹项目 TextBrewer。
引用
如果您认为 TextPruner 对您的研究有帮助,请引用其相关论文。在我们的官方微信账号上,我们也提供了最新的技术更新。
TextPruner 是一个强大而易用的模型剪枝工具,适合研究人员和工程师在减少模型大小和加快推理速度的同时,尽可能保留模型的性能。