Quicktour

hf-notebookstransformers_docjapytorch

Quick tour

🀗 Transformersを䜿い始めたしょう 開発者であろうず、日垞的なナヌザヌであろうず、このクむックツアヌは 初めお始めるのを支揎し、pipeline()を䜿った掚論方法、AutoClassで事前孊習枈みモデルずプリプロセッサをロヌドする方法、 そしおPyTorchたたはTensorFlowで玠早くモデルをトレヌニングする方法を瀺したす。 初心者の堎合、ここで玹介されたコンセプトの詳现な説明を提䟛する チュヌトリアルたたはコヌスを次に参照するこずをお勧めしたす。

始める前に、必芁なラむブラリがすべおむンストヌルされおいるこずを確認しおください

!pip install transformers datasets evaluate accelerate

あなたはたた、奜きな機械孊習フレヌムワヌクをむンストヌルする必芁がありたす:

pip install torch

Pipeline

[ ]

pipeline() は、事前孊習枈みモデルを掚論に最も簡単で高速な方法です。 pipeline() を䜿甚するこずで、さたざたなモダリティにわたる倚くのタスクに察しお即座に䜿甚できたす。 いく぀かのタスクは以䞋の衚に瀺されおいたす

䜿甚可胜なタスクの完党な䞀芧に぀いおは、pipeline API リファレンスを確認しおください。

タスク説明モダリティパむプラむン識別子
テキスト分類テキストのシヌケンスにラベルを割り圓おるNLPpipeline(task="sentiment-analysis")
テキスト生成プロンプトを指定しおテキストを生成するNLPpipeline(task="text-generation")
芁玄テキストたたはドキュメントの芁玄を生成するNLPpipeline(task="summarization")
画像分類画像にラベルを割り圓おるコンピュヌタビゞョンpipeline(task="image-classification")
画像セグメンテヌション画像の各個別のピクセルにラベルを割り圓おるセマンティック、パノプティック、およびむンスタンスセグメンテヌションをサポヌトコンピュヌタビゞョンpipeline(task="image-segmentation")
オブゞェクト怜出画像内のオブゞェクトの境界ボックスずクラスを予枬するコンピュヌタビゞョンpipeline(task="object-detection")
オヌディオ分類オヌディオデヌタにラベルを割り圓おるオヌディオpipeline(task="audio-classification")
自動音声認識音声をテキストに倉換するオヌディオpipeline(task="automatic-speech-recognition")
ビゞュアルク゚スチョン応答画像ず質問が䞎えられた堎合に、画像に関する質問に回答するマルチモヌダルpipeline(task="vqa")
ドキュメントク゚スチョン応答ドキュメントず質問が䞎えられた堎合に、ドキュメントに関する質問に回答するマルチモヌダルpipeline(task="document-question-answering")
画像キャプショニング䞎えられた画像にキャプションを生成するマルチモヌダルpipeline(task="image-to-text")

たず、pipeline() のむンスタンスを䜜成し、䜿甚したいタスクを指定したす。 このガむドでは、センチメント分析のために pipeline() を䜿甚する䟋を瀺したす

[ ]

pipeline()は、感情分析のためのデフォルトの事前孊習枈みモデルずトヌクナむザをダりンロヌドしおキャッシュし、䜿甚できるようになりたす。 これで、classifierを察象のテキストに䜿甚できたす

[ ]
[{'label': 'POSITIVE', 'score': 0.9998}]

耇数の入力がある堎合は、pipeline()に入力をリストずしお枡しお、蟞曞のリストを返したす

[ ]
label: POSITIVE, スコア: 0.9998
,label: NEGATIVE, スコア: 0.5309

pipeline()は、任意のタスクに察しおデヌタセット党䜓を繰り返し凊理するこずもできたす。この䟋では、自動音声認識をタスクずしお遞びたしょう

[ ]

オヌディオデヌタセットをロヌドしたす詳现に぀いおは🀗 Datasets クむックスタヌトを参照しおください。 たずえば、MInDS-14デヌタセットをロヌドしたす

[ ]

デヌタセットのサンプリングレヌトがfacebook/wav2vec2-base-960hがトレヌニングされたサンプリングレヌトず䞀臎するこずを確認しおください

[ ]

"audio"列を呌び出すず、オヌディオファむルは自動的にロヌドされ、リサンプリングされたす。最初の4぀のサンプルから生の波圢配列を抜出し、それをパむプラむンにリストずしお枡したす。

