Bifurcação de https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/language-modeling em 2021.05.17.
Ajustando (ou treinando do zero) os modelos de biblioteca para modelagem de linguagem em um conjunto de dados de texto para GPT, GPT-2, ALBERT, BERT, DistilBERT, RoBERTa, XLNet... GPT e GPT-2 são treinados ou ajustados usando uma perda de modelagem de linguagem causal (CLM), enquanto ALBERT, BERT, DistilBERT e RoBERTa são treinados ou ajustados usando uma perda de modelagem de linguagem mascarada (MLM). XLNet usa modelagem de linguagem de permutação (PLM). Você pode encontrar mais informações sobre as diferenças entre esses objetivos em nosso resumo do modelo.
Existem dois conjuntos de scripts fornecidos. O primeiro conjunto aproveita a API Trainer. O segundo conjunto com no_trainer
no sufixo usa um loop de treinamento personalizado e aproveita o ? Acelere a biblioteca. Ambos os conjuntos usam o ? Biblioteca de conjuntos de dados. Você pode personalizá-los facilmente de acordo com suas necessidades se precisar de processamento extra em seus conjuntos de dados.
Nota: O script antigo run_language_modeling.py
ainda está disponível aqui.
Os exemplos a seguir serão executados em conjuntos de dados hospedados em nosso hub ou com seus próprios arquivos de texto para treinamento e validação. Damos exemplos de ambos abaixo.
O exemplo a seguir ajusta o GPT-2 no WikiText-2. Estamos usando o WikiText-2 bruto (nenhum token foi substituído antes da tokenização). A perda aqui é a da modelagem de linguagem 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
O treinamento em uma única GPU K80 leva cerca de meia hora e cerca de um minuto para a avaliação ser executada. Ele atinge uma pontuação de aproximadamente 20 perplexidade depois de ajustado no conjunto de dados.
Para executar seus próprios arquivos de treinamento e validação, use o seguinte 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
Isso usa o HuggingFace Trainer
integrado para treinamento. Se quiser usar um loop de treinamento personalizado, você pode utilizar ou adaptar o script run_clm_no_trainer.py
. Dê uma olhada no script para obter uma lista de argumentos suportados. Um exemplo é mostrado abaixo:
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
O exemplo a seguir ajusta RoBERTa no WikiText-2. Aqui também estamos usando o WikiText-2 bruto. A perda é diferente porque o BERT/RoBERTa possui um mecanismo bidirecional; estamos, portanto, usando a mesma perda que foi usada durante o pré-treinamento: modelagem de linguagem mascarada.
De acordo com o artigo RoBERTa, usamos mascaramento dinâmico em vez de mascaramento estático. O modelo pode, portanto, convergir um pouco mais lentamente (o sobreajuste leva mais é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 executar seus próprios arquivos de treinamento e validação, use o seguinte 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
Se o seu conjunto de dados estiver organizado com uma amostra por linha, você pode usar o sinalizador --line_by_line
(caso contrário, o script concatena todos os textos e os divide em blocos do mesmo comprimento).
Isso usa o HuggingFace Trainer
integrado para treinamento. Se quiser usar um loop de treinamento personalizado, você pode utilizar ou adaptar o script run_mlm_no_trainer.py
. Dê uma olhada no script para obter uma lista de argumentos suportados. Um exemplo é mostrado abaixo:
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: Na TPU, você deve usar o sinalizador --pad_to_max_length
em conjunto com o sinalizador --line_by_line
para garantir que todos os seus lotes tenham o mesmo comprimento.
Esta parte foi movida para examples/research_projects/mlm_wwm
.
XLNet usa um objetivo de treinamento diferente, que é a modelagem de linguagem de permutação. É um método autorregressivo para aprender contextos bidirecionais, maximizando a probabilidade esperada sobre todas as permutações da ordem de fatoração da sequência de entrada.
Usamos o sinalizador --plm_probability
para definir a proporção entre o comprimento de uma extensão de tokens mascarados e o comprimento do contexto circundante para modelagem de linguagem de permutação.
O sinalizador --max_span_length
também pode ser usado para limitar o comprimento de um intervalo de tokens mascarados usados para modelagem de linguagem de permutação.
Veja como ajustar o XLNet no 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 ajustá-lo em seu próprio arquivo de treinamento e validação, execute:
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
Se o seu conjunto de dados estiver organizado com uma amostra por linha, você pode usar o sinalizador --line_by_line
(caso contrário, o script concatena todos os textos e os divide em blocos do mesmo comprimento).
Nota: Na TPU, você deve usar o sinalizador --pad_to_max_length
em conjunto com o sinalizador --line_by_line
para garantir que todos os seus lotes tenham o mesmo comprimento.