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

[Load pretrained instances with an AutoClass](https://huggingface.co/docs/transformers/autoclass_tutorial)の翻訳です。

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

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

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

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

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

# AutoTokenizer

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

[AutoTokenizer\.from\_pretrained\(\)](https://huggingface.co/docs/transformers/v4.29.1/en/model_doc/auto#transformers.AutoTokenizer.from_pretrained)でトークナイザーをロードします。

```py:Python
from transformers import AutoTokenizer

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

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

```py: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

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

```py:Python
from transformers import AutoImageProcessor

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

# AutoFeatureExtractor

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

[AutoFeatureExtractor\.from\_pretrained\(\)](https://huggingface.co/docs/transformers/v4.29.1/en/model_doc/auto#transformers.AutoFeatureExtractor.from_pretrained)で特徴量抽出器をロードします:

```py:Python
from transformers import AutoFeatureExtractor

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

# AutoProcessor

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

[AutoProcessor\.from\_pretrained\(\)](https://huggingface.co/docs/transformers/v4.29.1/en/model_doc/auto#transformers.AutoProcessor.from_pretrained)でプロセッサーをロードします。

```py:Python
from transformers import AutoProcessor

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

# AutoModel

## PyTorch

最後になりますが、`AutoModelFor`クラスによって、特定のタスク(利用可能なタスクの完全なリストは[こちら](https://huggingface.co/docs/transformers/model_doc/auto)をご覧ください)の事前学習済みモデルをロードすることができます。例えば、[AutoModelForSequenceClassification\.from\_pretrained\(\)](https://huggingface.co/docs/transformers/v4.29.1/en/model_doc/auto#transformers.FlaxAutoModelForVision2Seq.from_pretrained)を用いてシーケンス分類のモデルをロードします:

```py:Python
from transformers import AutoModelForSequenceClassification

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

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

```py:Python
from transformers import AutoModelForTokenClassification

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

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

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

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

## TensorFlow

最後になりますが、`AutoModelFor`クラスによって、特定のタスク(利用可能なタスクの完全なリストは[こちら](https://huggingface.co/docs/transformers/model_doc/auto)をご覧ください)の事前学習済みモデルをロードすることができます。例えば、[TFAutoModelForSequenceClassification\.from\_pretrained\(\)](https://huggingface.co/docs/transformers/v4.29.1/en/model_doc/auto#transformers.FlaxAutoModelForVision2Seq.from_pretrained)を用いてシーケンス分類のモデルをロードします:

```py:Python
from transformers import TFAutoModelForSequenceClassification

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

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

```py:Python
from transformers import TFAutoModelForTokenClassification

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

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