EasyNLP est une boîte à outils NLP complète et facile à utiliser
EasyNLP est une boîte à outils de développement et d'application de PNL facile à utiliser dans Pytorch, publiée pour la première fois à l'intérieur d'Alibaba en 2021. Il est construit avec des stratégies de formation distribuées évolutives et prend en charge une suite complète d'algorithmes PNL pour diverses applications PNL. EasyNLP intègre la distillation des connaissances et l'apprentissage à quelques coups pour l'atterrissage de grands modèles pré-formés, ainsi que divers modèles multimodalités populaires. Il fournit un cadre unifié de formation, d'inférence et de déploiement des modèles pour les applications du monde réel. Il a propulsé plus de 10 bus et plus de 20 scénarios commerciaux au sein du groupe Alibaba. Il est parfaitement intégré à la plate-forme des produits AI (PAI), y compris PAI-DSW pour le développement, PAI-DLC pour la formation native du cloud, PAI-ES pour le service et le concepteur PAI pour une formation de modèle à code zéro.
Nous avons une série d'articles techniques sur les fonctionnalités de EasyNLP.
Vous pouvez configurer à partir de la source :
$ git clone https://github.com/alibaba/EasyNLP.git
$ cd EasyNLP
$ python setup.py installCe repo est testé sur Python 3.6, pytorch> = 1,8.
Maintenant, montrons comment utiliser quelques lignes de code pour créer un modèle de classification de texte basé sur Bert.
from easynlp . appzoo import ClassificationDataset
from easynlp . appzoo import get_application_model , get_application_evaluator
from easynlp . core import Trainer
from easynlp . utils import initialize_easynlp , get_args
from easynlp . utils . global_vars import parse_user_defined_parameters
from easynlp . utils import get_pretrain_model_path
initialize_easynlp ()
args = get_args ()
user_defined_parameters = parse_user_defined_parameters ( args . user_defined_parameters )
pretrained_model_name_or_path = get_pretrain_model_path ( user_defined_parameters . get ( 'pretrain_model_name_or_path' , None ))
train_dataset = ClassificationDataset (
pretrained_model_name_or_path = pretrained_model_name_or_path ,
data_file = args . tables . split ( "," )[ 0 ],
max_seq_length = args . sequence_length ,
input_schema = args . input_schema ,
first_sequence = args . first_sequence ,
second_sequence = args . second_sequence ,
label_name = args . label_name ,
label_enumerate_values = args . label_enumerate_values ,
user_defined_parameters = user_defined_parameters ,
is_training = True )
valid_dataset = ClassificationDataset (
pretrained_model_name_or_path = pretrained_model_name_or_path ,
data_file = args . tables . split ( "," )[ - 1 ],
max_seq_length = args . sequence_length ,
input_schema = args . input_schema ,
first_sequence = args . first_sequence ,
second_sequence = args . second_sequence ,
label_name = args . label_name ,
label_enumerate_values = args . label_enumerate_values ,
user_defined_parameters = user_defined_parameters ,
is_training = False )
model = get_application_model ( app_name = args . app_name ,
pretrained_model_name_or_path = pretrained_model_name_or_path ,
num_labels = len ( valid_dataset . label_enumerate_values ),
user_defined_parameters = user_defined_parameters )
trainer = Trainer ( model = model , train_dataset = train_dataset , user_defined_parameters = user_defined_parameters ,
evaluator = get_application_evaluator ( app_name = args . app_name , valid_dataset = valid_dataset , user_defined_parameters = user_defined_parameters ,
eval_batch_size = args . micro_batch_size ))
trainer . train ()L'exemple complet peut être trouvé ici.
Vous pouvez également utiliser des outils de ligne de commande Appzoo pour former rapidement un modèle d'application. Prenez une classification du texte sur l'ensemble de données SST-2 à titre d'exemple. Vous pouvez d'abord télécharger le train.tsv et dev.tsv, puis commencer la formation:
$ easynlp
--mode=train
--worker_gpu=1
--tables=train.tsv,dev.tsv
--input_schema=label:str:1,sid1:str:1,sid2:str:1,sent1:str:1,sent2:str:1
--first_sequence=sent1
--label_name=label
--label_enumerate_values=0,1
--checkpoint_dir=./classification_model
--epoch_num=1
--sequence_length=128
--app_name=text_classify
--user_defined_parameters= ' pretrain_model_name_or_path=bert-small-uncased 'Et puis prédire:
$ easynlp
--mode=predict
--tables=dev.tsv
--outputs=dev.pred.tsv
--input_schema=label:str:1,sid1:str:1,sid2:str:1,sent1:str:1,sent2:str:1
--output_schema=predictions,probabilities,logits,output
--append_cols=label
--first_sequence=sent1
--checkpoint_path=./classification_model
--app_name=text_classifyPour en savoir plus sur l'utilisation d'Appzoo, veuillez vous référer à notre documentation.
EasyNLP fournit actuellement les modèles suivants dans ModelZoo:
Veuillez vous référer à cette lecture pour l'utilisation de ces modèles dans EasyNLP. Pendant ce temps, EasyNLP prend en charge les modèles pré-étendus de HuggingFace / Transformers, veuillez vous référer à ce tutoriel pour plus de détails.
EasyNLP prend également en charge divers modèles multimodalités populaires prélevés pour prendre en charge les tâches de langue visuelle qui nécessitent des connaissances visuelles. Par exemple, il est équipé de modèles de style clip pour la correspondance d'image texte et les modèles de style Dalle pour la génération de texte à l'image.
EasyNLP fournit une distillation d'apprentissage et de connaissances à quelques coups pour aider à décrocher de grands modèles pré-formés.
EasyNLP fournit une boîte à outils simple pour benchmark Clue DataSets. Vous pouvez simplement utiliser simplement cette commande pour analyser l'ensemble de données d'indices.
# Format: bash run_clue.sh device_id train/predict dataset
# e.g.:
bash run_clue.sh 0 train cslNous avons testé Chiese Bert et Roberta Modelson les ensembles de données, les résultats de Dev Set sont:
(1) Bert-Base-Chinese:
| Tâche | Afqmc | Cmnli | CSL | Iflytek | Ocnli | Tnews | WSC |
|---|---|---|---|---|---|---|---|
| P | 72,17% | 75,74% | 80,93% | 60,22% | 78,31% | 57,52% | 75,33% |
| F1 | 52,96% | 75,74% | 81,71% | 60,22% | 78,30% | 57,52% | 80,82% |
(2) Chinese-Roberta-WWM-Ext:
| Tâche | Afqmc | Cmnli | CSL | Iflytek | Ocnli | Tnews | WSC |
|---|---|---|---|---|---|---|---|
| P | 73,10% | 80,75% | 80,07% | 60,98% | 80,75% | 57,93% | 86,84% |
| F1 | 56,04% | 80,75% | 81,50% | 60,98% | 80,75% | 57,93% | 89,58% |
Voici l'exemple détaillé d'indice d'indice.
Ce projet est concédé sous licence Apache (version 2.0). Cette boîte à outils contient également un code modifié à partir d'autres reposs sous d'autres licences open source. Voir le fichier d'avis pour plus d'informations.
Scannez les codes QR suivants pour rejoindre le groupe de discussion Dingtalk. Les discussions de groupe sont principalement en chinois, mais l'anglais est également accueilli.
Nous avons un papier arxiv pour vous citer pour la bibliothèque EasyNLP:
@article{easynlp,
doi = {10.48550/ARXIV.2205.00258},
url = {https://arxiv.org/abs/2205.00258},
author = {Wang, Chengyu and Qiu, Minghui and Zhang, Taolin and Liu, Tingting and Li, Lei and Wang, Jianing and Wang, Ming and Huang, Jun and Lin, Wei},
title = {EasyNLP: A Comprehensive and Easy-to-use Toolkit for Natural Language Processing},
publisher = {arXiv},
year = {2022}
}