Transformers documentation
哲学
哲学
Transformers は PyTorch 優先のライブラリです。論文に忠実で、使いやすく、ハッキングしやすいモデルを提供しています。
例やビジュアライゼーション、タイムラインを伴う、より詳細な記事は、正規の参照資料としてこちらでご利用いただけます。
私たちの哲学は実践を通じて進化します。以下に、現在の安定した原則を記載します。
このライブラリが対象とする方
- モデルアーキテクチャの探索や拡張に取り組む研究者や教育者。
- モデルのファインチューニング、評価、サービングを行う実務者。
- 予測可能なAPIで「すぐ使える」事前学習済みモデルを求めているエンジニア。
期待できること
各モデルには3つのコアクラスが必要です: configuration、models、および前処理クラスです。TokenizersはNLPを、image processorsは画像を、video processorsは動画を、feature extractorsはオーディオを、processorsはマルチモーダル入力を処理します。
これらのクラスはすべて、Hugging Face Hub または自分で保存したチェックポイントから提供される事前学習済みチェックポイントから、関連するクラスインスタンスおよび関連データ(設定のハイパーパラメータ、トークナイザの語彙、プロセッサのパラメータ、モデルの重み)をダウンロード(必要に応じて)、キャッシュし、読み込む共通の
from_pretrained()メソッドを使用することで、シンプルかつ統一された方法で事前学習済みインスタンスから初期化できます。これら3つのベースクラスの上に、ライブラリは2つのAPIを提供しています。与えられたタスクに対してモデルを素早く推論に使用するpipeline()と、PyTorchモデルを素早く学習またはファインチューニングするTrainerです。
基本理念
以下の原則は時間の経過とともに確立され、新しい哲学に関するブログ記事で詳細が説明されています。これらは、PRやコントリビューションのレビュー時にメンテナーの判断を導くものです。
- 信頼できる情報源。実装は、公式の結果や意図された動作に忠実である必要があります。
- 1つのモデル、1つのファイル。 ユーザーが読むモデルファイルの中で、コアの推論/学習ロジックが上から下まで一貫して確認できます。
- コードが製品です。 読みやすさと差分確認のしやすさを最優先にしてください。巧妙な間接参照よりも、明示的な名前を優先してください。
- 抽象化ではなく、標準化を。モデル固有の挙動はモデル側に保持します。共有インターフェースは汎用的なインフラストラクチャにのみ使用します。
- DRY*(ユーザーに有益な場合は繰り返す)。エンドユーザー向けのモデルファイルは自己完結したままです。インフラ部分は切り出されています。
- 最小限のユーザー API。 コードパスが少なく、kwargs が予測可能で、メソッドが安定しています。
- 後方互換性。パブリックなインターフェースは壊れてはなりません。旧バージョンの Hub アーティファクトは引き続き動作し続ける必要があります。
- 一貫したパブリックサーフェス。命名、出力、および任意の診断は整合性が保たれ、テストされています。
主要クラス
設定クラスは、モデルを構築するために必要なハイパーパラメータを保存します。これには、レイヤー数や隠れ層サイズなどが含まれます。必ずしも自分でインスタンス化する必要はありません。変更を加えずに事前学習済みモデルを使用する場合、モデルの作成時に設定が自動的にインスタンス化されます。
モデルクラスは、少なくとも PreTrainedModel によってラップされた PyTorch モデル(torch.nn.Module)です。
モジュラーな Transformers。コントリビューターは、既存のコンポーネントからの再利用を宣言する小さな
modular_*.pyシャードを作成します。ライブラリはこれを自動的に展開し、ユーザーが読み取り・デバッグするmodeling_*.pyファイルが生成されます。メンテナーはシャードをレビューし、ユーザーは展開されたファイルを修正します。これにより、ボイラープレートコードの乖離を避けながら「1つのモデル、1つのファイル」の原則を維持できます。詳細はコントリビューションのドキュメントを参照してください。前処理クラスは、生データをモデルが受け入れる形式に変換します。トークナイザーは各モデルの語彙を保持し、文字列をトークン埋め込みインデックスのリストとしてエンコードおよびデコードするためのメソッドを提供します。画像プロセッサーは視覚入力の前処理を行い、動画プロセッサーは動画入力の前処理を行い、特徴抽出器は音声入力の前処理を行い、プロセッサーはマルチモーダル入力の前処理を行います。
これらのクラスはすべて、事前学習済みインスタンスからインスタンス化でき、ローカルに保存し、Hubで共有できます。以下の3つのメソッドを使用します。
from_pretrained()を使用すると、ライブラリ自体が提供する事前学習済みバージョン(対応するモデルは Model Hub で確認できます)や、ユーザーがローカル(またはサーバー)に保存した事前学習済みバージョンから、モデル、設定、前処理クラスをインスタンス化できます。save_pretrained()を使用すると、モデル、設定、前処理クラスをローカルに保存でき、from_pretrained()を使って読み戻すことができます。push_to_hub()を使用すると、モデル、設定、前処理クラスを Hub に共有でき、誰でも簡単にアクセスできるようになります。