1
3

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ってなんだ?〜Hugging Face製AIライブラリで最先端モデルを3行で動かす〜

1
Posted at

この記事の対象読者

  • LLMやAIモデルを自分のプロジェクトで使いたいPythonエンジニア
  • 「Transformer」というアーキテクチャは知っているが、実装をどう触ればいいかわからない方
  • HuggingFaceのエコシステムに興味があるが、何から始めれば良いかわからない方

この記事で得られること

  • Transformers(ライブラリ)の正体: Transformer(アーキテクチャ)との決定的な違い
  • 3行でAI実行: pipeline()を使ったテキスト生成・感情分析・翻訳の即実行
  • 実務レベルの活用: モデルのロード、ファインチューニング、ローカル推論までの流れ

この記事で扱わないこと

  • Transformerアーキテクチャの内部構造(別記事で解説)
  • Self-Attentionの数式やQ/K/Vの仕組み
  • HuggingFace Hub全体の解説(Hub/Spaces/Datasets等)

1. Transformersとの出会い

ある日、LLMを自分のPCで動かしたくなった。しかしPyTorchのドキュメントを読み、モデルの重みをダウンロードし、トークナイザーを設定し、推論コードを書き...と、やることが多すぎて挫折しかけた。

そんな時に出会ったのが、Transformersだ。

from transformers import pipeline
generator = pipeline("text-generation", model="Qwen/Qwen2.5-1.5B")
print(generator("AIの未来は")[0]["generated_text"])

たった3行で、15億パラメータのAIモデルが動いた。

Transformersとは、HuggingFaceが開発するオープンソースのPythonライブラリで、最先端のAIモデルを簡単にダウンロード・実行・学習できるツールキット。2026年1月にv5.0がリリースされ、GitHub 156K Stars、累計12億インストール、1日あたり300万回以上pipインストールされるモンスターライブラリだ。

超重要な注意: 「Transformer」(単数形)はニューラルネットワークのアーキテクチャ(設計図)。「Transformers」(複数形のs付き)はHuggingFaceが開発したPythonライブラリ。名前が1文字違いなだけで、完全に別物。

Transformer Transformers
種類 ニューラルネットワークのアーキテクチャ Pythonのライブラリ
提唱/開発 Google Brain(2017年) HuggingFace社(2018年〜)
インストール できない(概念だから) pip install transformers
中身 Self-Attention + FFN + Residual等 モデル定義 + トークナイザー + 推論/学習API

ここまでで、Transformersがどんなものか、なんとなくイメージできたでしょうか。次は、この記事で使う用語を整理しておきましょう。


2. 前提知識の確認

本題に入る前に、この記事で登場する用語を確認します。

2.1 事前学習済みモデル(Pre-trained Model)とは

大量のデータで既に学習が終わっているモデル。Transformersの核心は、この事前学習済みモデルをダウンロードして即使えること。自分でゼロから学習する必要がない。

2.2 トークナイザー(Tokenizer)とは

テキストをモデルが処理できる数値(トークンID)に変換するツール。「こんにちは世界」→ [12345, 67890] のように変換する。モデルごとに専用のトークナイザーがあり、Transformersライブラリで自動的に管理される。

2.3 Pipeline(パイプライン)とは

Transformersの最も手軽なインターフェース。「テキスト生成」「感情分析」「翻訳」などのタスクを指定するだけで、モデルのダウンロード → トークナイズ → 推論 → 後処理を全部やってくれる。

2.4 Hub(ハブ)とは

HuggingFaceが運営するモデル共有プラットフォーム。200万以上の学習済みモデルがホストされており、Transformersからモデル名を指定するだけで自動ダウンロードできる。

これらの用語が押さえられたら、Transformersの背景を見ていきましょう。


3. Transformersが生まれた背景

3.1 以前の課題:モデルを使うのが難しすぎた

2018年以前、最先端のAIモデルを使うには以下が必要だった。

手順 内容 苦痛度
1 論文を読んでアーキテクチャを理解 ★★★★★
2 PyTorch/TensorFlowでモデルを再実装 ★★★★★
3 学習済み重みを研究者のサイトから探してダウンロード ★★★★
4 トークナイザーを自分で設定 ★★★
5 推論コードを書いてデバッグ ★★★

つまり、BERTを使いたいだけでも数日〜数週間かかった。

3.2 HuggingFaceの登場

2016年にフランス人の起業家が設立したHuggingFaceは、当初はチャットボットアプリの会社だった。しかし2018年、BERTの登場をきっかけに方針を転換。「最先端のAIモデルを誰でも簡単に使えるようにする」というミッションの下、Transformersライブラリの開発を開始した。

