はじめに
「モデルの方が良いですか?」 — 答えるには感情ではなく具体的な指標が必要です。この記事では、重要な指標をすべて説明します。
1. メトリクスの分類
┌──────────────────────────────────────────────────┐
│ LLM EVALUATION METRICS │
├──────────────────────────────────────────────────┤
│ │
│ Statistical (Lexical) Semantic │
│ ├── BLEU ├── BERTScore │
│ ├── ROUGE ├── Embedding cosine │
│ ├── METEOR └── BLEURT │
│ └── Exact Match │
│ │
│ Training-focused Task-specific │
│ ├── Perplexity ├── Accuracy │
│ └── Loss curve ├── F1 Score │
│ └── Pass@k (code) │
│ │
│ Model-based │
│ ├── LLM-as-a-Judge │
│ └── Pairwise comparison │
└──────────────────────────────────────────────────┘
2. 各メトリックを実装する
2.1 ROUGE (リコール指向の代役)
from rouge_score import rouge_scorer
scorer = rouge_scorer.RougeScorer(['rouge1','rouge2','rougeL'])
scores = scorer.score("reference text here", "generated text here")
print(f"ROUGE-L: {scores['rougeL'].fmeasure:.3f}")
2.2 BERTScore (意味的類似性)
from bert_score import score
P, R, F1 = score(["generated"], ["reference"], lang="vi")
print(f"BERTScore F1: {F1.mean():.3f}")
2.3 複雑さ
import math
# Perplexity = exp(average negative log-likelihood)
# Thấp hơn = model tốt hơn
perplexity = math.exp(avg_loss)
3. どのメトリックをいつ使用するか?
| タスク | プライマリメトリクス | 二次 |
|---|---|---|
| テキスト生成 | ROUGE-L、BERTScore | LLM-裁判官 |
| 分類 | 精度、F1 | 混同行列 |
| 要約 | ルージュ-1/2/L | BERTSスコア |
| 翻訳 | ブルー、メテオ | 人間の評価 |
| コード生成 | Pass@k、完全一致 | テストケース |
| 会話 | 裁判官としてのLLM | 人間の好み |
概要
- BLEU/ROUGE: 高速で再現可能ですが、語彙の重複のみを測定します
- BERTScore: 意味的な類似性を測定します - クリエイティブなタスクに適しています
- 複雑さ: 品質指標ではなくトレーニング診断
- LLM-as-Judge: 人間の好みとの相関が最も高い
- 組み合わせを使用します — 単一の指標だけでは十分ではありません
演習
- 評価スイートの実装: ROUGE + BERTScore + Perplexity
- 基本モデルと微調整モデルで実行 — スコアを比較
- ビジュアライゼーションの作成: メトリックを比較するレーダー チャート
- 分析: 「真の品質」を最もよく反映する指標はどれですか?