EasyNLPは、包括的で使いやすいNLPツールキットです
EasyNLPは、2021年にAlibaba内で最初にリリースされたPytorchの使いやすいNLP開発およびアプリケーションツールキットです。スケーラブルな分散トレーニング戦略で構築され、さまざまなNLPアプリケーション向けのNLPアルゴリズムの包括的なスイートをサポートしています。 EasyNLPは、さまざまな一般的なマルチモダリティの事前訓練モデルとともに、大規模な訓練を受けたモデルを着陸させるための知識の蒸留と少数のショット学習を統合します。現実世界のアプリケーションのモデルトレーニング、推論、および展開の統一されたフレームワークを提供します。アリババグループ内で、10を超えるバスと20を超えるビジネスシナリオに電力を供給しています。開発用のPAI-DSW、クラウドネイティブトレーニング用のPAI-DLC、サービング用のPAI-EAS、ゼロコードモデルトレーニング用のPAIデザイナーなど、AI(PAI)製品のプラットフォームにシームレスに統合されています。
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_classifyAppzooの使用について詳しくは、ドキュメントを参照してください。
EasyNLPは現在、ModelZooで次のモデルを提供しています。
EasyNLPでのこれらのモデルの使用については、このREADMEを参照してください。一方、EasyNLPは、Huggingface/Transformersから優先モデルをロードすることをサポートしています。詳細については、このチュートリアルを参照してください。
EasyNLPは、視覚的知識を必要とする視覚言語タスクをサポートするために、さまざまな人気の多いマルチモダリティの事前訓練モデルもサポートしています。たとえば、テキストイメージマッチング用のクリップスタイルモデルと、テキストから画像の生成用のダレスタイルモデルが装備されています。
EasyNLPは、大規模な事前に訓練されたモデルの上陸を支援するために、少ないショットの学習と知識の蒸留を提供します。
EasyNLPは、シンプルなツールキットからベンチマークの手がかりデータセットを提供します。このコマンドだけを使用して、Clueデータセットをベンチマークすることができます。
# Format: bash run_clue.sh device_id train/predict dataset
# e.g.:
bash run_clue.sh 0 train cslChiese BertとRoberta Modelsonのデータセットをテストしました。DEVセットの結果は次のとおりです。
(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)中国 - ロバータ-WWM-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ディスカッショングループに参加します。グループの議論は主に中国語ですが、英語も歓迎されています。
EasyNLPライブラリを引用するためのArxivペーパーがあります。
@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}
}