EasyNLP ist ein umfassendes und benutzerfreundliches NLP-Toolkit
EasyNLP ist ein benutzerfreundliches NLP-Entwicklungs- und Anwendungs-Toolkit in Pytorch, das erstmals im Jahr 2021 in Alibaba veröffentlicht wurde. Es wurde mit skalierbaren verteilten Trainingsstrategien erstellt und unterstützt eine umfassende Suite von NLP-Algorithmen für verschiedene NLP-Anwendungen. EasyNLP integriert die Wissensdestillation und das Lernen von wenigen Schichten für die Landung großer vorgebildeter Modelle sowie verschiedene vorgeschriebene Multimodalitätsmodelle. Es bietet einen einheitlichen Rahmen für Modelltraining, Inferenz und Bereitstellung für reale Anwendungen. Es hat mehr als 10 Busse und mehr als 20 Geschäftsszenarien innerhalb der Alibaba -Gruppe betrieben. Es ist nahtlos in die Plattform von AI (PAI) -Produkten (PAI) integriert, einschließlich PAI-DSW für die Entwicklung, PAI-DLC für Cloud-native Schulungen, PAI-EAS für das Servieren und PAI-Designer für das Modell von Null-Code-Modell.
Wir haben eine Reihe von technischen Artikeln über die Funktionen von EasyNLP.
Sie können aus der Quelle einrichten:
$ git clone https://github.com/alibaba/EasyNLP.git
$ cd EasyNLP
$ python setup.py installDieses Repo wird auf Python 3.6, Pytorch> = 1,8 getestet.
Zeigen wir nun, wie Sie nur wenige Codezeilen verwenden, um ein auf Bert basierendes Textklassifizierungsmodell zu erstellen.
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 ()Das vollständige Beispiel finden Sie hier.
Sie können auch AppZoo -Befehlszeilen -Tools verwenden, um ein App -Modell schnell zu trainieren. Nehmen Sie als Beispiel die Textklassifizierung im SST-2-Datensatz. Zuerst können Sie den Train.tsv und Dev.tsv herunterladen und dann mit dem Training beginnen:
$ 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 'Und dann vorhersagen:
$ 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_classifyWeitere Informationen zur Verwendung von Appzoo finden Sie in unserer Dokumentation.
EasyNLP bietet derzeit die folgenden Modelle in Modelzoo:
In dieser Readme finden Sie die Verwendung dieser Modelle in EasyNLP. In der Zwischenzeit unterstützt EasyNLP beim Laden von vorbereiteten Modellen von Huggingface/Transformers. Weitere Informationen finden Sie in diesem Tutorial.
EasyNLP unterstützt auch verschiedene vorgeschriebene modalmodalische Modelle zur Unterstützung von Aufgaben, die visuelle Kenntnisse erfordern. Zum Beispiel ist es mit Modellen im Clip-Stil für Text-zu-im-Image-Matching- und Dalle-Modelle für die Erzeugung von Text-zu-Image-Stil ausgestattet.
EasyNLP bietet nur wenige Schüsse-Lern- und Wissensdestillationen, um große vorgebrachte Modelle zu landen.
EasyNLP bietet ein einfaches Toolkit zum Benchmark -Hinweisdatensätzen. Sie können einfach nur diesen Befehl verwenden, um den Datensatz des Hinweiss des Hinweises zu bewerten.
# Format: bash run_clue.sh device_id train/predict dataset
# e.g.:
bash run_clue.sh 0 train cslWir haben Chiese Bert und Roberta Models the Datasets getestet. Die Ergebnisse des Dev -Sets sind:
(1) Bert-Base-Chinese:
| Aufgabe | 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:
| Aufgabe | 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% |
Hier ist das detaillierte Hinweis -Benchmark -Beispiel.
Dieses Projekt ist unter der Apache -Lizenz (Version 2.0) lizenziert. Dieses Toolkit enthält auch einen Code, der aus anderen Repos unter anderen Open-Source-Lizenzen geändert wurde. Weitere Informationen finden Sie in der Mitteilungsdatei.
Scannen Sie die folgenden QR -Codes, um die Dingtalk -Diskussionsgruppe beizutragen. Die Gruppendiskussionen sind hauptsächlich in Chinesisch, aber auch Englisch wird begrüßt.
Wir haben ein Arxiv -Papier, das Sie für die EasyNLP -Bibliothek zitieren können:
@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}
}