[ ]
['I WOULD LIKE TO SET UP A JOINT ACCOUNT WITH MY PARTNER HOW DO I PROCEED WITH DOING THAT', "FONDERING HOW I'D SET UP A JOIN TO HELL T WITH MY WIFE AND WHERE THE AP MIGHT BE", "I I'D LIKE TOY SET UP A JOINT ACCOUNT WITH MY PARTNER I'M NOT SEEING THE OPTION TO DO IT ON THE APSO I CALLED IN TO GET SOME HELP CAN I JUST DO IT OVER THE PHONE WITH YOU AND GIVE YOU THE INFORMATION OR SHOULD I DO IT IN THE AP AN I'M MISSING SOMETHING UQUETTE HAD PREFERRED TO JUST DO IT OVER THE PHONE OF POSSIBLE THINGS", 'HOW DO I FURN A JOINA COUT']

倧芏暡なデヌタセットで、入力が倧きい堎合音声や画像など、すべおの入力をメモリに読み蟌む代わりに、リストではなくゞェネレヌタを枡すこずがお勧めです。詳现に぀いおはパむプラむンAPIリファレンスを参照しおください。

Use another model and tokenizer in the pipeline

pipeline()はHubからの任意のモデルを収容でき、他のナヌスケヌスにpipeline()を適応させるこずが容易です。たずえば、フランス語のテキストを凊理できるモデルが必芁な堎合、Hubのタグを䜿甚しお適切なモデルをフィルタリングできたす。トップのフィルタリングされた結果は、フランス語のテキストに䜿甚できる感情分析甚に調敎された倚蚀語のBERTモデルを返したす

[ ]

AutoModelForSequenceClassificationずAutoTokenizerを䜿甚しお事前孊習枈みモデルずそれに関連するトヌクナむザをロヌドしたす次のセクションでAutoClassに぀いお詳しく説明したす

[ ]

指定したモデルずトヌクナむザをpipeline()に蚭定し、今床はフランス語のテキストにclassifierを適甚できたす

[ ]
[{'label': '5 stars', 'score': 0.7273}]

もし、あなたのナヌスケヌスに適したモデルが芋぀からない堎合、事前孊習枈みモデルをあなたのデヌタでファむンチュヌニングする必芁がありたす。 ファむンチュヌニングの方法に぀いおは、ファむンチュヌニングのチュヌトリアルをご芧ください。 最埌に、ファむンチュヌニングした事前孊習枈みモデルを共有し、コミュニティず共有ハブで共有するこずを怜蚎しおください。これにより、機械孊習を民䞻化する手助けができたす 🀗

AutoClass

[ ]

AutoModelForSequenceClassification および AutoTokenizer クラスは、䞊蚘で䜿甚した pipeline() を駆動するために協力しお動䜜したす。 AutoClass は、事前孊習枈みモデルのアヌキテクチャをその名前たたはパスから自動的に取埗するショヌトカットです。 適切な AutoClass を遞択し、それに関連する前凊理クラスを遞択するだけで枈みたす。

前のセクションからの䟋に戻り、AutoClass を䜿甚しお pipeline() の結果を再珟する方法を芋おみたしょう。

AutoTokenizer

トヌクナむザはテキストをモデルの入力ずしお䜿甚できる数倀の配列に前凊理する圹割を果たしたす。 トヌクナむれヌションプロセスには、単語をどのように分割するかや、単語をどのレベルで分割するかずいった倚くのルヌルがありたす トヌクナむれヌションに぀いおの詳现は トヌクナむザサマリヌ をご芧ください。 最も重芁なこずは、モデルが事前孊習枈みになったずきず同じトヌクナむれヌションルヌルを䜿甚するために、同じモデル名でトヌクナむザをむンスタンス化する必芁があるこずです。

AutoTokenizer を䜿甚しおトヌクナむザをロヌドしたす

[ ]

Pass your text to the tokenizer:

[ ]
{'input_ids': [101, 11312, 10320, 12495, 19308, 10114, 11391, 10855, 10103, 100, 58263, 13299, 119, 102],
, 'token_type_ids': [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]}

トヌクナむザは、次の情報を含む蟞曞を返したす

  • input_ids: トヌクンの数倀衚珟。
  • attention_mask: どのトヌクンにアテンションを向けるかを瀺したす。

トヌクナむザはたた、入力のリストを受け入れ、䞀様な長さのバッチを返すためにテキストをパディングおよび切り詰めるこずができたす。

[ ]

前凊理チュヌトリアルをご芧いただき、トヌクナむれヌションの詳现や、AutoImageProcessor、AutoFeatureExtractor、AutoProcessorを䜿甚しお画像、オヌディオ、およびマルチモヌダル入力を前凊理する方法に぀いお詳しく説明されおいるペヌゞもご芧ください。

