Bifurcación de https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/language-modeling en 2021.05.17.
Ajuste (o entrenamiento desde cero) de los modelos de biblioteca para modelado de lenguaje en un conjunto de datos de texto para GPT, GPT-2, ALBERT, BERT, DistilBERT, RoBERTa, XLNet... GPT y GPT-2 se entrenan o ajustan usando una pérdida de modelado de lenguaje causal (CLM), mientras que ALBERT, BERT, DistilBERT y RoBERTa se entrenan o ajustan utilizando una pérdida de modelado de lenguaje enmascarado (MLM). XLNet utiliza modelado de lenguaje de permutación (PLM). Puede encontrar más información sobre las diferencias entre esos objetivos en nuestro resumen de modelos.
Se proporcionan dos conjuntos de scripts. El primer conjunto aprovecha la API de Trainer. El segundo conjunto con no_trainer
en el sufijo utiliza un bucle de entrenamiento personalizado y aprovecha el? Acelerar biblioteca. Ambos conjuntos utilizan el? Biblioteca de conjuntos de datos. Puede personalizarlos fácilmente según sus necesidades si necesita procesamiento adicional en sus conjuntos de datos.
Nota: El antiguo script run_language_modeling.py
todavía está disponible aquí.
Los siguientes ejemplos se ejecutarán en conjuntos de datos alojados en nuestro centro o con sus propios archivos de texto para capacitación y validación. Damos ejemplos de ambos a continuación.
El siguiente ejemplo ajusta GPT-2 en WikiText-2. Estamos usando WikiText-2 sin formato (no se reemplazaron tokens antes de la tokenización). La pérdida aquí es la del modelado del lenguaje causal.
python run_clm.py
--model_name_or_path gpt2
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-clm
Esto lleva aproximadamente media hora para entrenar en una sola GPU K80 y aproximadamente un minuto para ejecutar la evaluación. Alcanza una puntuación de ~20 de perplejidad una vez que se ajusta el conjunto de datos.
Para ejecutar sus propios archivos de capacitación y validación, use el siguiente comando:
python run_clm.py
--model_name_or_path gpt2
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-clm
Esto utiliza el HuggingFace Trainer
integrado para el entrenamiento. Si desea utilizar un bucle de entrenamiento personalizado, puede utilizar o adaptar el script run_clm_no_trainer.py
. Eche un vistazo al script para obtener una lista de argumentos admitidos. A continuación se muestra un ejemplo:
python run_clm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path gpt2
--output_dir /tmp/test-clm
El siguiente ejemplo ajusta RoBERTa en WikiText-2. Aquí también utilizamos el WikiText-2 sin formato. La pérdida es diferente ya que BERT/RoBERTa tiene un mecanismo bidireccional; Por lo tanto, utilizamos la misma pérdida que se utilizó durante su entrenamiento previo: modelado de lenguaje enmascarado.
De acuerdo con el artículo de RoBERTa, utilizamos enmascaramiento dinámico en lugar de enmascaramiento estático. Por lo tanto, el modelo puede converger ligeramente más lentamente (el sobreajuste requiere más épocas).
python run_mlm.py
--model_name_or_path roberta-base
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-mlm
Para ejecutar sus propios archivos de capacitación y validación, use el siguiente comando:
python run_mlm.py
--model_name_or_path roberta-base
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-mlm
Si su conjunto de datos está organizado con una muestra por línea, puede usar la marca --line_by_line
(de lo contrario, el script concatena todos los textos y luego los divide en bloques de la misma longitud).
Esto utiliza el HuggingFace Trainer
integrado para el entrenamiento. Si desea utilizar un ciclo de entrenamiento personalizado, puede utilizar o adaptar el script run_mlm_no_trainer.py
. Eche un vistazo al script para obtener una lista de argumentos admitidos. A continuación se muestra un ejemplo:
python run_mlm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path roberta-base
--output_dir /tmp/test-mlm
Nota: En TPU, debe usar el indicador --pad_to_max_length
junto con el indicador --line_by_line
para asegurarse de que todos sus lotes tengan la misma longitud.
Esta parte se movió a examples/research_projects/mlm_wwm
.
XLNet utiliza un objetivo de entrenamiento diferente, que es el modelado de lenguajes de permutación. Es un método autorregresivo para aprender contextos bidireccionales maximizando la probabilidad esperada sobre todas las permutaciones del orden de factorización de la secuencia de entrada.
Usamos el indicador --plm_probability
para definir la relación entre la longitud de un tramo de tokens enmascarados y la longitud del contexto circundante para el modelado del lenguaje de permutación.
El indicador --max_span_length
también se puede utilizar para limitar la longitud de un intervalo de tokens enmascarados utilizados para el modelado del lenguaje de permutación.
Aquí se explica cómo ajustar XLNet en wikitext-2:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-plm
Para ajustarlo en su propio archivo de entrenamiento y validación, ejecute:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-plm
Si su conjunto de datos está organizado con una muestra por línea, puede usar la marca --line_by_line
(de lo contrario, el script concatena todos los textos y luego los divide en bloques de la misma longitud).
Nota: En TPU, debe usar el indicador --pad_to_max_length
junto con el indicador --line_by_line
para asegurarse de que todos sus lotes tengan la misma longitud.