3.3 Transformersの進化

時期 バージョン トピック
2018年 初期(pytorch-pretrained-bert) BERT専用ライブラリとして誕生
2019年 v2.0 BERT以外のモデル(GPT-2, XLNet等)をサポート、名前を「Transformers」に変更
2020年11月 v4.0 TensorFlow/Flax対応、40アーキテクチャ
2021-2024年 v4.x系 急速に拡大、数百のモデルアーキテクチャをサポート
2026年1月 v5.0 5年ぶりのメジャーアップデート。400+アーキテクチャ、PyTorchファースト

v5.0のリリースは5年ぶりの大型アップデートで、1,200コミットが含まれる。毎週のマイナーリリースに切り替わり、新モデル対応がさらに高速化された。

背景がわかったところで、基本的な仕組みを見ていきましょう。


4. 基本概念と仕組み

4.1 Transformersの3つのコア概念

Transformersの全ての機能は、3つのクラスに集約される。

クラス 役割 人間に例えると
Model ニューラルネットワーク本体
Tokenizer テキスト ↔ トークンIDの変換 言語を理解する耳と口
Config モデルの設計パラメータ 脳の構造を定義する設計図
テキスト入力 → [Tokenizer] → トークンID → [Model] → 出力テンソル → [後処理] → 結果
                                             ↑
                                          [Config]
                                      (d_model, n_heads等)

4.2 pipeline() — 最も簡単なインターフェース

pipeline()は上記3つを自動で組み合わせてくれるラッパー。

from transformers import pipeline

# テキスト生成
generator = pipeline("text-generation", model="Qwen/Qwen2.5-1.5B")

# 感情分析
classifier = pipeline("sentiment-analysis")

# 翻訳
translator = pipeline("translation_en_to_fr", model="Helsinki-NLP/opus-mt-en-fr")

対応タスク一覧:

タスク名 説明
text-generation テキスト生成 GPT系、LLaMA系
text-classification テキスト分類(感情分析等) BERT系
question-answering 質問応答 BERT系
summarization 要約 T5、BART
translation_xx_to_yy 翻訳 Helsinki-NLP系
fill-mask マスク穴埋め BERT
image-classification 画像分類 ViT
automatic-speech-recognition 音声認識 Whisper
text-to-speech 音声合成 Bark

