Nouvelle version
Nous avons publié une formation contradictoire pour la pré-entraînement / finetuning LM et la divergence F.
Formation contradictoire à grande échelle pour LMS: code d'alun.
Modèle de réseau de neurones hybrides pour le raisonnement de bon sens: code HNN
Si vous souhaitez utiliser l'ancienne version, veuillez utiliser CMD suivant pour cloner le code:
git clone -b v0.1 https://github.com/namisan/mt-dnn.git
Mise à jour
Nous regrettons de vous informer que le changement de politique, il ne fournit plus de stockage public pour le partage de modèles. Nous travaillons dur pour trouver une solution.
Ce package Pytorch implémente les réseaux de neurones profonds multi-tâches (MT-DNN) pour la compréhension du langage naturel, comme décrit dans:
Xiaodong Liu *, Pengcheng He *, Weizhu Chen et Jianfeng Gao
Réseaux de neurones profonds multi-tâches pour la compréhension du langage naturel
ACL 2019
*: Contribution égale
Xiaodong Liu, Pengcheng HE, Weizhu Chen et Jianfeng Gao
Amélioration des réseaux de neurones profonds multi-tâches via la distillation des connaissances pour la compréhension du langage naturel
version arxiv
Liyuan Liu, Haoming Jiang, Pengcheng HE, Weizhu Chen, Xiaodong Liu, Jianfeng Gao et Jiawei Han
Sur la variance du taux d'apprentissage adaptatif et au-delà
ICLR 2020
Haoming Jiang, Pengcheng He, Weizhu Chen, Xiaodong Liu, Jianfeng Gao et Tuo Zhao
Smart: un réglage fin robuste et efficace pour les modèles de langage naturel pré-formées grâce à une optimisation régulière de principe
ACL 2020
Xiaodong Liu, Yu Wang, Jianshu Ji, Hao Cheng, Xueyun Zhu, Emmanuel Awa, Pengcheng He, Weizhu Chen, Hoifung Poon, Guihong Cao, Jianfeng Gao
La boîte à outils Microsoft des réseaux de neurones profonds multi-tâches pour la compréhension du langage naturel
ACL 2020
Hao Cheng et Xiaodong Liu et Lis Pereira et Yaoliang Yu et Jianfeng Gao
Régie différentielle postérieure avec divergence F pour améliorer la robustesse du modèle
NAACL 2021
python3.6
Référence au téléchargement et à l'installation: https://www.python.org/downloads/release/python-360/
Installer les exigences
> pip install -r requirements.txt
Tirer Docker
> docker pull allenlao/pytorch-mt-dnn:v1.3
Exécuter Docker
> docker run -it --rm --runtime nvidia allenlao/pytorch-mt-dnn:v1.3 bash
Veuillez vous référer au lien suivant si vous utilisez d'abord Docker: https://docs.docker.com/
Télécharger les données
> sh download.sh
Veuillez vous référer à Télécharger Glue DataSet: https://gluebenchmark.com/
Données de prétraitement
> sh experiments/glue/prepro.sh
Entraînement
> python train.py
Notez que nous avons effectué des expériences sur 4 GPU V100 pour les modèles MT-DNN de base. Vous devrez peut-être réduire la taille du lot pour les autres GPU.
Raffinement MTL: affiner MT-DNN (couches partagées), initialisé avec le modèle BERT pré-formé, via MTL en utilisant toutes les tâches de colle excluant WNLI pour apprendre une nouvelle représentation partagée.
Notez que nous avons exécuté cette expérience sur 8 GPU V100 (32G) avec une taille de lot de 32.
>scriptsrun_mt_dnn.sh Finetuning: Finetune MT-DNN à chacune des tâches de colle pour obtenir des modèles spécifiques à la tâche.
Ici, nous fournissons deux exemples, STS-B et RTE. Vous pouvez utiliser des scripts similaires pour Finetune toutes les tâches de colle.
> scriptsrun_stsb.sh> scriptsrun_rte.sh Adaptation du domaine sur Scitail
>scriptsscitail_domain_adaptation_bash.sh
Adaptation du domaine sur SNLI
>scriptssnli_domain_adaptation_bash.sh
Données de prétraitement
a) Télécharger les données NER sur les données / NER, y compris: {Train / Valid / Test} .txt
b) Convertir les données NER au format canonique: > python experimentsnerprepro.py --data dataner --output_dir datacanonical_data
C) Prétrange des données canoniques au format MT-DNN: > python prepro_std.py --root_dir datacanonical_data --task_def experimentsnerner_task_def.yml --model bert-base-uncased
Entraînement
> 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
Données de prétraitement
a) Télécharger les données de l'escouade sur les données / l'escouade, y compris: {Train / Valid} .txt, puis modifier le nom du fichier en: {squad_train / squad_dev} .json
B) Convertir les données au format MT-DNN: > python experimentssquadsquad_prepro.py --root_dir datacanonical_data --task_def experimentssquadsquad_task_def.yml --model bert-base-uncased
Entraînement
> python train.py --data_dir <data-path> --init_checkpoint <bert-model> --train_dataset ner --test_dataset ner --task_def experimentsnerner_task_def.yml
Adv Training aux étapes finales: > 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
Extraction des intérêts d'un exemple de texte de paire
>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
Notez que la paire de texte est divisée par un jeton spécial ||| . Vous pouvez référer input_examplespair-output.json comme exemple.
Extraction des intégres d'un exemple de phrase à une seule phrase
>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
Accumulation de gradient
Si vous avez de petits GPU, vous devrez peut-être utiliser l'accumulation de gradient pour rendre la formation stable.
Par exemple, si vous utilisez l'indicateur: --grad_accumulation_step 4 Pendant la formation, la taille réelle du lot sera batch_size * 4 .
FP16 La version actuelle de MT-DNN prend également en charge la formation FP16 et veuillez installer Apex.
Il vous suffit d'allumer le drapeau pendant la formation: --fp16
Veuillez référer le script: scriptsrun_mt_dnn_gc_fp16.sh
Ici, nous traversons comment convertir un modèle chinois Tensorflow Bert au format MT-DNN.
Téléchargez le modèle Bert sur le Web Google Bert: https://github.com/google-research/bert
Exécutez le script suivant pour le format 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
Oui, nous avons publié les intérêts partagés pré-entraînés via MTL qui sont alignés sur les modèles de base / grands Bert: mt_dnn_base.pt et mt_dnn_large.pt .
Pour obtenir les modèles similaires:
>sh scriptsrun_mt_dnn.sh , puis choisissez le meilleur point de contrôle en fonction de la préformance de développement moyenne de MNLI / RTE.scritpsstrip_model.py .Pour les tâches Scitail / SNLI, le but est de tester la généralisation de l'intégration apprise et la facilité avec laquelle il est adapté à un nouveau domaine au lieu de structures de modèle compliquées pour une comparaison directe avec Bert. Ainsi, nous utilisons une projection linéaire sur les paramètres d'adaptation du domaine ALL.
La différence réside dans l'ensemble de données QNLI. Veuillez arbitrer la page d'accueil officielle de la colle pour plus de détails. Si vous souhaitez formuler QNLI comme tâche de classement par paire comme article, assurez-vous d'utiliser les anciennes données QNLI.
Ensuite, exécutez le script prépro avec des drapeaux: > sh experiments/glue/prepro.sh --old_glue
Si vous avez des problèmes pour accéder à l'ancienne version des données, veuillez contacter l'équipe de colle.
Nous pouvons utiliser le modèle de raffinement multi-tâches pour exécuter la prédiction et produire un résultat raisonnable. Mais pour obtenir un meilleur résultat, cela nécessite une amende sur chaque tâche. Il est de Worthing, notant que le papier dans Arxiv est un ensemble éteint et sur l'ancien ensemble de données de colle. Nous mettrons à jour le document comme nous l'avons mentionné ci-dessous.
Bert Pytorch est de: https://github.com/huggingface/pytorch-pretraind-bert
Bert: https://github.com/google-research/bert
Nous avons également utilisé du code de: 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",
}
Pour obtenir de l'aide ou des problèmes à l'aide de MT-DNN, veuillez soumettre un problème 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] ).