0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

transformersってなんだ? ~ AIモデルの百貨店への入り口

Posted at

ねらい

「ChatGPTみたいなことをローカルでやりたい」「BERTで感情分析したい」「Whisperで音声認識したい」——そう思ったとき、最初に出会うのがHugging Faceのtransformersライブラリだろう。

100万以上のモデルへのゲートウェイとなるこのライブラリ、一体何者なのか。

対象

  • 機械学習モデルを動かしてみたい人
  • 「Hugging Face」という名前は聞いたことあるけど何かよくわからない人
  • BERT、GPT、Whisperなどを使いたいけど、どこから始めれば良いかわからない人

ゴール

  • transformersライブラリの位置づけを理解する
  • Pipeline APIで簡単にモデルを動かせるようになる
  • 自分のユースケースに合ったモデルを探せるようになる

TL;DR

transformersはHugging Faceが開発したPythonライブラリで、最先端のAIモデル(テキスト、画像、音声、マルチモーダル)を数行のコードで使えるようにする。100万以上の事前学習済みモデルがHugging Face Hubで公開されており、推論も学習も簡単にできる。


transformersとは

公式ドキュメントより:

transformers is the pivot across frameworks: if a model definition is supported, it will be compatible with the majority of training frameworks (Axolotl, Unsloth, DeepSpeed, FSDP, PyTorch-Lightning, …), inference engines (vLLM, SGLang, TGI, …), and adjacent modeling libraries (llama.cpp, mlx, …) which leverage the model definition from transformers.

(transformersはフレームワーク間の軸となります:モデル定義がサポートされていれば、大半の訓練フレームワーク(Axolotl、Unsloth、DeepSpeed、FSDP、PyTorch-Lightningなど)、推論エンジン(vLLM、SGLang、TGIなど)、そしてtransformersのモデル定義を活用する隣接モデリングライブラリ(llama.cpp、mlxなど)と互換性があります。)

引用元: https://huggingface.co/docs/transformers/index

つまり、transformersは現代AI/MLエコシステムの共通言語のような存在だ。


Hugging Faceとは

transformersを理解するには、まずHugging Faceという会社を知る必要がある。

Hugging Faceは2016年に設立されたAIスタートアップで、当初はチャットボットを作っていた。その後、NLP(自然言語処理)のツールを開発する方向にピボットし、今では「AIのGitHub」とも呼ばれる存在になった。

提供しているものは:

  • Model Hub: 100万以上の事前学習済みモデルが公開されているプラットフォーム
  • Datasets: 機械学習用データセットのリポジトリ
  • Spaces: デモアプリを簡単に公開できるホスティング
  • 各種ライブラリ: transformers、datasets、diffusers、accelerateなど

インストール

# 基本インストール
pip install transformers

# PyTorchと一緒にインストール(推奨)
pip install "transformers[torch]"

# TensorFlowと一緒に
pip install "transformers[tf]"

Python 3.9以上、PyTorch 2.1以上またはTensorFlow 2.0以上が必要。


Pipeline API:最も簡単な使い方

transformersの最大の魅力は、数行で最先端モデルを動かせること。

感情分析

from transformers import pipeline

classifier = pipeline("sentiment-analysis")
result = classifier("I love this product!")
print(result)
# [{'label': 'POSITIVE', 'score': 0.9998}]

テキスト生成

generator = pipeline("text-generation", model="gpt2")
result = generator("Once upon a time", max_length=50)
print(result[0]['generated_text'])

質問応答

qa = pipeline("question-answering")
result = qa(
    question="What is the capital of France?",
    context="France is a country in Europe. Paris is the capital of France."
)
print(result)
# {'answer': 'Paris', 'score': 0.98, ...}

音声認識

transcriber = pipeline("automatic-speech-recognition", model="openai/whisper-base")
result = transcriber("audio.wav")
print(result['text'])

サポートするタスク

公式によると、以下のようなタスクをサポート:

テキスト

  • テキスト分類(感情分析、トピック分類など)
  • テキスト生成(GPT系)
  • 質問応答
  • 要約
  • 翻訳
  • 固有表現抽出(NER)
  • 穴埋め(Masked LM)

画像

  • 画像分類
  • 物体検出
  • セグメンテーション
  • 画像キャプション生成

