Skip to main content

SimpleTransformers:トランスフォーマーを簡単に

Simple Transformersは複雑さを取り除き、重要なこと、つまりモデルのトレーニングとTransformerモデルアーキテクチャの実験に取り掛かることができるようにします。
Created on January 18|Last edited on January 18

紹介

オープンソースライブラリであるHugging Face Transformersは、事前にトレーニングされた何千ものモデルの1つの場所です。APIの設計は見事な構想からなっており、実装が簡単です。ただし、まだある程度の複雑さがあり、素晴らしい機能を果たすには、いくつかの技術的なノウハウが必要です。

Simple Transformersを入力すると、複雑さが解消され、モデルのトレーニングやTransformerモデルアーキテクチャの実験など、重要なことに取り掛かることができます。それはあなたがすべての複雑なセットアップ、定型コード、および他のすべての一般的な不快感を回避するのに役立ちます、

  • モデルを1行で初期化します
  • 次のトレーニング
  • 3行目で評価します。

この簡単なレポートでは、HuggingFaceとSimpleTransformersの両方を使用して、IMDBデータセットに感情分類子を構築します。次に、SimpleTransformersを使用して小さなプロジェクトを実行します。



抱きしめる顔の道

このセクションでは、Hugging FaceAPIを使用して単純な感情分類子を構築しようとします。IMDBデータセットを使用して、DistilBERTモデルを微調整します。

GoogleColabでお試しください →\rightarrow

Hugging Face Transformersを使用すると、数行のコードで感情分類子を構築できます。しかし、特にTransformersを使い始めたばかりの人にとっては、いくつかの落とし穴があります。

1. インポート

トランスモデルが異なれば、必要なインポートも異なります。Hugging Faceは、PyTorchとTensorFlowの2つのディープラーニングフレームワークをサポートしています。TFプレフィックスは、TensorFlow固有のインポートで使用されます。

from transformers import DistilBertTokenizerFast
from transformers import TFDistilBertForSequenceClassification, TFTrainer, TFTrainingArguments

感情分類子には、主にトークナイザー、モデル、およびトレーナーが必要です。

2. トークナイザー

トークン化は、NLPで最も一般的な前処理タスクの1つです。文が与えられると、タスクはそれをトークンと呼ばれる断片に切り刻むことです。トランスフォーマーでさえ、トークン化するために入力が必要です。ただし、トランスフォーマーが異な���ば、必要なトークン化モジュールも異なるため、適切なモジュールをインポートする必要があります。

tokenizer = DistilBertTokenizerFast.from_pretrained('distilbert-base-uncased')

train_encodings = tokenizer(train_texts, truncation=True, padding=True)
val_encodings = tokenizer(val_texts, truncation=True, padding=True)
test_encodings = tokenizer(test_texts, truncation=True, padding=True)

3. トレーニング引数

Hugging Faceは、シンプルでありながら完全なトレーニングおよび評価インターフェイスを備えています。TrainingArgumentsまたはTFTrainingArgumentsを使用すると、さまざまなトレーニングオプションを提供でき、ロギング、勾配累積、混合精度などの組み込み機能を利用できます。さまざまなトレーニングの議論について詳しく知るためには、こちらをご覧ください。

training_args = TFTrainingArguments(
    output_dir='./results',          
    num_train_epochs=3,              
    per_device_train_batch_size=16,  
    per_device_eval_batch_size=64,   
    warmup_steps=500,                
    weight_decay=0.01,              
    logging_dir='./logs',            
    logging_steps=10,
)

4. モデルの取得

単純なHuggingFace APIを使用して、事前にトレーニングされたトランスフォーマーモデルをダウンロードできます。ただし、正しいモジュールをインポートする必要があります。

model = TFDistilBertForSequenceClassification.from_pretrained("distilbert-base-uncased")

5. トレーニング

TrainerまたはTFTrainer APIは、ダウンストリームタスクでトランスフォーマーモデルをトレーニングおよび評価するためのインターフェースを提供します。

trainer = TFTrainer(
    model=model,                         
    args=training_args,                  
    train_dataset=train_dataset,         
    eval_dataset=val_dataset             
)

trainer.train()

