llm-evaluation について
自動指標、人手による評価、LLM を評価者とする手法で、LLM アプリケーションを体系的に評価するスキルです。モデルやプロンプトの比較、性能低下の追跡、予期しない挙動の調査に役立ちます。
主な機能
- 01生成・分類の自動評価指標
- 02検索評価指標
- 03人手による品質評価の観点
- 04個別評価とペア比較の LLM 判定
- 05参照あり・参照なしの評価
活用シーン
- 01モデルやプロンプトの比較
- 02デプロイ前の性能低下チェック
- 03RAG の検索品質の測定
- 04予期しないモデル出力の調査
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ wshobson/ agents --skill llm-evaluationインストール後、Claude Code で/llm-evaluationを入力して読み込まれたか確認します。
同梱ファイルreferences/details.md
詳細
LLM 評価
LLM アプリケーションのための包括的な評価戦略を、自動メトリクスから人手評価、A/B テストまで網羅して習得します。
このスキルを使用する場面
- LLM アプリケーションのパフォーマンスを体系的に測定する
- 異なるモデルやプロンプトを比較する
- デプロイ前にパフォーマンスのリグレッションを検出する
- プロンプト変更による改善を検証する
- 本番システムに対する信頼を構築する
- ベースラインを確立し、時間の経過とともに進捗を追跡する
- 予期しないモデルの挙動をデバッグする
評価の主な種類
1. 自動メトリクス
計算されたスコアを使用する、高速で再現可能、スケーラブルな評価。
テキスト生成:
- BLEU: N-gram の一致率(翻訳)
- ROUGE: 再現率指向(要約)
- METEOR: 意味的類似度
- BERTScore: 埋め込みベースの類似度
- Perplexity: 言語モデルの信頼度
分類:
- Accuracy: 正解率
- Precision/Recall/F1: クラスごとのパフォーマンス
- 混同行列: エラーパターン
- AUC-ROC: ランキング品質
検索(RAG):
- MRR: 平均逆順位
- NDCG: 正規化割引累積利得
- Precision@K: 上位 K 件の関連性
- Recall@K: 上位 K 件のカバレッジ
2. 人手評価
自動化が難しい品質面を手動で評価します。
評価軸:
- 正確性: 事実としての正しさ
- 一貫性: 論理的な流れ
- 関連性: 質問に答えているか
- 流暢さ: 自然な言語品質
- 安全性: 有害なコンテンツがないこと
- 有用性: ユーザーにとって役立つこと
3. LLM-as-Judge
より強力な LLM を使用して、弱いモデルの出力を評価します。
アプローチ:
- Pointwise: 個々の応答を採点する
- Pairwise: 2 つの応答を比較する
- Reference-based: ゴールドスタンダードと比較する
- Reference-free: 正解データなしで判定する
クイックスタート
from dataclasses import dataclass
from typing import Callable
import numpy as np
@dataclass
class Metric:
name: str
fn: Callable
@staticmethod
def accuracy():
return Metric("accuracy", calculate_accuracy)
@staticmethod
def bleu():
return Metric("bleu", calculate_bleu)
@staticmethod
def bertscore():
return Metric("bertscore", calculate_bertscore)
@staticmethod
def custom(name: str, fn: Callable):
return Metric(name, fn)
class EvaluationSuite:
def __init__(self, metrics: list[Metric]):
self.metrics = metrics
async def evaluate(self, model, test_cases: list[dict]) -> dict:
results = {m.name: [] for m in self.metrics}
for test in test_cases:
prediction = await model.predict(test["input"])
for metric in self.metrics:
score = metric.fn(
prediction=prediction,
reference=test.get("expected"),
context=test.get("context")
)
results[metric.name].append(score)
return {
"metrics": {k: np.mean(v) for k, v in results.items()},
"raw_scores": results
}
# Usage
suite = EvaluationSuite([
Metric.accuracy(),
Metric.bleu(),
Metric.bertscore(),
Metric.custom("groundedness", check_groundedness)
])
test_cases = [
{
"input": "What is the capital of France?",
"expected": "Paris",
"context": "France is a country in Europe. Paris is its capital."
},
]
results = await suite.evaluate(model=your_model, test_cases=test_cases)
詳細なパターンと実例
詳細なパターンのドキュメントは references/details.md にあります。上記のナビゲーション層では不十分な場合は、そのファイルを参照してください。
コメント
Markdown 対応