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}
}