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-shot | 0件 | 0 | 0.5〜2円 | 500ms |
| LLM Few-shot | 5〜10件 | 0 | 1〜3円 | 800ms |
使い分けの指針
| 条件 | 推奨手法 |
|---|---|
| 大量の学習データあり + コスト重視 | SVM/Naive Bayes |
| 中量の学習データ + 精度重視 | BERT Fine-tuning |
| 学習データなし + 素早くPoC | LLM 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分