AI・機械学習
上級

Classifier-Free Guidance(テキスト生成)(クラシファイヤーフリーガイダンステキストセイセイ)

画像生成で実績を持つCFG(Classifier-Free Guidance)をテキスト生成に応用したデコーディング手法。条件付き確率と無条件確率の差分をスケールして「指示への忠実度」を強化し、特に指示追従・スタイル制御に効果的。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
cfg
classifier-free-guidance
decoding-strategy
text-generation

テキスト生成へのClassifier-Free Guidance(CFG)とは

Classifier-Free Guidance(CFG)は元々画像生成(DALL-E 2, Stable Diffusion)で「プロンプトへの忠実度」を制御するために使われていた技術です。Sanchez et al.(2023)がこれをテキスト生成に応用し、LLMの指示追従性を大幅に改善する手法として提案しました。

基本原理

画像生成でのCFG

ε_cfg = ε_uncond + guidance_scale × (ε_cond - ε_uncond)
  • ε_cond: 「犬の写真」というプロンプトを与えた場合の予測ノイズ
  • ε_uncond: 空のプロンプトで条件なしの場合の予測ノイズ
  • guidance_scaleを大きくするほど「犬らしさ」が強調される

テキスト生成への転用

同じ考え方をlogitsに適用します:

def cfg_decoding(model, input_ids, unconditional_ids, guidance_scale=1.5):
    # 条件付き(指示あり)のlogits
    logits_cond = model(input_ids).logits[:, -1, :]
    
    # 無条件(空プロンプト等)のlogits
    logits_uncond = model(unconditional_ids).logits[:, -1, :]
    
    # CFG適用
    logits_cfg = logits_uncond + guidance_scale * (logits_cond - logits_uncond)
    
    return sample_from(logits_cfg)
  • guidance_scale = 1.0: 通常のサンプリングと同じ
  • guidance_scale > 1.0: 指示への忠実度が上昇(多様性低下)
  • guidance_scale < 1.0: 指示を無視する方向(通常は使わない)

実際の適用例

指示追従の改善

通常のデコーディング:
指示: "Please respond only in Japanese."
出力: "Of course! Let me explain in Japanese. はい、日本語でお答えします..."
(英語が混入)

CFG (guidance_scale=2.0):
出力: "はい、もちろんです。ご質問にお答えします..."
(より忠実に日本語のみ)

スタイル制御

# フォーマルなスタイルへの誘導例(概念)
formal_prompt = "Write in a formal academic style: " + user_input
empty_prompt = ""  # 無条件入力

cfg_output = cfg_decoding(
    model, 
    formal_prompt, 
    empty_prompt, 
    guidance_scale=1.8
)

Hugging Faceでの実装

from transformers import AutoModelForCausalLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8B")
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B")

inputs = tokenizer("Write a poem about cherry blossoms", return_tensors="pt")

# CFG: unconditional_ids で空/弱い条件を指定
unconditional = tokenizer("", return_tensors="pt")

output = model.generate(
    **inputs,
    guidance_scale=1.5,
    negative_prompt_ids=unconditional.input_ids,
    max_new_tokens=200,
)

guidance_scaleのチューニング目安

guidance_scale特性
1.0通常サンプリング
1.2〜1.5軽度の指示強化
1.5〜2.0推奨範囲(指示追従+多様性バランス)
2.0〜3.0強い指示追従(多様性低下)
3.0以上質が低下(hallucination増加)

活用場面

  • 多言語制御: 指定言語での一貫した出力
  • トーン制御: フォーマル/カジュアルの厳格な適用
  • キャラクター制御: ロールプレイでのキャラクター一貫性
  • フォーマット遵守: JSON/Markdown等の形式厳守

まとめ

CFG for Text Generationは画像生成の成功を言語モデルに応用した手法です。指示への忠実度を数値で制御できる点が強みで、2025年時点でHugging Face等での実装が進んでいます。特にファインチューニングなしに指示追従性を向上させたい場面で有効です。

この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/7