
仅使用一个bash命令,可以从拥抱表集线器上的每个蒙版语言模型中创建蒸馏模型。
特征:
首先,克隆项目并安装依赖项。
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txt在本教程中,我们将向您展示如何从命令行设置蒸馏任务。您需要两件事:
bert-base-uncased模型。我们将使用Europarl语料库的英语部分。这是由专业口译员和翻译人员创建的欧洲法庭的非常高质量的平行语料库。如今的语言语料库也很小,只有114 MB,但是对于我们的蒸馏教程来说还可以。
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz现在,数据已解开并存储在文件en.txt中。
现在我们有了数据,我们可以开始培训。下载教师模型将自动发生,因此无需手动执行此操作。如果您觉得这需要太长时间,而您只想尝试培训,例如以获得时间安排,则可以添加--limit_train_batches N 。这将每个时期限制为训练期间的N批次。
python universal_distillation/distillation.py
--batch_size 8
--gpus 1
--max_epochs 3
--save_dir my_distilled_model/
--teacher bert-base-uncased
--data en.txt一旦您运行该命令,后台就会发生一些事情。首先,该图书馆创建了一个学生和一个教师模型。老师是bert-base-uncased ,学生将使用与老师相同的体系结构,只有头的数量较小:6而不是12。当然,您可以将不同的和较大的老师与较小的学生搭配,但表现会有很大差异。
其次,HuggingFace库下载了教师模型和Tokenizer。第三,数据集是从磁盘加载的,并使用令牌仪初始化,请注意令牌化本身默认情况下发生。最后,蒸馏循环开始。
最后,您可以将模型与HuggingFace库一起使用!来自学生的所有文件(Pytorch模型和令牌)都保存在我们之前定义的文件夹中: my_distilled_model/ 。您可以直接从此文件夹中导入模型,并仅使用3行测试蒙版的语言建模任务:
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )尽管这是一个严格的例子,但这通常足以创建您自己的域名模型。在这种情况下,是
您还可以使用伪透明度进行内在评估。您需要指定老师和蒸馏模型,但是如果您只运行评估,则可以为两个参数提供目标模型。
python universal_distillation/evaluation.py
--gpus=0
--limit_test_batches=500
--teacher=pdelobelle/robbert-v2-dutch-base
--data=data/oscar_dutch/nl_dedup_part_2.txt
--checkpoint=DTAI-KULeuven/robbertje-39-gb-non-shuffled该代码库也用于我们的ECML-PKDD 2022纸,在其中我们将语言模型的知识蒸馏与公平的约束结合在一起。我们在本文中测试的约束是性别代词的宽阔替代,但该代码支持任何单次替代。可以通过定义要均衡的标志来添加这些蒸馏过程。例如, he和she拥有2016年和2002年的令牌IDS,因此我们可以与两个令牌定义替代对。两个令牌上的概率都得到了均衡。
您可以通过修改universal-distillation/distillation.py围绕第90行添加令牌。在创建BaseTransformer模型时,请不要忘记还包括约束。
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))