Load pretrained instances with an AutoClassの翻訳です。
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
非常に多くのTransformerアーキテクチャがあるため、ご自身のチェックポイント向けのものを作成することが困難になる場合があります。ライブラリの利用を簡単、シンプル、柔軟にするという🤗 Transformersのコアの哲学の一部として、AutoClass
は指定されたチェックポイントから適切なアーキテクチャを自動で推定、ロードします。from_pretrained()
メソッドによって、モデルをスクラッチでトレーニングする時間やリソースを費やすことなしに、任意のアーキテクチャで事前トレーニングされたモデルをクイックにロードできます。このようなタイプのチェックポイント不可知コードの作成は、あなたのコードがあるチェックポイントで動作するのであれば、アーキテクチャが異なっていたとしても、同様にタスクにトレーニングされている限り別のチェックポイントでも動作することを意味します。
アーキテクチャとは、モデルのスケルトンのことを指し、チェックポイントは特定のアーキテクチャの重みを指すことを覚えておいてください。例えば、BERTはアーキテクチャですが、bert-base-uncased
はチェックポイントです。モデルは、アーキテクチャやチェックポイント意味する汎用的な用語です。
このチュートリアルでは、以下を学びます:
- 事前学習済みトークナイザーのロード。
- 事前学習済み画像プロセッサーのロード。
- 事前学習済み特徴量抽出器のロード。
- 事前学習済みプロセッサーのロード。
- 事前学習済みモデルのロード。
AutoTokenizer
ほぼ全てのNLPタスクはトークナイザーからスタートします。トークナイザーは、あなたの入力をモデルが処理できるフォーマットに変換します。
AutoTokenizer.from_pretrained()でトークナイザーをロードします。
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
そして、以下のように入力をトークナイズします:
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
ビジョンタスクにおいては、画像プロセッサーは画像を適切な入力フォーマットに処理します。
from transformers import AutoImageProcessor
image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")
AutoFeatureExtractor
音声タスクにおいては、特徴量抽出器は音声シグナルを適切な入力フォーマットに処理します。
AutoFeatureExtractor.from_pretrained()で特徴量抽出器をロードします:
from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained(
"ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition"
)
AutoProcessor
マルチモーダルタスクには、二つのタイプの処理ツールを組み合わせるプロセッサーが必要となります。例えば、LayoutLMV2モデルは、画像を取り扱う画像プロセッサーとテキストを取り扱うトークナイザーが必要となります。プロセッサーがこれらの両方を組み合わせます。
AutoProcessor.from_pretrained()でプロセッサーをロードします。
from transformers import AutoProcessor
processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")
AutoModel
PyTorch
最後になりますが、AutoModelFor
クラスによって、特定のタスク(利用可能なタスクの完全なリストはこちらをご覧ください)の事前学習済みモデルをロードすることができます。例えば、AutoModelForSequenceClassification.from_pretrained()を用いてシーケンス分類のモデルをロードします:
from transformers import AutoModelForSequenceClassification
model = AutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")
異なるタスクのアーキテクチャをロードするために、同じチェックポイントを容易に再利用できます。
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_tf
やfrom_flax
のkwargsを用いることで、PyTorchアーキテクチャからロードすることができます。
一般的には、モデルの事前学習済みインスタンスをロードするためにはAutoTokenizer
クラスやAutoModelFor
クラスを使用することをお勧めします。これによって、常に適切なアーキテクチャがロードされるようになります。次のチュートリアルでは、ファインチューニングのためのデータセットを前処理するために、新たにロードしたトークナイザー、画像プロセッサー、特徴量抽出器をどのように活用するのかを学びます。
TensorFlow
最後になりますが、AutoModelFor
クラスによって、特定のタスク(利用可能なタスクの完全なリストはこちらをご覧ください)の事前学習済みモデルをロードすることができます。例えば、TFAutoModelForSequenceClassification.from_pretrained()を用いてシーケンス分類のモデルをロードします:
from transformers import TFAutoModelForSequenceClassification
model = TFAutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")
異なるタスクのアーキテクチャをロードするために、同じチェックポイントを容易に再利用できます。
from transformers import TFAutoModelForTokenClassification
model = TFAutoModelForTokenClassification.from_pretrained("distilbert-base-uncased")
一般的には、モデルの事前学習済みインスタンスをロードするためにはAutoTokenizer
クラスやTFAutoModelFor
クラスを使用することをお勧めします。これによって、常に適切なアーキテクチャがロードされるようになります。次のチュートリアルでは、ファインチューニングのためのデータセットを前処理するために、新たにロードしたトークナイザー、画像プロセッサー、特徴量抽出器をどのように活用するのかを学びます。