4.3 手動でモデルを操作する(AutoModel + AutoTokenizer

pipeline()は便利だが、細かい制御が必要な場合はモデルとトークナイザーを個別に扱う。

from transformers import AutoTokenizer, AutoModelForCausalLM

# モデルとトークナイザーをHubからダウンロード
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-1.5B")
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-1.5B")

# テキスト → トークンID
inputs = tokenizer("Pythonの魅力は", return_tensors="pt")

# 推論
outputs = model.generate(**inputs, max_new_tokens=50)

# トークンID → テキスト
text = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(text)

4.4 Transformersのエコシステム内での位置付け

Transformersは単独で動くが、HuggingFaceのエコシステムの他のライブラリと組み合わせることで真価を発揮する。

ライブラリ 役割 Transformersとの関係
transformers モデル定義・推論・学習 中核
datasets データセットの読み込み・前処理 学習データの供給元
accelerate 分散学習・混合精度学習 学習の高速化
peft LoRA等のパラメータ効率化 ファインチューニングの効率化
trl RLHF(人間のフィードバック学習) ChatGPTのような対話調整
diffusers 画像/動画生成(Stable Diffusion等) マルチモーダル領域

さらにv5からは、推論エンジン(vLLM、SGLang、TGI)や変換ツール(llama.cpp、MLX、ONNX)のバックエンドとしても機能する。Transformersでモデルが追加されると、これらのツール全てで自動的に使えるようになるという設計。

基本概念が理解できたところで、実際にコードを書いて動かしてみましょう。


5. 実践:Transformersで各種AIタスクを実行

5.1 環境構築

pip install transformers[torch] accelerate

5.2 環境別の設定ファイル

開発環境用(config.yaml)

# config.yaml - 開発・実験用
model:
  name: "Qwen/Qwen2.5-1.5B"
  device: "cpu"             # GPUなしでも動く小型モデル
  torch_dtype: "float32"
  max_new_tokens: 100

cache:
  dir: "./cache"            # モデルキャッシュをローカルに
  offline_mode: false

logging:
  level: "DEBUG"
  show_download_progress: true

本番環境用(config.production.yaml)

# config.production.yaml - 推論用
model:
  name: "meta-llama/Llama-3.1-8B-Instruct"
  device: "cuda"
  torch_dtype: "float16"
  max_new_tokens: 2048
  use_flash_attention: true
  load_in_4bit: true        # 4bit量子化でVRAM節約

cache:
  dir: "${HF_HOME}/hub"
  offline_mode: true         # 本番ではダウンロード禁止

logging:
  level: "WARNING"
  show_download_progress: false

テスト環境用(config.test.yaml)

# config.test.yaml - CI/CD用
model:
  name: "hf-internal-testing/tiny-random-gpt2"  # テスト用の極小モデル
  device: "cpu"
  torch_dtype: "float32"
  max_new_tokens: 10

cache:
  dir: "/tmp/hf_cache"
  offline_mode: false

logging:
  level: "ERROR"
  show_download_progress: false

5.3 基本タスクの実行

"""
Transformersライブラリの基本タスク実行デモ
実行方法: python transformers_demo.py
前提条件: pip install transformers[torch]
"""
from transformers import pipeline


def demo_text_generation():
    """テキスト生成"""
    print("--- テキスト生成 ---")
    generator = pipeline(
        "text-generation",
        model="Qwen/Qwen2.5-0.5B",  # 0.5Bの軽量モデル
        device_map="auto",
    )
    result = generator(
        "Pythonが人気の理由は",
        max_new_tokens=50,
        do_sample=True,
        temperature=0.7,
    )
    print(result[0]["generated_text"])
    print()


def demo_sentiment_analysis():
    """感情分析"""
    print("--- 感情分析 ---")
    classifier = pipeline(
        "sentiment-analysis",
        model="nlptown/bert-base-multilingual-uncased-sentiment",
    )
    texts = [
        "This product is amazing!",
        "Terrible experience, never buying again.",
        "It's okay, nothing special.",
    ]
    results = classifier(texts)
    for text, result in zip(texts, results):
        print(f"  {text}")
        print(f"{result['label']} (confidence: {result['score']:.3f})")
    print()


def demo_question_answering():
    """質問応答"""
    print("--- 質問応答 ---")
    qa = pipeline("question-answering", model="deepset/roberta-base-squad2")
    context = """
    Transformers is a Python library developed by Hugging Face.
    It was first released in 2018 and has over 156K stars on GitHub.
    The latest major version is v5.0, released in January 2026.
    """
    questions = [
        "Who developed Transformers?",
        "When was v5.0 released?",
        "How many GitHub stars does it have?",
    ]
    for q in questions:
        result = qa(question=q, context=context)
        print(f"  Q: {q}")
        print(f"  A: {result['answer']} (score: {result['score']:.3f})")
    print()


def demo_summarization():
    """要約"""
    print("--- 要約 ---")
    summarizer = pipeline("summarization", model="facebook/bart-large-cnn")
    text = """
    The Transformer architecture was introduced in 2017 by Google researchers
    in the paper 'Attention Is All You Need'. It replaced RNNs with
    self-attention mechanisms, enabling parallel processing of sequences.
    This breakthrough led to models like BERT, GPT, and T5, which
    revolutionized natural language processing. By 2026, virtually all
    state-of-the-art AI models are based on the Transformer architecture.
    """
    result = summarizer(text.strip(), max_length=50, min_length=20)
    print(f"  原文: {len(text.split())} words")
    print(f"  要約: {result[0]['summary_text']}")


if __name__ == "__main__":
    print("=" * 55)
    print("Transformers ライブラリ デモ")
    print("=" * 55)
    demo_text_generation()
    demo_sentiment_analysis()
    demo_question_answering()
    demo_summarization()

5.4 手動でのモデル操作(中級者向け)

"""
AutoModel + AutoTokenizer による手動操作
実行方法: python manual_model.py
"""
import torch
from transformers import AutoTokenizer, AutoModelForCausalLM


def manual_inference():
    """手動でモデルを操作して推論"""
    model_name = "Qwen/Qwen2.5-0.5B"

    # Step 1: トークナイザーとモデルをロード
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForCausalLM.from_pretrained(
        model_name,
        torch_dtype=torch.float32,
        device_map="cpu",
    )

    # Step 2: テキストをトークン化
    prompt = "Transformerアーキテクチャの最大の利点は"
    inputs = tokenizer(prompt, return_tensors="pt")

    print(f"入力テキスト: {prompt}")
    print(f"トークンID: {inputs['input_ids'].tolist()}")
    print(f"トークン数: {inputs['input_ids'].shape[1]}")

    # Step 3: 推論(テキスト生成)
    with torch.no_grad():
        outputs = model.generate(
            **inputs,
            max_new_tokens=80,
            do_sample=True,
            temperature=0.7,
            top_p=0.9,
        )

    # Step 4: トークンIDをテキストに変換
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)
    print(f"\n生成テキスト:\n{generated_text}")

    # モデル情報の表示
    total_params = sum(p.numel() for p in model.parameters())
    print(f"\n--- モデル情報 ---")
    print(f"モデル名:      {model_name}")
    print(f"パラメータ数:  {total_params:,}")
    print(f"モデルサイズ:  ~{total_params * 4 / 1024**3:.1f} GB (FP32)")
    print(f"語彙サイズ:    {tokenizer.vocab_size:,}")