Hugging Faceには、ウェイトとバイアスの統合が付属しています。trainer.train()は、W&Bダッシュボードでトレーニングしている間、すべてのメトリックを自動的にログに記録します。以下は、感情分類子のトレーニング中に記録されたグラフです。




Run set
1


シンプルなトランスフォーマーウェイ

Simple Transformersは、HuggingFaceセクションで見た複雑さをすべて回避します。Simple Transformersは、Hugging Face APIをさらに抽象化して、Transformerモデルを迅速にトレーニングおよび評価します。すべてのダウンストリームの微調整タスクでは、3行のコードのみが必要です。SimpleTransformersを使用して感情分類器を構築しましょう。

GoogleColabでSimpleTransformerを微調整 →\rightarrow

Simple Transformers Thilina Rajapakseの作成者によるこの投稿では、 SimpleTransformersが初心者に優しいことを意味していることを理解してください。

1. 輸入

Simple Transformersの使用は、1行のインポートと同じくらい簡単です。ダウンストリームタスクごとに、インポートされるモジュールが1つあります。たとえば、コードスニペットに示されているインポートは、テキスト分類に必要なすべてです。

from simpletransformers.classification import ClassificationModel

2. トレーニングの議論

トレーニング引数を提供するには、辞書train_argsが必要です。ここで利用可能なすべての引数を確認してください。

train_args={
    'num_train_epochs': 3,
    'train_batch_size': 16,
    'eval_batch_size': 64,
    'warmup_steps': 500,
    'weight_decay': 0.01,
    'logging_steps': 10,
    'learning_rate': 5e-5,
    'fp16': False,
    'wandb_project': 'gallery',
    "wandb_kwargs": {'entity': 'wandb'}
}

3. タスク固有のモデルの初期化

必要なのは、タスク固有のモデルを初期化することだけです。ここでは分類を行っているため、ClassificationModelを初期化する必要があります。事前にトレーニングされたモデルを使用するために正しいモジュールをインポートする必要があるHuggingFaceとは異なり、Simple Transformersでは、モデルの名前を引数として渡すだけです。train_argsを渡すことができます。トークナイザーを初期化する必要がないことに注意してください。Simple Transformerは、正しいトークン化を自動的に適用します。ただし、トークナイザーの名前を指定することもできます。

model = ClassificationModel('distilbert', 'distilbert-base-uncased', use_cuda=True, cuda_device=0, args=train_args) 

4. トレーニング

モデルのトレーニングは、データセットをmodel.train_modelに渡すのと同じくらい簡単です。最初に適切なトークン化を適用してから、モデルをトレーニングします。Simple Transformersには、Weights and Biasesの統合が付属しており、すべてのトレーニング指標が自動的にログに記録されます。

model.train_model(train_df)

研修の結果を以下に示します。




Run set
2


テストドライブのためのSimpleTransformersの使用

この単純なプロジェクトでは、SimpleTransformersを使用してマルチクラス分類モデルを構築します。Stack Overflowに投稿された数千のプログラミングの質問を含む、このブログ投稿に最初に投稿されたこのデータセットを使用します。これらの各質問には、1つのタグ(Python、CSharp、JavaScript、またはJava)があります。タスクは、入力された質問をタグに分類することです。

GoogleColabで実験を試してください →\rightarrow

これはマルチクラス分類の問題なので、同じことを反映するようにモデルを初期化しましょう。num_labels引数に注意してください。

# labels
LABELS = ['csharp', 'java', 'javascript', 'python']
# initialize model
model = ClassificationModel('distilbert', 'distilbert-base-cased', num_labels=4, use_cuda=True, cuda_device=0, args=train_args)

モデルのトレーニングは、model.train_model()を呼び出すのと同じくらい簡単です。研修の結果を以下に示します。




Run set
2


結語

Simple Transformersにサポートが組み込まれているNLPタスクは他にもたくさんあります。それらのいくつかは次のとおりです。

  • トークンの分類
  • 質疑応答
  • 言語モデリング
  • 言語生成

Simple Transformersで何ができるかについて詳しくは、Ayush Chaurasia による一般的なNLPアプリケーションでのSimple Transformersの使用をご覧ください。

Simple Transformersを通じたTransformersの使用に関するこの短いチュートリアルが気に入りますか。

Simple Transformersを通じたTransformersの使用に関するこの短いチュートリアルが気に入りますか。