3秒でわかる
モデルやプロンプトの出力が期待した品質かを、指標とテストデータで数値として測る作業。感想ではなく数字で改善の可否を判断するために行います。
30秒図解
もう少し詳しく
どういうものか
評価は、システムの出力がどれだけ期待に沿っているかを測る作業です。機械学習では正解付きのテストデータと指標を使い、生成 AI では正解が一意に決まらないため、採点基準を決めたうえで人手や別のモデルに採点させます。
分類なら正解率、適合率、再現率、F1。生成なら、必要な項目が含まれているか、指定した形式を守っているか、事実に反する記述がないか、といった観点を数え上げます。
なぜ必要か
プロンプトを直すたびに数件を目で見て「良くなった気がする」で進めると、直した箇所以外が悪化しても気づけません。人の記憶は前回の出力を正確には覚えていません。
固定のテストセットと指標を用意しておけば、変更の前後を同じ物差しで比べられます。悪化したら戻す、という判断が可能になるだけで、改善の速度は大きく変わります。本番投入の可否を関係者に説明するときも、数字があるかどうかで通り方が違います。
具体例
cases = [
{"input": "領収書の再発行はできますか", "must_include": ["マイページ", "90日"]},
{"input": "解約したい", "must_include": ["設定", "即日"]},
]
def score(answer, case):
hit = sum(1 for w in case["must_include"] if w in answer)
return hit / len(case["must_include"])
results = [score(chatbot(c["input"]), c) for c in cases]
print(f"必須項目の充足率 {sum(results) / len(results):.2f}")from sklearn.metrics import precision_score, recall_score, f1_score
print(precision_score(y_true, y_pred)) # 陽性と答えたうち本当に陽性だった割合
print(recall_score(y_true, y_pred)) # 本当の陽性のうち拾えた割合
print(f1_score(y_true, y_pred)) # 両者の調和平均つまずきやすいところ
覚え方
評価は「体重計」です。乗らずにダイエットの成否は語れません。毎回同じ体重計に、同じ条件で乗ることが前提になります。