if __name__ == "__main__":
    manual_inference()

5.5 実行結果

$ python transformers_demo.py
=======================================================
Transformers ライブラリ デモ
=======================================================
--- テキスト生成 ---
Pythonが人気の理由は、そのシンプルな文法と豊富なライブラリにあります。
初心者でも読みやすいコードを書ける一方、データサイエンスやAI開発では...

--- 感情分析 ---
  This product is amazing!
  → 5 stars (confidence: 0.723)
  Terrible experience, never buying again.
  → 1 star (confidence: 0.812)
  It's okay, nothing special.
  → 3 stars (confidence: 0.456)

--- 質問応答 ---
  Q: Who developed Transformers?
  A: Hugging Face (score: 0.923)
  Q: When was v5.0 released?
  A: January 2026 (score: 0.897)
  Q: How many GitHub stars does it have?
  A: 156K (score: 0.814)

5.6 よくあるエラーと対処法

エラー/症状 原因 対処法
OSError: Can't load tokenizer for 'xxx' モデル名の誤り or Hub未公開 huggingface.co/models で正確なモデル名を確認
OutOfMemoryError モデルがVRAMに収まらない load_in_4bit=True or より小さいモデルを使用
ImportError: ... torch ... PyTorch未インストール pip install transformers[torch]
ダウンロードが遅い/止まる ネットワーク問題 HF_HUB_ENABLE_HF_TRANSFER=1 + pip install hf_transfer
ValueError: text-generation not supported モデルがタスク非対応 Hub上でモデルの対応タスクを確認
v4からv5でエラー 非推奨APIの削除 v5 Migration Guide を参照

5.7 環境診断スクリプト

#!/usr/bin/env python3
"""Transformers環境の診断 — 実行: python check_transformers.py"""
import sys

def check():
    issues = []
    print(f"  Python: {sys.version.split()[0]}")

    if sys.version_info < (3, 10):
        issues.append("Python 3.10以上が必要(Transformers v5要件)")

    # transformers
    try:
        import transformers
        v = transformers.__version__
        print(f"  ✅ transformers: {v}")
        major = int(v.split(".")[0])
        if major < 5:
            issues.append(f"v{v}は古い。pip install -U transformers でv5に更新推奨")
    except ImportError:
        issues.append("transformers 未インストール: pip install transformers[torch]")

    # PyTorch
    try:
        import torch
        print(f"  ✅ torch: {torch.__version__}")
        if torch.cuda.is_available():
            name = torch.cuda.get_device_name(0)
            vram = torch.cuda.get_device_properties(0).total_mem / 1024**3
            print(f"  ✅ GPU: {name} ({vram:.0f}GB)")
        else:
            print("  ⚠️  GPU: 利用不可(CPU推論のみ)")
    except ImportError:
        issues.append("torch 未インストール: pip install torch")

    # accelerate
    try:
        import accelerate
        print(f"  ✅ accelerate: {accelerate.__version__}")
    except ImportError:
        print("  ⚠️  accelerate: 未インストール(device_map='auto'に必要)")

    # tokenizers
    try:
        import tokenizers
        print(f"  ✅ tokenizers: {tokenizers.__version__}")
    except ImportError:
        print("  ⚠️  tokenizers: 未インストール(Fastトークナイザーに必要)")

    # キャッシュ場所
    import os
    cache_dir = os.environ.get("HF_HOME", os.path.expanduser("~/.cache/huggingface"))
    print(f"  📁 キャッシュ: {cache_dir}")

    if issues:
        print("\n❌ 問題:")
        for i in issues:
            print(f"  - {i}")
    else:
        print("\n🎉 環境は正常です")

if __name__ == "__main__":
    print("=" * 40)
    print("Transformers 環境診断")
    print("=" * 40)
    check()

実装方法がわかったので、次は具体的なユースケースを見ていきます。


6. ユースケース別ガイド

