El tutorial se dio el 2 de junio en NAACL 2019 en Minneapolis, MN, EE. UU. Por Sebastian Ruder, Matthew Peters, Swabha Swayamdipta y Thomas Wolf.
Aquí está la página web de tutoriales NAACL para obtener más información.
Las diapositivas para el tutorial se pueden encontrar aquí: https://tinyurl.com/naacltransfer.
Aquí se puede encontrar un cuaderno de Google Colab con todo el código para el tutorial: https://tinyurl.com/naacltransfercolab.
También se puede acceder al presente repositorio con la siguiente URL corta: https://tinyurl.com/naacltransfercode
El clásico paradigma de aprendizaje automático supervisado se basa en el aprendizaje de forma aislada, un modelo predictivo único para una tarea que utiliza un solo conjunto de datos. Este enfoque requiere una gran cantidad de ejemplos de entrenamiento y se desempeña mejor para tareas bien definidas y estrechas. El aprendizaje de transferencia se refiere a un conjunto de métodos que extienden este enfoque aprovechando datos de dominios o tareas adicionales para capacitar a un modelo con mejores propiedades de generalización.
En los últimos dos años, el campo del procesamiento del lenguaje natural (PNL) ha sido testigo de la aparición de varios métodos y arquitecturas de aprendizaje de transferencia, lo que mejoró significativamente el estado del arte en una amplia gama de tareas de PNL.
Estas mejoras junto con la amplia disponibilidad y la facilidad de integración de estos métodos recuerdan los factores que llevaron al éxito de las incrustaciones de palabras previas a la detención y el prostrado de la imagen de Imagenet en la visión por parte
Presentaremos una descripción general de los métodos de aprendizaje de transferencia modernos en PNL, cómo los modelos se entrenan, qué información las representaciones que aprenden capturan y revisarán ejemplos y estudios de casos sobre cómo estos modelos pueden integrarse y adaptarse en las tareas de PNL de aguas abajo.
Esta base de código intenta presentarse de la manera más simple y compacta de algunas de las principales técnicas de aprendizaje de transferencia, que han surgido en los últimos años. El código en este repositorio no intenta ser de última generación. Sin embargo, se ha hecho un esfuerzo para lograr un rendimiento razonable y con algunas modificaciones para ser competitivos con el estado actual del arte.
Se ha hecho un esfuerzo especial para
Actualmente la base de código comprende:
pretraining_model.py : un modelo de transformador con una arquitectura similar a GPT-2 como el modelo básico de pretrada;pretraining_train.py : un script previo al ejercicio para entrenar este modelo con un objetivo de modelado de lenguaje en una selección de grandes conjuntos de datos (Wikitext-103, SimpleBooks-92) utilizando la capacitación distribuida si está disponible;finetuning_model.py : varias arquitecturas basadas en el modelo de transformador para el ajuste fino (con un cabezal de clasificación en la parte superior, con adaptadores);finetuning_train.py : un script ajustado para ajustar estas arquitecturas en una tarea de clasificación (IMDB). Para usar esta base de código, simplemente clone el repositorio de GitHub e instale los requisitos como este:
git clone https://github.com/huggingface/naacl_transfer_learning_tutorial
cd naacl_transfer_learning_tutorial
pip install -r requirements.txt Para pre-entrenado el transformador, ejecute el script pretraining_train.py así:
python ./pretraining_train.pyo utilizando capacitación distribuida como esta (para un servidor de 8 GPU):
python -m torch.distributed.launch --nproc_per_node 8 ./pretraining_train.pyEl script de pre-entrenamiento:
wikitext-103 para el pre-entrenamiento (predeterminado),./runs ,El envío previo a una perplejidad de validación de ~ 29 en Wikitext-103 tomará alrededor de 15 h en 8 GPU V100 (se puede detener antes). Si está interesado en SOTA, hay algunas razones por las que la perplejidad de la validación es un poco más alta que la perplejidad de transformador-XL equivalente (alrededor de 24). La razón principal es el uso de un vocabulario abierto (sub-palabras para bert tokenizer) en lugar de un vocabulario cerrado (vea esta publicación de blog de Sebastian Mielke para obtener alguna explicación)
Hay varias opciones de pre-entrenamiento disponibles, puede enumerarlas con:
python ./pretraining_train.py --help Para ajustar el transformador previamente capacitado, ejecute el script finetuning_train.py así:
python ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER PATH-TO-YOUR-PRETRAINED-MODEL-FOLDER puede ser, por ejemplo ./runs/May17_17-47-12_my_big_server
o utilizando capacitación distribuida como esta (para un servidor de 8 GPU):
python -m torch.distributed.launch --nproc_per_node 8 ./finetuning_train.py --model_checkpoint PATH-TO-YOUR-PRETRAINED-MODEL-FOLDERHay varias opciones de ajuste fino disponibles, puede enumerarlas con:
python ./finetuning_train.py --help