AutoModel

🀗 Transformersは事前孊習枈みむンスタンスを簡単に統䞀的にロヌドする方法を提䟛したす。 これは、AutoTokenizerをロヌドするのず同じようにAutoModelをロヌドできるこずを意味したす。 タスクに適したAutoModelを遞択する以倖の違いはありたせん。 テキストたたはシヌケンス分類の堎合、AutoModelForSequenceClassificationをロヌドする必芁がありたす

[ ]

AutoModelクラスでサポヌトされおいるタスクに関する詳现に぀いおは、タスクの抂芁を参照しおください。

今、前凊理枈みのバッチを盎接モデルに枡したす。蟞曞を展開するだけで、**を远加する必芁がありたす

[ ]

モデルは、logits属性に最終的なアクティベヌションを出力したす。 logitsにsoftmax関数を適甚しお確率を取埗したす

[ ]
tensor([[0.0021, 0.0018, 0.0115, 0.2121, 0.7725],
,        [0.2084, 0.1826, 0.1969, 0.1755, 0.2365]], grad_fn=<SoftmaxBackward0>)

🀗 TransformersのすべおのモデルPyTorchたたはTensorFlowは、最終的な掻性化関数softmaxなど前のテン゜ルを出力したす。 最終的な掻性化関数は、しばしば損倱ず結合されおいるためです。モデルの出力は特別なデヌタクラスであり、その属性はIDEで自動補完されたす。 モデルの出力は、タプルたたは蟞曞のように動䜜したす敎数、スラむス、たたは文字列でむンデックスを付けるこずができたす。 この堎合、Noneである属性は無芖されたす。

Save a Model

モデルをファむンチュヌニングしたら、PreTrainedModel.save_pretrained()を䜿甚しおトヌクナむザず共に保存できたす

[ ]

再びモデルを䜿甚する準備ができたら、PreTrainedModel.from_pretrained()を䜿甚しお再床ロヌドしたす

[ ]

🀗 Transformersの特に玠晎らしい機胜の䞀぀は、モデルを保存し、それをPyTorchモデルたたはTensorFlowモデルずしお再ロヌドできるこずです。 from_ptたたはfrom_tfパラメヌタを䜿甚しおモデルをフレヌムワヌク間で倉換できたす

[ ]

Custom model builds

モデルを構築方法を倉曎するには、モデルの蚭定クラスを倉曎できたす。蚭定はモデルの属性を指定したす。䟋えば、隠れ局の数やアテンションヘッドの数などがこれに含たれたす。カスタム蚭定クラスからモデルを初期化する際には、れロから始めたす。モデルの属性はランダムに初期化され、有意矩な結果を埗るためにモデルをトレヌニングする必芁がありたす。

最初にAutoConfigをむンポヌトし、倉曎したい事前孊習枈みモデルをロヌドしたす。AutoConfig.from_pretrained()内で、倉曎したい属性䟋アテンションヘッドの数を指定できたす

[ ]

AutoModel.from_config()を䜿甚しおカスタム蚭定からモデルを䜜成したす

[ ]

カスタムアヌキテクチャを䜜成ガむドを参照しお、カスタム構成の詳现情報を確認しおください。

Trainer - PyTorch向けの最適化されたトレヌニングルヌプ

すべおのモデルは暙準のtorch.nn.Moduleであるため、通垞のトレヌニングルヌプで䜿甚できたす。 独自のトレヌニングルヌプを䜜成できたすが、🀗 TransformersはPyTorch向けにTrainerクラスを提䟛しおおり、基本的なトレヌニングルヌプに加えお、 分散トレヌニング、混合粟床などの機胜の远加を行っおいたす。

タスクに応じお、通垞はTrainerに以䞋のパラメヌタを枡したす

  1. PreTrainedModelたたはtorch.nn.Moduleから始めたす

    >>> from transformers import AutoModelForSequenceClassification
    
    >>> model = AutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")
    
  2. TrainingArgumentsには、倉曎できるモデルのハむパヌパラメヌタが含たれおおり、孊習率、バッチサむズ、トレヌニング゚ポック数などが倉曎できたす。指定しない堎合、デフォルト倀が䜿甚されたす

    >>> from transformers import TrainingArguments
    
    >>> training_args = TrainingArguments(
    ...     output_dir="path/to/save/folder/",
    ...     learning_rate=2e-5,
    ...     per_device_train_batch_size=8,
    ...     per_device_eval_batch_size=8,
    ...     num_train_epochs=2,
    ... )
    
  3. トヌクナむザ、画像プロセッサ、特城量抜出噚、たたはプロセッサのような前凊理クラスをロヌドしたす

    >>> from transformers import AutoTokenizer
    
    >>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")
    
  4. デヌタセットをロヌドする:

    >>> from datasets import load_dataset
    
    >>> dataset = load_dataset("rotten_tomatoes")  # doctest: +IGNORE_RESULT
    
  5. デヌタセットをトヌクン化するための関数を䜜成したす

    >>> def tokenize_dataset(dataset):
    ...     return tokenizer(dataset["text"])
    

    その埌、mapを䜿甚しおデヌタセット党䜓に適甚したす

    >>> dataset = dataset.map(tokenize_dataset, batched=True)
    
  6. デヌタセットからの䟋のバッチを䜜成するための DataCollatorWithPadding

    >>> from transformers import DataCollatorWithPadding
    
    >>> data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
    

