
Cree modelos destilados a partir de cada modelo de lenguaje enmascarado en el Hubgingface Hub con solo un comando Bash.
Características:
Primero, clone el proyecto e instale las dependencias.
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txtEn este tutorial, le mostraremos cómo configurar una tarea de destilación desde la línea de comandos. Necesitarás dos cosas:
bert-base-uncased .Usaremos la sección inglesa del Corpus Europarl. Este es un corpus paralelo de muy alta calidad del parlamento europeo creado por intérpretes y traductores profesionales. También es bastante pequeño para un corpus de idiomas hoy en día, solo 114 MB, pero para nuestro tutorial de destilación está bien.
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz Los datos ahora están descomprimidos y almacenados en el archivo en.txt .
Ahora tenemos los datos, podemos comenzar a entrenar. La descarga del modelo de maestro sucederá automáticamente, por lo que no es necesario hacerlo manualmente. Si siente que esto lleva demasiado tiempo y solo desea probar el entrenamiento, por ejemplo, para tener una sensación de horarios, puede agregar --limit_train_batches N . Esto limita cada época a N lotes durante el entrenamiento.
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 Hay algunas cosas que suceden en el fondo una vez que ejecuta ese comando. Primero, esta biblioteca crea un estudiante y un modelo de maestro. El maestro es bert-base-uncased y el alumno usará la misma arquitectura que el maestro de forma predeterminada, solo el número de cabezas es menor: 6 en lugar de 12. Dado que estamos entrenando en un dominio específico (Europarl), esto debería ser suficiente. Por supuesto, puede mezclar y combinar maestros diferentes y más grandes con estudiantes más pequeños, pero el rendimiento variará mucho.
En segundo lugar, la biblioteca Huggingface descarga el modelo de maestro y el tokenizer. En tercer lugar, el conjunto de datos se carga desde el disco y se inicializa con el tokenizador, observe que la tokenización en sí ocurre más tarde por defecto. Finalmente, comienza el bucle de destilación.
¡Finalmente, puede usar el modelo con la biblioteca Huggingface! Todos los archivos del estudiante (modelo pytorch y tokenizer) se guardan en la carpeta que definimos anteriormente: my_distilled_model/ . Puede importar el modelo desde esta carpeta directamente y probar la tarea de modelado de lenguaje enmascarado con solo 3 líneas:
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )Aunque este fue un ejemplo de estrecho, esto a menudo es suficiente para crear su propio modelo adaptado al dominio. En este caso, es
También puede ejecutar una evaluación intrínseca utilizando la pseudoplexidad. Debe especificar el maestro y el modelo destilado, pero si solo ejecuta la evaluación, puede dar el modelo objetivo para ambos argumentos.
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 Esta base de código también se usa para nuestro documento ECML-PKDD 2022, donde combinamos la destilación de conocimiento de los modelos de idiomas con restricciones de equidad. Las restricciones que probamos en el documento son la sustitución del estrecho de los pronombres de género, pero el código admite cualquier sustitución de solo token. Estos se pueden agregar al proceso de destilación definiendo qué tokens desea igualar. Por ejemplo, he y she tienen Token IDS 2016 y 2002, por lo que podemos definir un par de sustitución con ambos tokens. Las probabilidades sobre ambos tokens se igualan.
BaseTransformer agregar tokens modificando universal-distillation/distillation.py
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))