EasyNLP是一個綜合且易於使用的NLP工具包
EasyNLP是Pytorch易於使用的NLP開發和應用工具包,於2021年首次在阿里巴巴內部發行。它採用可擴展的分佈式培訓策略構建,並支持針對各種NLP應用的全面NLP算法套件。 EasyNLP將知識蒸餾和少量學習集成在一起,用於降落大型預訓練模型,以及各種流行的多模式預訓練的模型。它為現實世界應用程序提供了模型培訓,推理和部署的統一框架。它在阿里巴巴集團內為10多個公共汽車和20多個業務方案提供了動力。它無縫集成到AI(PAI)產品的平台,包括用於開發的PAI-DSW,用於雲本地培訓的PAI-DLC,用於服務的PAI-DLC和用於零代碼模型培訓的PAI-Designer。
我們有一系列有關EasyNLP功能的技術文章。
您可以從來源設置:
$ git clone https://github.com/alibaba/EasyNLP.git
$ cd EasyNLP
$ python setup.py install該回購在Python 3.6,Pytorch> = 1.8上進行了測試。
現在,讓我們展示如何僅使用幾行代碼來構建基於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 ()完整的示例可以在此處找到。
您還可以使用Appzoo命令行工具快速訓練應用程序模型。以SST-2數據集上的文本分類為例。首先,您可以下載train.tsv和dev.tsv,然後開始培訓:
$ 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 '然後預測:
$ 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_classify要了解有關Appzoo使用的更多信息,請參閱我們的文檔。
EasyNLP當前在ModelZoo中提供以下模型:
請參考此讀數,以在EasyNLP中使用這些模型。同時,EasyNLP支持從擁抱面/變形金剛加載預告片的模型,請參閱本教程以獲取詳細信息。
EasyNLP還支持各種流行的多模式預訓練模型,以支持需要視覺知識的視覺任務。例如,它配備了用於文本圖像匹配的夾式模型和用於文本圖像生成的Dalle式模型。
EasyNLP提供了很少的學習和知識蒸餾,以幫助登陸大型預培訓模型。
EasyNLP提供了一個簡單的工具包來基準線索數據集。您只需使用此命令即可基於線索數據集。
# Format: bash run_clue.sh device_id train/predict dataset
# e.g.:
bash run_clue.sh 0 train csl我們已經測試了Chiese Bert和Roberta Modelson數據集,Dev Set的結果是:
(1)Bert-Base-Chinese:
| 任務 | 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)中文 - 羅伯塔wm- ext:
| 任務 | 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% |
這是詳細的線索基準示例。
該項目是根據Apache許可證(版本2.0)獲得許可的。該工具包還包含根據其他開源許可根據其他存儲庫修改的一些代碼。有關更多信息,請參見通知文件。
掃描以下QR碼以加入DingTalk討論小組。小組討論主要是中文的,但也歡迎英語。
我們有一張Arxiv論文供您引用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}
}