Novo lançamento
Lançamos o treinamento adversário para o LM pré-treinamento/finetuning e a Divergência F.
Treinamento adversário em larga escala para LMS: código de alum.
Modelo de rede neural híbrida para raciocínio de senso comum: código HNN
Se você deseja usar a versão antiga, use a seguinte CMD para clonar o código:
git clone -b v0.1 https://github.com/namisan/mt-dnn.git
Atualizar
Lamentamos informá -lo de que, devido à mudança de política, ela não fornece mais um armazenamento público para compartilhamento de modelos. Estamos trabalhando duro para encontrar uma solução.
Este pacote Pytorch implementa as redes neurais profundas de várias tarefas (MT-DNN) para o entendimento da linguagem natural, conforme descrito em:
Xiaodong Liu*, Pengcheng He*, Weizhu Chen e Jianfeng Gao
Redes neurais profundas de várias tarefas para compreensão da linguagem natural
ACL 2019
*: Contribuição igual
Xiaodong Liu, Pengcheng He, Weizhu Chen e Jianfeng Gao
Melhorando redes neurais profundas de várias tarefas via destilação de conhecimento para compreensão da linguagem natural
versão arxiv
Liyuan Liu, Haoming Jiang, Pengcheng He, Weizhu Chen, Xiaodong Liu, Jianfeng Gao e Jiawei Han
Sobre a variação da taxa de aprendizado adaptável e além
ICLR 2020
Haoming Jiang, Pengcheng He, Weizhu Chen, Xiaodong Liu, Jianfeng Gao e Tuo Zhao
Inteligente: ajuste fino robusto e eficiente para modelos de linguagem natural pré-treinados por meio de otimização regularizada de princípios
ACL 2020
Xiaodong Liu, Yu Wang, Jianshu JI, Hao Cheng, Xueyun Zhu, Emmanuel Awa, Pengcheng He, Weizhu Chen, Hoifung Poon, Guihong Cao, Jianfeng Gao
O kit de ferramentas do Microsoft de redes neurais profundas de várias tarefas para compreensão da linguagem natural
ACL 2020
Hao Cheng e Xiaodong Liu e Lis Pereira e Yaoliang Yu e Jianfeng Gao
Regularização diferencial posterior com divergência de F para melhorar a robustez do modelo
NAACL 2021
Python3.6
Referência para download e instalação: https://www.python.org/downloads/release/python-360/
Instale requisitos
> pip install -r requirements.txt
Puxe o Docker
> docker pull allenlao/pytorch-mt-dnn:v1.3
Run Docker
> docker run -it --rm --runtime nvidia allenlao/pytorch-mt-dnn:v1.3 bash
Consulte o link a seguir se você usar primeiro o docker: https://docs.docker.com/
Baixar dados
> sh download.sh
Consulte o download do conjunto de dados de cola: https://gluebenchmark.com/
Dados de pré -processo
> sh experiments/glue/prepro.sh
Treinamento
> python train.py
Observe que executamos experimentos em 4 GPUs de 4 V100 para os modelos Base MT-DNN. Pode ser necessário reduzir o tamanho do lote para outras GPUs.
Refinamento MTL: refine o MT-DNN (camadas compartilhadas), inicializado com o modelo BERT pré-treinado, via MTL usando todas as tarefas de cola excluindo o WNLI para aprender uma nova representação compartilhada.
Observe que executamos esse experimento em 8 GPUs V100 (32G) com um tamanho de lotes de 32.
>scriptsrun_mt_dnn.sh Finetuning: Finetune MT-DNN para cada uma das tarefas de cola para obter modelos específicos de tarefas.
Aqui, fornecemos dois exemplos, STS-B e RTE. Você pode usar scripts semelhantes para FineTune todas as tarefas de cola.
> scriptsrun_stsb.sh> scriptsrun_rte.sh Adaptação de domínio no Scitail
>scriptsscitail_domain_adaptation_bash.sh
Adaptação de domínio no SNLI
>scriptssnli_domain_adaptation_bash.sh
Dados de pré -processo
a) Faça o download dos dados nerds para dados/nerds, incluindo: {Train/Valid/Test} .txt
b) Converter dados nerds no formato canônico: > python experimentsnerprepro.py --data dataner --output_dir datacanonical_data
c) Pré-processo os dados canônicos para o formato MT-DNN: > python prepro_std.py --root_dir datacanonical_data --task_def experimentsnerner_task_def.yml --model bert-base-uncased
Treinamento
> python train.py --data_dir <data-path> --init_checkpoint <bert-base-uncased> --train_dataset squad,squad-v2 --test_dataset squad,squad-v2 --task_def experimentssquadsquad_task_def.yml
Dados de pré -processo
a) Download de dados do esquadrão para dados/esquadrão, incluindo: {Train/Valid} .txt e depois altere o nome do arquivo para: {squad_train/squad_dev} .json
b) Converta dados para o formato mt-dnn: > python experimentssquadsquad_prepro.py --root_dir datacanonical_data --task_def experimentssquadsquad_task_def.yml --model bert-base-uncased
Treinamento
> python train.py --data_dir <data-path> --init_checkpoint <bert-model> --train_dataset ner --test_dataset ner --task_def experimentsnerner_task_def.yml
Treinamento ADV nos estágios de ajuste fino: > python train.py --data_dir <data-path> --init_checkpoint <bert/mt-dnn-model> --train_dataset mnli --test_dataset mnli_matched,mnli_mismatched --task_def experimentsglueglue_task_def.yml --adv_train --adv_opt 1
Extraindo incorporações de um exemplo de texto de par
>python extractor.py --do_lower_case --finput input_examplespair-input.txt --foutput input_examplespair-output.json --bert_model bert-base-uncased --checkpoint mt_dnn_modelsmt_dnn_base.pt
Observe que o par de texto é dividido por um token especial ||| . Você pode consultar input_examplespair-output.json como exemplo.
Extraindo incorporações de um único exemplo de frase
>python extractor.py --do_lower_case --finput input_examplessingle-input.txt --foutput input_examplessingle-output.json --bert_model bert-base-uncased --checkpoint mt_dnn_modelsmt_dnn_base.pt
Acumulação de gradiente
Se você possui GPUs pequenas, pode ser necessário usar o acúmulo de gradiente para tornar o treinamento estável.
Por exemplo, se você usar o sinalizador: --grad_accumulation_step 4 durante o treinamento, o tamanho real do lote será batch_size * 4 .
FP16 A versão atual do MT-DNN também suporta treinamento FP16 e instale o APEX.
Você só precisa ligar a bandeira durante o treinamento: --fp16
Consulte o script: scriptsrun_mt_dnn_gc_fp16.sh
Aqui, passamos por como converter um modelo chinês de tensorflow bert em formato MT-DNN.
Baixe o modelo Bert do Google Bert Web: https://github.com/google-research/bert
Execute o seguinte script para o formato MT-DNN
python scriptsconvert_tf_to_pt.py --tf_checkpoint_root chinese_L-12_H-768_A-12 --pytorch_checkpoint_path chinese_L-12_H-768_A-12bert_base_chinese.pt
Sim, lançamos as incorporações compartilhadas pré -tenhadas via MTL que estão alinhadas aos modelos BERT BASE/LAME: mt_dnn_base.pt e mt_dnn_large.pt .
Para obter os modelos semelhantes:
>sh scriptsrun_mt_dnn.sh e escolha o melhor ponto de verificação com base na pré -forma média do dev do MNLI/RTE.scritpsstrip_model.py .Para tarefas Scitail/SNLI, o objetivo é testar a generalização da incorporação aprendida e como é fácil adaptar -se a um novo domínio em vez de estruturas de modelos complicadas para uma comparação direta com o BERT. Assim, usamos uma projeção linear nas configurações de adaptação de todos os domínios .
A diferença está no conjunto de dados QNLI. Arrede a página inicial oficial da cola para obter mais detalhes. Se você deseja formular o QNLI como uma tarefa de classificação em pares como nosso artigo, certifique-se de usar os dados antigos do QNLI.
Em seguida, execute o script pré -prove com sinalizadores: > sh experiments/glue/prepro.sh --old_glue
Se você tiver problemas para acessar a versão antiga dos dados, entre em contato com a equipe de cola.
Podemos usar o modelo de refinamento com várias tarefas para executar a previsão e produzir um resultado razoável. Mas, para obter um resultado melhor, requer um ajuste fino em cada tarefa. É Worthing, observando que o papel em Arxiv é um conjunto de dados de cola antigo. Atualizaremos o artigo como mencionamos abaixo.
Bert Pytorch é de: https://github.com/huggingface/pytorch-pretring-bert
Bert: https://github.com/google-research/bert
Também usamos algum código em: https://github.com/kevinduh/san_mrc
@inproceedings{liu2019mt-dnn,
title = "Multi-Task Deep Neural Networks for Natural Language Understanding",
author = "Liu, Xiaodong and He, Pengcheng and Chen, Weizhu and Gao, Jianfeng",
booktitle = "Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics",
year = "2019",
publisher = "Association for Computational Linguistics",
url = "https://www.aclweb.org/anthology/P19-1441",
pages = "4487--4496"
}
@article{liu2019mt-dnn-kd,
title={Improving Multi-Task Deep Neural Networks via Knowledge Distillation for Natural Language Understanding},
author={Liu, Xiaodong and He, Pengcheng and Chen, Weizhu and Gao, Jianfeng},
journal={arXiv preprint arXiv:1904.09482},
year={2019}
}
@inproceedings{liu2019radam,
title={On the Variance of the Adaptive Learning Rate and Beyond},
author={Liu, Liyuan and Jiang, Haoming and He, Pengcheng and Chen, Weizhu and Liu, Xiaodong and Gao, Jianfeng and Han, Jiawei},
booktitle={International Conference on Learning Representations},
year={2020}
}
@inproceedings{jiang2019smart,
title={SMART: Robust and Efficient Fine-Tuning for Pre-trained Natural Language Models through Principled Regularized Optimization},
author={Jiang, Haoming and He, Pengcheng and Chen, Weizhu and Liu, Xiaodong and Gao, Jianfeng and Zhao, Tuo},
booktitle = "Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics",
year={2020}
}
@article{liu2020mtmtdnn,
title={The Microsoft Toolkit of Multi-Task Deep Neural Networks for Natural Language Understanding},
author={Liu, Xiaodong and Wang, Yu and Ji, Jianshu and Cheng, Hao and Zhu, Xueyun and Awa, Emmanuel and He, Pengcheng and Chen, Weizhu and Poon, Hoifung and Cao, Guihong and Jianfeng Gao},
journal={arXiv preprint arXiv:2002.07972},
year={2020}
}
@inproceedings{liu2020mtmtdnn,
title = "The {M}icrosoft Toolkit of Multi-Task Deep Neural Networks for Natural Language Understanding",
author={Liu, Xiaodong and Wang, Yu and Ji, Jianshu and Cheng, Hao and Zhu, Xueyun and Awa, Emmanuel and He, Pengcheng and Chen, Weizhu and Poon, Hoifung and Cao, Guihong and Jianfeng Gao},
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2020.acl-demos.16",
year = "2020"
}
@article{cheng2020posterior,
title={Posterior Differential Regularization with f-divergence for Improving Model Robustness},
author={Cheng, Hao and Liu, Xiaodong and Pereira, Lis and Yu, Yaoliang and Gao, Jianfeng},
booktitle = "Proceedings of the 2021 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies",
year = "2021",
publisher = "Association for Computational Linguistics",
url = "https://aclanthology.org/2021.naacl-main.85",
doi = "10.18653/v1/2021.naacl-main.85",
}
Para obter ajuda ou problemas usando o MT-DNN, envie um problema do GitHub.
For personal communication related to this package, please contact Xiaodong Liu ( [email protected] ), Yu Wang ( [email protected] ), Pengcheng He ( [email protected] ), Weizhu Chen ( [email protected] ), Jianshu Ji ( [email protected] ), Hao Cheng ( [email protected] ) ou jianfeng gao ( [email protected] ).