EasyNLP es un kit de herramientas NLP integral y fácil de usar
EasyNLP es un kit de herramientas de desarrollo y desarrollo de PNL fácil de usar en Pytorch, lanzado por primera vez dentro de Alibaba en 2021. Está construido con estrategias de capacitación distribuidas escalables y admite un conjunto integral de algoritmos NLP para varias aplicaciones de PNLP. EasyNLP integra la destilación del conocimiento y el aprendizaje de pocos disparos para aterrizar grandes modelos previamente capacitados, junto con varios modelos previamente capacitados de modalidad popular. Proporciona un marco unificado de capacitación modelo, inferencia e implementación para aplicaciones del mundo real. Ha impulsado más de 10 autobuses y más de 20 escenarios comerciales dentro del Grupo Alibaba. Se integra perfectamente a la plataforma de productos AI (PAI), incluido PAI-DSW para el desarrollo, PAI-DLC para capacitación nativa de nube, PAI-Ehe para Serving y PAI-Designer para capacitación de modelos de código cero.
Tenemos una serie de artículos técnicos sobre las funcionalidades de EasyNLP.
Puede configurar desde la fuente:
$ git clone https://github.com/alibaba/EasyNLP.git
$ cd EasyNLP
$ python setup.py installEste repositorio se prueba en Python 3.6, Pytorch> = 1.8.
Ahora mostremos cómo usar solo unas pocas líneas de código para crear un modelo de clasificación de texto basado en 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 ()El ejemplo completo se puede encontrar aquí.
También puede usar herramientas de línea de comandos Appzoo para entrenar rápidamente un modelo de aplicación. Tome la clasificación de texto en el conjunto de datos SST-2 como ejemplo. Primero puede descargar el tren.tsv y dev.tsv, luego comenzar a entrenar:
$ 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 'Y luego predecir:
$ 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_classifyPara obtener más información sobre el uso de Appzoo, consulte nuestra documentación.
EasyNLP actualmente proporciona los siguientes modelos en Modelzoo:
Consulte este ReadMe para el uso de estos modelos en EasyNLP. Mientras tanto, EasyNLP admite cargar modelos previos a la aparición de Huggingface/Transformers, consulte este tutorial para más detalles.
EasyNLP también admite varios modelos previos a la modalidad popular para apoyar tareas en idioma de visión que requieren conocimiento visual. Por ejemplo, está equipado con modelos de estilo clip para modelos de coincidencia de imagen de texto y estilo Dalle para generación de texto a imagen.
EasyNLP proporciona un aprendizaje y destilación de conocimiento de pocos disparos para ayudar a conseguir grandes modelos previamente capacitados.
EasyNLP proporciona un conjunto de herramientas simple para referencia de conjuntos de datos de pista. Simplemente puede usar solo este comando para comparar el conjunto de datos de pista.
# Format: bash run_clue.sh device_id train/predict dataset
# e.g.:
bash run_clue.sh 0 train cslHemos probado Chiese Bert y Roberta Models en los conjuntos de datos, los resultados del conjunto de desarrollo son:
(1) Bert-Base-chines:
| Tarea | AFQMC | Cmnli | CSL | Iflytek | Ocnli | TNEWS | WSC |
|---|---|---|---|---|---|---|---|
| PAG | 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) China-Roberta-WWM-EXT:
| Tarea | AFQMC | Cmnli | CSL | Iflytek | Ocnli | TNEWS | WSC |
|---|---|---|---|---|---|---|---|
| PAG | 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% |
Aquí está el ejemplo de referencia detallado de pista.
Este proyecto tiene licencia bajo la licencia Apache (versión 2.0). Este kit de herramientas también contiene algún código modificado de otros Repos con otras licencias de código abierto. Consulte el archivo de notificación para obtener más información.
Escanee los siguientes códigos QR para unirse al grupo de discusión Dingtalk. Las discusiones grupales son principalmente en chino, pero el inglés también es bienvenido.
Tenemos un artículo ARXIV para que cite para la biblioteca 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}
}