Ce repo contient des recettes de bout en bout pour prétraiter et finertune le modèle de représentation de la langue Bert (Bidirectional Encoder Représentations de Transformers) à l'aide du service d'apprentissage automatique Azure.
Mise à jour du 7/7/2020 :? Une mise en œuvre plus récente pour Bert Pretoring disponible sur https://github.com/microsoft/onnxruntime-training-examples/tree/master/nvidia-bert est beaucoup plus rapide que la mise en œuvre de ce repos. Cette implémentation utilise l'exécution d'ONNX pour accélérer la formation et peut être utilisée dans des environnements avec GPU, y compris Azure Machine Learning Service. Les détails de l'utilisation de l'ONNX Runtime pour la formation et l'accélération de la formation de modèles de transformateurs comme Bert et GPT-2 sont disponibles dans le blog de l'ONNX Runtime Training Technical Dive.
Bert est un modèle de représentation linguistique qui se distingue par sa capacité à capturer efficacement des relations textuelles profondes et subtiles dans un corpus. Dans l'article original, les auteurs démontrent que le modèle Bert pourrait être facilement adapté pour créer des modèles de pointe pour un certain nombre de tâches PNL, y compris la classification du texte, la reconnaissance des entités nommée et la réponse aux questions. Dans ce dépôt, nous fournissons des cahiers qui permettent à un développeur de présager un modèle Bert à partir de zéro sur un corpus, ainsi que pour affiner un modèle Bert existant pour résoudre une tâche spécialisée. Une brève introduction à Bert est disponible dans ce dépôt pour un démarrage rapide sur Bert.
La pré-formation d'un modèle de représentation de la langue Bert au niveau de précision souhaité est assez difficile; En conséquence, la plupart des développeurs commencent à partir d'un modèle Bert qui a été formé sur un corpus standard (comme Wikipedia), au lieu de l'entraîner à partir de zéro. Cette stratégie fonctionne bien si le modèle final est formé sur un corpus similaire au corpus utilisé à l'étape pré-trains; Cependant, si le problème implique un corpus spécialisé très différent du corpus standard, les résultats ne seront pas optimaux. De plus, pour faire progresser la représentation du langage au-delà de la précision de Bert, les utilisateurs devront modifier l'architecture du modèle, les données de formation, la fonction de coût, les tâches et les routines d'optimisation. Tous ces changements doivent être explorés à grande taille des paramètres et des données de formation. Dans le cas de Bert-Garg, cela pourrait être assez substantiel car il a 340 millions de paramètres et formé sur un très grand corpus de document. Pour soutenir cela avec des GPU, les ingénieurs d'apprentissage automatique auront besoin d'un support de formation distribué pour former ces grands modèles. Cependant, en raison de la complexité et de la fragilité de la configuration de ces environnements distribués, même les ajustements d'experts peuvent se retrouver avec des résultats inférieurs des modèles formés.
Pour résoudre ces problèmes, ce repo publie un workflow pour pré-formation des modèles Bert-Large. Les développeurs peuvent désormais créer leurs propres modèles de représentation linguistique comme Bert en utilisant leurs données spécifiques au domaine sur les GPU, soit avec leur propre matériel, soit en utilisant un service d'apprentissage automatique Azure. La recette Pretrain dans ce dépôt comprend l'ensemble de données et les scripts de prétraitement afin que tout le monde puisse expérimenter la construction de ses propres modèles de représentation du langage à usage général au-delà de Bert. Dans l'ensemble, il s'agit d'une recette stable et prévisible qui converge vers un bon optimum pour les chercheurs pour essayer les explorations par eux-mêmes.
La recette de pré-formation dans ce dépôt est basée sur le paquet Bert V0.6.2 pré-Torch de Pytorch de la face de l'étreinte. La mise en œuvre de cette recette de pré-formation comprend des techniques d'optimisation telles que gradient accumulation (les gradients sont accumulés pour des mini-lots plus petits avant de mettre à jour les poids du modèle) et mixed precision training . Les modules de carnet et de python pour la pré-formation sont disponibles dans le répertoire Pretrain.
La préparation des données est l'une des étapes importantes de tout projet d'apprentissage automatique. Pour Bert pré-entraînement, un corpus au niveau du document est nécessaire. La qualité des données utilisées pour la pré-formation a un impact direct sur la qualité des modèles formés. Pour faciliter le prétraitement des données et pour la répétabilité des résultats, le code de prétraitement des données est inclus dans le repo. Il peut être utilisé pour prétraiter le corpus Wikipedia ou d'autres ensembles de données pour la pré-formation. Reportez-vous à des informations supplémentaires lors de la préparation des données pour pré-formation pour plus de détails à ce sujet.
La recette de finetuning dans ce repo montre comment Finetune le modèle de représentation de la langue Bert à l'aide du service d'apprentissage automatique Azure. Les ordinateurs portables et les modules Python pour Finetuning sont disponibles au répertoire FineTune. Nous finettune et évaluons nos points de contrôle pré-entraînés par rapport aux éléments suivants:
La référence d'évaluation générale de la compréhension du langage (GLUE) est une collection de neuf tâches de compréhension du langage des phrases ou des phrases pour évaluer et analyser les systèmes de compréhension du langage naturel. Le cahier Jupyter Bert_eval_Glue.Ipynb permet à l'utilisateur d'exécuter l'un des points de contrôle pré-entraînés par rapport à ces tâches sur Azure ML.
Azure Machine Learning Service fournit un environnement basé sur le cloud pour préparer des données, former, tester, déployer, gérer et suivre les modèles d'apprentissage automatique. Ce service prend en charge les technologies open-source telles que Pytorch, TensorFlow et Scikit-Learn et peut être utilisée pour tout type d'apprentissage automatique, de la ML classique à l'apprentissage en profondeur, à l'apprentissage supervisé et non supervisé.
Les cahiers Jupyter peuvent être utilisés pour utiliser Azureml Python SDK et soumettre des travaux prétraités et finetune. Ce dépôt contient les cahiers suivants pour différentes activités.
| Activité | Carnet de notes |
|---|---|
| Présager | Bert_pretrain.ipynb |
| Glue finetune / évaluer | Bert_eval_glue.ipynb |
| Activité | Carnet de notes |
|---|---|
| Glue finetune / évaluer | Tensorflow-bert-azureml.ipynb |
Ce projet a adopté le code de conduite open source Microsoft. Pour plus d'informations, consultez le code de conduite FAQ ou contactez [email protected] avec toute question ou commentaire supplémentaire.