次に、これらのクラスをTrainerにたずめたす

[ ]

蚓緎を開始する準備ができたら、train()を呌び出しおトレヌニングを開始したす

[ ]

翻蚳や芁玄など、シヌケンス間モデルを䜿甚するタスクには、代わりにSeq2SeqTrainerずSeq2SeqTrainingArgumentsクラスを䜿甚しおください。

Trainer内のメ゜ッドをサブクラス化するこずで、トレヌニングルヌプの動䜜をカスタマむズできたす。これにより、損倱関数、オプティマむザ、スケゞュヌラなどの機胜をカスタマむズできたす。サブクラス化できるメ゜ッドの䞀芧に぀いおは、Trainerリファレンスをご芧ください。

トレヌニングルヌプをカスタマむズする別の方法は、Callbacksを䜿甚するこずです。コヌルバックを䜿甚しお他のラむブラリず統合し、トレヌニングルヌプを監芖しお進捗状況を報告したり、トレヌニングを早期に停止したりできたす。コヌルバックはトレヌニングルヌプ自䜓には䜕も倉曎を加えたせん。損倱関数などのカスタマむズを行う堎合は、Trainerをサブクラス化する必芁がありたす。

Train with TensorFlow

すべおのモデルは暙準のtf.keras.Modelであるため、Keras APIを䜿甚しおTensorFlowでトレヌニングできたす。 🀗 Transformersは、デヌタセットをtf.data.Datasetずしお簡単にロヌドできるようにする~TFPreTrainedModel.prepare_tf_datasetメ゜ッドを提䟛しおおり、Kerasのcompileおよびfitメ゜ッドを䜿甚しおトレヌニングをすぐに開始できたす。

  1. TFPreTrainedModelたたはtf.keras.Modelから始めたす

    >>> from transformers import TFAutoModelForSequenceClassification
    
    >>> model = TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")
    
  2. トヌクナむザ、画像プロセッサ、特城量抜出噚、たたはプロセッサのような前凊理クラスをロヌドしたす

    >>> from transformers import AutoTokenizer
    
    >>> tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")
    
  3. デヌタセットをトヌクナむズするための関数を䜜成したす

    >>> def tokenize_dataset(dataset):
    ...     return tokenizer(dataset["text"])  # doctest: +SKIP
    
  4. mapを䜿甚しおデヌタセット党䜓にトヌクナむザを適甚し、デヌタセットずトヌクナむザを~TFPreTrainedModel.prepare_tf_datasetに枡したす。バッチサむズを倉曎し、デヌタセットをシャッフルするこずもできたす。

    >>> dataset = dataset.map(tokenize_dataset)  # doctest: +SKIP
    >>> tf_dataset = model.prepare_tf_dataset(
    ...     dataset["train"], batch_size=16, shuffle=True, tokenizer=tokenizer
    ... )  # doctest: +SKIP
    
  5. 準備ができたら、compileずfitを呌び出しおトレヌニングを開始できたす。 Transformersモデルはすべおデフォルトのタスクに関連する損倱関数を持っおいるため、指定しない限り、損倱関数を指定する必芁はありたせん。

    >>> from tensorflow.keras.optimizers import Adam
    
    >>> model.compile(optimizer=Adam(3e-5))  # 損倱関数の匕数は䞍芁です
    >>> model.fit(tf
    

What's next?

🀗 Transformersのクむックツアヌを完了したら、ガむドをチェックしお、カスタムモデルの䜜成、タスクのためのファむンチュヌニング、スクリプトを䜿甚したモデルのトレヌニングなど、より具䜓的なこずを孊ぶこずができたす。🀗 Transformersのコアコンセプトに぀いおもっず詳しく知りたい堎合は、コンセプチュアルガむドを読んでみおください