LESSON

LLM Zero-shot分類

「学習データを用意しなくても分類できる?それがLLMのZero-shot能力だ。」

田中VPoEが驚きの表情を見せる。

「GPT-4やClaude等のLLMは、プロンプトを与えるだけでテキスト分類ができる。学習データゼロでここまでできるのかと驚くはずだ。ただし、コストと精度のトレードオフがある。」

Zero-shot分類の仕組み

従来ML: 学習データ(数千件) → モデル学習 → 予測
BERT:   学習データ(数百件) → Fine-tuning → 予測
LLM:    プロンプト(数行)   → API呼び出し → 予測

Zero-shot実装

from langchain_openai import ChatOpenAI
from pydantic import BaseModel, Field
from typing import Literal

class ClassificationResult(BaseModel):
    """分類結果"""
    category: Literal['商品問合せ', '返品・交換', '配送', 'アカウント', 'その他']
    confidence: float = Field(ge=0, le=1, description="確信度")
    reasoning: str = Field(description="分類理由")

def zero_shot_classify(text: str) -> dict:
    """LLMによるZero-shot分類"""
    llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
    structured_llm = llm.with_structured_output(ClassificationResult)

    prompt = f"""
    以下のカスタマーサポート問い合わせを分類してください。

    カテゴリ:
    - 商品問合せ: 商品の仕様、在庫、価格に関する質問
    - 返品・交換: 返品、交換、返金に関する要望
    - 配送: 配送状況、到着予定、配送先変更に関する質問
    - アカウント: ログイン、パスワード、会員情報に関する問題
    - その他: 上記に該当しない問い合わせ

    問い合わせ: {text}
    """

    result = structured_llm.invoke(prompt)
    return result.model_dump()

# 使用例
result = zero_shot_classify("注文した商品が3日経っても届きません")
print(result)
# {'category': '配送', 'confidence': 0.95, 'reasoning': '商品の配送遅延に関する問い合わせ'}

Few-shot分類

def few_shot_classify(text: str) -> dict:
    """Few-shot分類(例示付き)"""
    llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
    structured_llm = llm.with_structured_output(ClassificationResult)

    prompt = f"""
    以下のカスタマーサポート問い合わせを分類してください。

    ### 例:
    問い合わせ: 「この商品のサイズはSとMどちらがありますか」→ 商品問合せ
    問い合わせ: 「先日買った商品を返品したいのですが」→ 返品・交換
    問い合わせ: 「荷物の追跡番号を教えてください」→ 配送
    問い合わせ: 「パスワードを忘れてログインできません」→ アカウント

    ### 分類対象:
    問い合わせ: {text}
    """

    result = structured_llm.invoke(prompt)
    return result.model_dump()

コストとレイテンシの比較

手法学習データ学習時間推論コスト/件推論速度
Naive Bayes数千件≈0円<1ms
SVM数千件≈0円<1ms
BERT数百件時間≈0円10ms
LLM Zero-shot0件00.5〜2円500ms
LLM Few-shot5〜10件01〜3円800ms

使い分けの指針

条件推奨手法
大量の学習データあり + コスト重視SVM/Naive Bayes
中量の学習データ + 精度重視BERT Fine-tuning
学習データなし + 素早くPoCLLM Zero-shot
少量の例あり + 精度改善LLM Few-shot
大量処理 + 低コスト従来ML or BERT

まとめ

項目ポイント
Zero-shotプロンプトのみで分類、学習データ不要
Few-shot数件の例示で精度向上
コストAPI呼び出しコストが件数に比例
使い分けデータ量、コスト、精度、速度で判断

チェックリスト

  • Zero-shotとFew-shotの違いを説明できる
  • LLMによる構造化出力(Structured Output)を実装できる
  • 従来ML/BERT/LLMのコストと精度のトレードオフを理解した
  • ビジネス要件に応じた手法選択ができる

次のステップへ

LLM Zero-shot分類を理解した。次は3手法の比較と選定を学ぼう。

推定読了時間: 30分