EasyNLP adalah toolkit NLP yang komprehensif dan mudah digunakan
EasyNLP adalah alat pengembangan dan aplikasi NLP yang mudah digunakan di Pytorch, pertama kali dirilis di dalam Alibaba pada tahun 2021. Ini dibangun dengan strategi pelatihan terdistribusi yang dapat diskalakan dan mendukung rangkaian algoritma NLP yang komprehensif untuk berbagai aplikasi NLP. EasyNLP mengintegrasikan distilasi pengetahuan dan pembelajaran beberapa shot untuk mendaratkan model pra-terlatih besar, bersama dengan berbagai model pra-terlatih multi-modalitas yang populer. Ini memberikan kerangka kerja terpadu pelatihan model, inferensi, dan penyebaran untuk aplikasi dunia nyata. Ini telah memberi daya lebih dari 10 bus dan lebih dari 20 skenario bisnis dalam kelompok Alibaba. Ini diintegrasikan dengan mulus ke platform produk AI (PAI), termasuk Pai-DSW untuk pengembangan, PAI-DLC untuk pelatihan cloud-asli, PAI-EA untuk melayani, dan PAI-Designer untuk pelatihan model nol-kode.
Kami memiliki serangkaian artikel teknis tentang fungsi EasyNLP.
Anda dapat menyiapkan dari sumber :
$ git clone https://github.com/alibaba/EasyNLP.git
$ cd EasyNLP
$ python setup.py installRepo ini diuji pada Python 3.6, Pytorch> = 1.8.
Sekarang mari kita tunjukkan cara menggunakan hanya beberapa baris kode untuk membangun model klasifikasi teks berdasarkan 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 ()Contoh lengkap dapat ditemukan di sini.
Anda juga dapat menggunakan alat baris perintah AppZoo untuk melatih model aplikasi dengan cepat. Ambil klasifikasi teks pada dataset SST-2 sebagai contoh. Pertama, Anda dapat mengunduh train.tsv, dan dev.tsv, lalu mulai pelatihan:
$ 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 'Dan kemudian memprediksi:
$ 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_classifyUntuk mempelajari lebih lanjut tentang penggunaan Appzoo, silakan merujuk ke dokumentasi kami.
EasyNLP saat ini menyediakan model berikut di Modelzoo:
Silakan merujuk readme ini untuk penggunaan model -model ini di EasyNLP. Sementara itu, EasyNLP mendukung untuk memuat model pretrained dari Huggingface/Transformers, silakan merujuk ke tutorial ini untuk detailnya.
EasyNLP juga mendukung berbagai model pra-terlatih multi-modalitas populer untuk mendukung tugas-tugas bahasa penglihatan yang membutuhkan pengetahuan visual. Misalnya, ini dilengkapi dengan model gaya klip untuk pencocokan gambar-gambar dan model gaya Dalle untuk pembuatan teks-ke-gambar.
EasyNLP menyediakan beberapa shot pembelajaran dan distilasi pengetahuan untuk membantu mendaratkan model pra-terlatih yang besar.
EasyNLP menyediakan perangkat dataset Petunjuk Benchmark. Anda cukup menggunakan perintah ini untuk membandingkan dataset petunjuk.
# Format: bash run_clue.sh device_id train/predict dataset
# e.g.:
bash run_clue.sh 0 train cslKami telah menguji Chiese Bert dan Roberta Modelson The Datasets, hasil set dev adalah:
(1) Bert-Base-Chinese:
| Tugas | 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) China-Roberta-WWM-EXT:
| Tugas | 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% |
Berikut adalah contoh benchmark petunjuk terperinci.
Proyek ini dilisensikan di bawah lisensi Apache (versi 2.0). Toolkit ini juga berisi beberapa kode yang dimodifikasi dari repo lain di bawah lisensi open-source lainnya. Lihat file pemberitahuan untuk informasi lebih lanjut.
Pindai kode QR berikut untuk bergabung dengan grup diskusi DingTalk. Diskusi kelompok sebagian besar dalam bahasa Cina, tetapi bahasa Inggris juga disambut.
Kami memiliki kertas arxiv untuk Anda kutip untuk perpustakaan 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}
}