音声

  • 音声認識(ASR)
  • 音声分類
  • テキスト読み上げ(TTS)

マルチモーダル

  • 画像+テキストの質問応答
  • ビジュアルQA
  • ドキュメント理解

モデルカードの読み方

Hugging Face Hubには100万以上のモデルがあるが、どれを選べばいいのか。

各モデルにはモデルカードという説明ページがある。確認すべきポイント:

1. タスク

何に使えるモデルか(text-generation、image-classification など)

2. ライセンス

商用利用可能か、クレジット表示が必要かなど

3. 言語

対応している言語(日本語対応が必要なら要チェック)

4. ダウンロード数・いいね数

人気度の指標。多いほど安定している傾向

5. Model size

モデルの大きさ。GPUメモリに収まるか確認


もう少し詳しく使う

Pipeline APIは便利だが、細かい制御が必要な場合は低レベルAPIを使う。

モデルとトークナイザーを個別にロード

from transformers import AutoTokenizer, AutoModelForSequenceClassification

# トークナイザー:テキストをモデルが理解できる形式に変換
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

# モデル:実際の推論を行う
model = AutoModelForSequenceClassification.from_pretrained("bert-base-uncased")

# 入力の準備
inputs = tokenizer("Hello, how are you?", return_tensors="pt")

# 推論
outputs = model(**inputs)

Fine-tuning(ファインチューニング)

自分のデータでモデルを追加学習させることもできる。

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=64,
    warmup_steps=500,
    weight_decay=0.01,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=train_dataset,
    eval_dataset=eval_dataset,
)

trainer.train()

主要なモデルファミリー

transformersでサポートされている代表的なモデル:

テキスト系

  • BERT: Googleの双方向エンコーダ。分類・質問応答に強い
  • GPT-2/GPT-Neo/GPT-J: テキスト生成モデル
  • T5: Text-to-Text変換。翻訳・要約に使える
  • LLaMA/Mistral/Qwen: 最新のオープンLLM
  • mBART/mT5: 多言語対応モデル

画像系

  • ViT: Vision Transformer。画像分類の定番
  • DETR: 物体検出
  • Swin Transformer: 階層的Vision Transformer

音声系

  • Whisper: OpenAIの音声認識モデル
  • Wav2Vec2: 音声の自己教師あり学習
  • SpeechT5: 音声合成・認識の統合モデル

マルチモーダル

  • CLIP: 画像とテキストの関連付け
  • BLIP: 画像キャプション生成
  • LLaVA: 視覚言語モデル

設計思想

公式ドキュメントより:

Fast and easy to use: Every model is implemented from only three main classes (configuration, model, and preprocessor) and can be quickly used for inference or training with Pipeline or Trainer.

(高速で使いやすい:すべてのモデルは3つの主要クラス(設定、モデル、前処理)のみで実装されており、PipelineやTrainerを使って素早く推論や学習に使えます。)

引用元: https://huggingface.co/docs/transformers/index

Configuration

モデルの構造を定義(レイヤー数、隠れ層の次元など)

Model

実際のニューラルネットワーク

Preprocessor(Tokenizer/Feature Extractor)

入力データをモデルが処理できる形式に変換

この3つが揃えば、どんなモデルも同じインターフェースで扱える。


キャッシュと保存先

モデルを初めてロードすると自動的にダウンロードされ、キャッシュされる。

デフォルトの保存先:

~/.cache/huggingface/hub/

環境変数で変更可能:

export TRANSFORMERS_CACHE=/path/to/cache

オフラインで使う

一度ダウンロードしたモデルはオフラインでも使える。

# 環境変数を設定
export TRANSFORMERS_OFFLINE=1
export HF_DATASETS_OFFLINE=1

# 通常通りスクリプトを実行
python my_script.py

まとめ

transformersは「AIモデルの民主化」を体現するライブラリだ。

主な特徴:

  • 100万以上の事前学習済みモデルにアクセス可能
  • Pipeline APIで数行のコードで推論
  • PyTorch、TensorFlow、JAXをサポート
  • 推論から学習まで一貫したインターフェース
  • テキスト・画像・音声・マルチモーダルに対応

最先端のAIを試したいなら、まずtransformersを触ってみるのが一番の近道だ。


参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?