Easynlp é um kit de ferramentas abrangente e fácil de usar
O EasyNLP é um kit de ferramentas de desenvolvimento e aplicativo de desenvolvimento de NLP fácil de usar em Pytorch, lançado pela primeira vez dentro do Alibaba em 2021. Ele é construído com estratégias de treinamento distribuídas escaláveis e suporta um conjunto abrangente de algoritmos de PNL para várias aplicações de PNL. A easyNLP integra a destilação do conhecimento e a aprendizagem de poucos tiros para atingir grandes modelos pré-treinados, juntamente com vários modelos pré-treinados de multi-modalidade populares. Ele fornece uma estrutura unificada de treinamento de modelos, inferência e implantação para aplicativos do mundo real. Ele alimentou mais de 10 ônibus e mais de 20 cenários de negócios no grupo Alibaba. É perfeitamente integrado à plataforma de produtos de IA (PAI), incluindo PAI-DSW para desenvolvimento, PAI-DLC para treinamento nativo em nuvem, PAI-EAS para servir e PAI-designer para treinamento de modelo de código zero.
Temos uma série de artigos técnicos sobre as funcionalidades do easynlp.
Você pode configurar a partir da fonte:
$ git clone https://github.com/alibaba/EasyNLP.git
$ cd EasyNLP
$ python setup.py installEste repositório é testado no Python 3.6, pytorch> = 1.8.
Agora, vamos mostrar como usar apenas algumas linhas de código para criar um modelo de classificação de texto com base no 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 ()O exemplo completo pode ser encontrado aqui.
Você também pode usar as ferramentas de linha de comando AppZoo para treinar rapidamente um modelo de aplicativo. Pegue a classificação de texto no conjunto de dados SST-2 como exemplo. Primeiro, você pode baixar o trem.tsv e o dev.tsv, depois comece a treinar:
$ 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 'E então preveja:
$ 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 saber mais sobre o uso do AppZoo, consulte nossa documentação.
Atualmente, a easyNLP fornece os seguintes modelos em ModelZoo:
Consulte este ReadMe para o uso desses modelos no EasyNLP. Enquanto isso, o EasyNLP suporta para carregar modelos pré -terenciados da HuggingFace/Transformers, consulte este tutorial para obter detalhes.
A easyNLP também suporta vários modelos pré-treinados de multi-modalidade populares para suportar tarefas de linguagem de visão que exigem conhecimento visual. Por exemplo, ele está equipado com modelos de estilo de clipes para correspondência de imagem de texto e modelos de estilo Dalle para geração de texto para imagem.
A EasyNLP fornece poucas arremessos e destilação de conhecimento para ajudar a atingir grandes modelos pré-treinados.
O easynlp fornece um kit de ferramentas simples para comparar conjuntos de dados de pistas. Você pode simplesmente usar apenas esse comando para comparar o conjunto de dados de pistas.
# Format: bash run_clue.sh device_id train/predict dataset
# e.g.:
bash run_clue.sh 0 train cslTestamos Chiese Bert e Roberta ModelsON nos conjuntos de dados, os resultados do conjunto de desenvolvedores são:
(1) Bert-Base-Chinese:
| Tarefa | 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) chinês-roberta-wwm-ext:
| Tarefa | 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% |
Aqui está o exemplo detalhado de referência da pista.
Este projeto está licenciado sob a licença Apache (versão 2.0). Este kit de ferramentas também contém algum código modificado de outros repositórios sob outras licenças de código aberto. Consulte o arquivo de aviso para obter mais informações.
Digitalize os seguintes códigos QR para ingressar no DingTalk Discussion Group. As discussões em grupo são principalmente em chinês, mas o inglês também é bem -vindo.
Temos um artigo ARXIV para você citar a 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}
}