これは、なにをしたくて書いたもの?
Hugging Faceの開発しているライブラリーであるTransformersを使うと、これだけでも質疑応答やテキスト分類といったタスクが
実行できるようなので、ちょっと調べてみました。
最初はなにかタスクを試してみようかなと思ったのですが、ドキュメントを眺めて書いていくと長くなってきたので動かすところは
別のエントリーにしたいと思います。
Transformersとは
TransformersはHugging Faceが開発しているライブラリーで、事前学習済みモデルをダウンロードして学習するためのAPIやツールを
提供するものです。
バックエンドにはPyTorch、TensorFlow、JAXがあり、相互運用ができるとされています。
以降は、現時点のバージョンである4.36.1のドキュメントを見て書いていきます。
ドキュメントの読み進め方
ドキュメントを開くとページが左のナビゲーションにページが大量に並ぶので驚きますが、以下に説明が書かれています。
- Getting Started … ライブラリーの簡単なツアーと、インストールしてから起動するまでの手順
- Tutorials … 初心者向けのもので、ライブラリーを使い始めるのに基本的なスキルを習得する助けとなる
- How-To Guides … 言語モデリング用の事前学習済みモデルのファインチューニングや、カスタムモデルの作成や共有方法など、特定の目的を達成するための方法が書かれている
- Conceptual Guides … モデル、タスクといった背後にある考え方や、Transformersの設計哲学といったコンセプトについて議論、説明を行う
- API … すべてのクラス、関数について説明したもの
- Main Classes … 設定、モデル、トークナイザー、パイプラインといった最も重要なクラスに関する詳細
- Models … ライブラリーに実装されている各モデルに関するクラスと関数の詳細
- Internal Helpers … 内部で使用されているユーティリティクラスや関数の詳細
まずはチュートリアルを見るのがよさそうですが、How-To Guidesという名前のカテゴライズは見当たらなかったりします。
Getting Started、Tutorials、Conceptual Guides、API以外のドキュメントは全部How-To Guidesという感じでしょうか…。
用語がわからなかったら、こちらを見るのがよさそうです…。
で、これだけ見てもTransformersはわからないので、もう少し踏み込んでみます。
Transformersができること
Transformersは、以下のような「タスク」が行えるとされています。
- 自然言語処理(Natural Language Processing: NLP) … テキスト分類(text classification)、固有表現認識(named entity recognition)、質疑応答(question answering)、言語モデリング(language modeling)、要約(summarization)、翻訳(translation)、多肢選択(multiple choice)、テキスト生成(text generation)
- コンピュータービジョン … 画像分類(image classification)、オブジェクト検出(object detection)、セグメンテーション(segmentation)
- 音声 … 自動音声認識(automatic speech recognition)、音声分類(audio classification)
- マルチモーダル(Multimodal) … 表形式の質疑応答(table question answering)、光学式文字認識(optical character recognition)(、スキャンされたドキュメントからの情報抽出(information extraction from scanned documents)、ビデオ分類(video classification)、視覚的な質疑応答(visual question answering)
- テキストと画像などの別の種類の入力を組み合わせるタスク
各タスクは、タスク別にガイドが書かれています。
たとえばテキスト分類、
質疑応答、
オブジェクト検出といった感じですね。
コンセプトガイドに書かれている、「Transfomersでできること」について見ておくのもよいと思います。
それぞれのタスクでは、サポートされているモデルが決まっているようです。
たとえば、質疑応答の場合は以下のモデルがサポートしていると書かれています。
The task illustrated in this tutorial is supported by the following model architectures:
ALBERT, BART, BERT, BigBird, BigBird-Pegasus, BLOOM, CamemBERT, CANINE, ConvBERT, Data2VecText, DeBERTa, DeBERTa-v2, DistilBERT, ELECTRA, ERNIE, ErnieM, Falcon, FlauBERT, FNet, Funnel Transformer, OpenAI GPT-2, GPT Neo, GPT NeoX, GPT-J, I-BERT, LayoutLMv2, LayoutLMv3, LED, LiLT, Longformer, LUKE, LXMERT, MarkupLM, mBART, MEGA, Megatron-BERT, MobileBERT, MPNet, MPT, MRA, MT5, MVP, Nezha, Nyströmformer, OPT, QDQBert, Reformer, RemBERT, RoBERTa, RoBERTa-PreLayerNorm, RoCBert, RoFormer, Splinter, SqueezeBERT, T5, UMT5, XLM, XLM-RoBERTa, XLM-RoBERTa-XL, XLNet, X-MOD, YOSO
モデルについても、タスクの分類ごとにドキュメントがあるようです。こちらはモデルに関するAPIドキュメントです。
テキストモデルを展開しても、たくさん出てきます。
Llama2があったりしますね。
サポートされているモデルとフレームワーク
サポートされているモデルとフレームワーク(PyTorch、TensorFlow、Flax(JAX))の組み合わせは以下にまとめられています。
Transformers / Supported models and frameworks
フレームワーク視点で見ると、PyTorchがすべてのモデルに対応していることになっています。
各モデルについてはこの表にリンクされているモデルごとのドキュメントを見たり、こちらのドキュメントを見たりするとよいのかなと
思うのですが。
これらのモデルは基本的にある論文を元に実装されたクラスであり、アーキテクチャーです。
実際にモデルとして使う際には事前学習済みのモデルのデータが必要になり、これをHugging Face Hubからダウンロードすることに
なるようですね。
ただ、実装時には非常にたくさんのモデルを選んでソースコードを書いていくというよりは、事前学習済みのモデルをAuto Classesと
呼ばれるクラス群に指定することでTransformersに適切なモデルの実装を選んでもらう使い方になるようです。
Load pretrained instances with an AutoClass
さらに抽象化したものだと、pipelineというものを使うようです。
とはいえ、使用するモデルのアーキテクチャーや、事前学習済みのモデルがどのようなデータで学習したものなのかを押さえておき、
用途に応じて適切に選ぶということが求められそうな気がしますね。
おわりに
というわけで、頑張って情報を集めつつ慣れていこうと思います…。