3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[翻訳] Hugging Face transformersにおけるAutoClassを用いた事前学習済みインスタンスのロード

Last updated at Posted at 2023-05-13

Load pretrained instances with an AutoClassの翻訳です。

本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。

非常に多くのTransformerアーキテクチャがあるため、ご自身のチェックポイント向けのものを作成することが困難になる場合があります。ライブラリの利用を簡単、シンプル、柔軟にするという🤗 Transformersのコアの哲学の一部として、AutoClassは指定されたチェックポイントから適切なアーキテクチャを自動で推定、ロードします。from_pretrained()メソッドによって、モデルをスクラッチでトレーニングする時間やリソースを費やすことなしに、任意のアーキテクチャで事前トレーニングされたモデルをクイックにロードできます。このようなタイプのチェックポイント不可知コードの作成は、あなたのコードがあるチェックポイントで動作するのであれば、アーキテクチャが異なっていたとしても、同様にタスクにトレーニングされている限り別のチェックポイントでも動作することを意味します。

アーキテクチャとは、モデルのスケルトンのことを指し、チェックポイントは特定のアーキテクチャの重みを指すことを覚えておいてください。例えば、BERTはアーキテクチャですが、bert-base-uncasedはチェックポイントです。モデルは、アーキテクチャやチェックポイント意味する汎用的な用語です。

このチュートリアルでは、以下を学びます:

  • 事前学習済みトークナイザーのロード。
  • 事前学習済み画像プロセッサーのロード。
  • 事前学習済み特徴量抽出器のロード。
  • 事前学習済みプロセッサーのロード。
  • 事前学習済みモデルのロード。

AutoTokenizer

ほぼ全てのNLPタスクはトークナイザーからスタートします。トークナイザーは、あなたの入力をモデルが処理できるフォーマットに変換します。

AutoTokenizer.from_pretrained()でトークナイザーをロードします。

Python
from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

そして、以下のように入力をトークナイズします:

Python
sequence = "In a hole in the ground there lived a hobbit."
print(tokenizer(sequence))
{'input_ids': [101, 1999, 1037, 4920, 1999, 1996, 2598, 2045, 2973, 1037, 7570, 10322, 4183, 1012, 102], 
 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

AutoImageProcessor

ビジョンタスクにおいては、画像プロセッサーは画像を適切な入力フォーマットに処理します。

Python
from transformers import AutoImageProcessor

image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")

AutoFeatureExtractor

音声タスクにおいては、特徴量抽出器は音声シグナルを適切な入力フォーマットに処理します。

AutoFeatureExtractor.from_pretrained()で特徴量抽出器をロードします:

Python
from transformers import AutoFeatureExtractor

feature_extractor = AutoFeatureExtractor.from_pretrained(
    "ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition"
)

AutoProcessor

マルチモーダルタスクには、二つのタイプの処理ツールを組み合わせるプロセッサーが必要となります。例えば、LayoutLMV2モデルは、画像を取り扱う画像プロセッサーとテキストを取り扱うトークナイザーが必要となります。プロセッサーがこれらの両方を組み合わせます。

AutoProcessor.from_pretrained()でプロセッサーをロードします。

Python
from transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")

AutoModel

PyTorch

最後になりますが、AutoModelForクラスによって、特定のタスク(利用可能なタスクの完全なリストはこちらをご覧ください)の事前学習済みモデルをロードすることができます。例えば、AutoModelForSequenceClassification.from_pretrained()を用いてシーケンス分類のモデルをロードします:

Python
from transformers import AutoModelForSequenceClassification

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

異なるタスクのアーキテクチャをロードするために、同じチェックポイントを容易に再利用できます。

Python
from transformers import AutoModelForTokenClassification

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

PyTorchモデルのfrom_pretrained()メソッドは、内部でpickleを使い、セキュアでないと知られているtorch.load()を使用しています。一般的には、信頼できないソースから提供されている可能性のあるモデル、あるいは不正に干渉されている可能性のあるモデルは決してロードしないでください。このセキュリティリスクは、コミットごとにマルウェアのスキャンを行なっているugging Face Hubにホストされている公開モデルでは部分的に対策されています。GPGによるsigned commit verificationのようなベストプラクティスに関してはHub documentationをご覧ください。

TensorFlowとFlaxのチェックポイントは影響を受けず、この問題を回避するためにfrom_pretrainedメソッドのfrom_tffrom_flaxのkwargsを用いることで、PyTorchアーキテクチャからロードすることができます。

一般的には、モデルの事前学習済みインスタンスをロードするためにはAutoTokenizerクラスやAutoModelForクラスを使用することをお勧めします。これによって、常に適切なアーキテクチャがロードされるようになります。次のチュートリアルでは、ファインチューニングのためのデータセットを前処理するために、新たにロードしたトークナイザー、画像プロセッサー、特徴量抽出器をどのように活用するのかを学びます。

TensorFlow

最後になりますが、AutoModelForクラスによって、特定のタスク(利用可能なタスクの完全なリストはこちらをご覧ください)の事前学習済みモデルをロードすることができます。例えば、TFAutoModelForSequenceClassification.from_pretrained()を用いてシーケンス分類のモデルをロードします:

Python
from transformers import TFAutoModelForSequenceClassification

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

異なるタスクのアーキテクチャをロードするために、同じチェックポイントを容易に再利用できます。

Python
from transformers import TFAutoModelForTokenClassification

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

一般的には、モデルの事前学習済みインスタンスをロードするためにはAutoTokenizerクラスやTFAutoModelForクラスを使用することをお勧めします。これによって、常に適切なアーキテクチャがロードされるようになります。次のチュートリアルでは、ファインチューニングのためのデータセットを前処理するために、新たにロードしたトークナイザー、画像プロセッサー、特徴量抽出器をどのように活用するのかを学びます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?