6.1 ユースケース1: ローカルLLMチャットボット

想定読者: OllamaLM Studioを使わずに、Transformersだけでローカルチャットボットを構築したい方

サンプルコード:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

model_name = "Qwen/Qwen2.5-1.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
    model_name, torch_dtype=torch.float16, device_map="auto"
)

messages = []
print("チャットボット起動('quit' で終了)")

while True:
    user_input = input("\nYou: ")
    if user_input.lower() == "quit":
        break

    messages.append({"role": "user", "content": user_input})
    text = tokenizer.apply_chat_template(
        messages, tokenize=False, add_generation_prompt=True
    )
    inputs = tokenizer(text, return_tensors="pt").to(model.device)

    with torch.no_grad():
        output = model.generate(**inputs, max_new_tokens=256, temperature=0.7)

    response = tokenizer.decode(
        output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True
    )
    messages.append({"role": "assistant", "content": response})
    print(f"AI: {response}")

6.2 ユースケース2: テキスト分類APIサーバー

想定読者: 社内のテキスト分類をAPIとして提供したい方

サンプルコード:

"""
Transformers v5の transformers serve でも同等のことができるが、
ここでは仕組みの理解のためFastAPIで手動実装する。
"""
from fastapi import FastAPI
from transformers import pipeline

app = FastAPI()
classifier = pipeline(
    "text-classification",
    model="nlptown/bert-base-multilingual-uncased-sentiment",
    device_map="auto",
)

@app.post("/classify")
async def classify(text: str):
    result = classifier(text)
    return {"text": text, "label": result[0]["label"], "score": result[0]["score"]}

# 実行: uvicorn api_server:app --host 0.0.0.0 --port 8000
# テスト: curl -X POST "http://localhost:8000/classify?text=Great+product"

6.3 ユースケース3: GGUFモデルのロード(llama.cppとの連携)

想定読者: GGUF形式の量子化モデルをTransformersで使いたい方

サンプルコード:

from transformers import AutoTokenizer, AutoModelForCausalLM

# GGUFファイルを直接ロード(v5で改善された機能)
model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Llama-2-7B-Chat-GGUF",
    gguf_file="llama-2-7b-chat.Q4_K_M.gguf",
    device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("TheBloke/Llama-2-7B-Chat-GGUF")

inputs = tokenizer("Hello, how are you?", return_tensors="pt").to(model.device)
output = model.generate(**inputs, max_new_tokens=100)
print(tokenizer.decode(output[0], skip_special_tokens=True))

ユースケースを把握できたところで、この先の学習パスを確認しましょう。


7. 学習ロードマップ

初級者向け(まずはここから)

  1. pipeline() で各タスク(生成、分類、QA、要約)を試す
  2. Hugging Face公式チュートリアルを読む
  3. Hubでモデルを探してpipelineで動かす

中級者向け(実践に進む)

  1. AutoModel + AutoTokenizer で手動推論を行う
  2. Trainer API でファインチューニングを試す(datasetsと組み合わせ)
  3. peft(LoRA)で効率的なファインチューニングを学ぶ

上級者向け(さらに深く)

  1. accelerate + deepspeed で分散学習を構築
  2. trl でRLHF(人間のフィードバック学習)を実装
  3. vLLM/SGLang との連携で本番推論基盤を構築

8. まとめ

この記事では、Transformersライブラリについて以下を解説しました:

  1. Transformer(アーキテクチャ)との違い: 単数形は設計図、複数形はPythonライブラリ
  2. 3行でAI実行: pipeline()でテキスト生成・感情分析・QAを即実行
  3. エコシステム全体: datasets, accelerate, peft, trl等との連携と、v5での進化

私の所感

Transformersの最大の功績は、「最先端のAIモデルを使うために研究者である必要がなくなった」という民主化にある。

v5のリリースで特に印象的だったのは、「エコシステムの接着剤」としての役割の明確化だ。vLLM、SGLang、llama.cpp、MLXなどの推論エンジンが全てTransformersのモデル定義を参照する設計は、「Transformersにモデルが追加されれば、全ツールで即使える」という圧倒的な利便性を生む。

一方で注意点もある。Transformersは便利すぎるがゆえに、内部でTransformer(アーキテクチャ)が何をしているか理解しないまま使っている人が多い。「なぜ動くのか」を知りたい方は、ぜひSelf-Attentionの記事やTransformerアーキテクチャの記事も併せて読んでほしい。


参考文献


この記事が参考になったら、いいね・ストックをお願いします!

Xでも技術情報を発信しています → https://x.com/geneLab_999

1
3
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
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?