AIの評価方法を知りたい
#wip
何処かで見た気がするので調べたらありそう
AIというか、promptの評価?
構造化prompting
prompt engineeringとか、類似検索とか、
評価方法や改善方法がわからなくて困るmrsekut.icon
具体的にはこの辺
Cosense上のメモに適度に批判してくれるbot
回答が微妙→修正→うーん良くなったのか...?
2025/2/22 類似記事を提案する
類似してるのか?→修正→類似してるのか...?
Coding AIを育てる
直観的に微妙、というのは感じるものの
どこが微妙なのか、どうすれば改善できるのか分かりづらい
promptを変更したとして、以前より良くなったのかどうかが評価しづらい
n回目とn+1回目の評価は比較的しやすい(感覚)が、
n回目とn+5回目とか、既にn回目の質を忘れているので評価できない
unit testみたいなイメージのことをしたい
要件がm個あって、それを常に全部満たせているか、というのを形式的に保証したい
今回の修正で、Aは修正されたが、代わりにBが壊れた、ということに気付けない
https://docs.anthropic.com/en/docs/test-and-evaluate/eval-tool
claude
GPT-4.icon
AIの評価方法について整理すると、大きく以下のようなアプローチが考えられます。
---
1. 定量評価
プロンプトの変更による改善を測定するために、定量的な指標を設定してスコアリングする方法。
スコアリング
BLEU (Bilingual Evaluation Understudy): 機械翻訳の精度評価によく使われるが、要約や生成タスクでも利用される。
ROUGE (Recall-Oriented Understudy for Gisting Evaluation): 要約タスクの評価で使われる。参考回答との一致率を測る。
METEOR (Metric for Evaluation of Translation with Explicit ORdering): BLEUよりも語順や同義語を考慮できる指標。
BERTScore: 事前学習済みBERTを使い、生成結果と期待される出力の類似度を測る。
GPTScore: 別のLLM(例えばGPT-4)を使って、生成結果の品質を評価。
カスタムスコア
独自のルールベース評価
例えば、プロンプトの期待する出力が「箇条書き」であれば、- や * の出現率を測る。
「冗長な説明を減らしたい」なら、単語数を制限する。
エラー率
誤情報が含まれている確率を手動ラベル付けして測定。
---
2. 定性評価
主観的な評価を形式化する方法。
ユーザーの「直感的に微妙」をシステマチックに評価できるようにする。
Lickertスケール評価
例えば「1(非常に悪い)~5(非常に良い)」のスコアをつける。
プロンプトごとにスコアをつけ、改善の前後比較を行う。
A/Bテスト
n回目とn+5回目の比較が難しい場合、過去の出力を保存し、対比して比較できるようにする。
どちらの出力が良いかを投票方式で評価。
---
3. ユニットテスト的評価
プロンプトの変更が他の条件を壊していないかチェックする方法。
自動リグレッションテスト
過去のプロンプト&出力のペアを保存し、新しいバージョンのAIに同じプロンプトを投げて結果を比較。
diff を取ることで、意図しない変更が発生していないかチェック。
期待される出力フォーマットのチェック
例えば、リスト形式ならリストのままであるか、コード出力なら適切なシンタックスになっているかなどを自動チェック。
逆プロンプトテスト
あるプロンプトで正しい出力が出た場合、その出力をもとに逆にプロンプトを推測し、元のプロンプトと一致するか検証。
---
4. 実装方法
これらを効率的に試せる仕組みを作る。
4.1 プロンプトテスト用のスクリプト
PythonやTypeScriptを使って、以下を自動化:
過去のプロンプトと出力をデータベース化(CSV/JSONなど)
新しいプロンプトをAIに投げて、過去の出力と比較
BERTScore/GPTScoreで品質を数値化
結果を可視化(例えば、matplotlib や D3.js でヒストグラム)
4.2 プロンプトエンジニアリング向けツール
OpenAI Evals
OpenAIが提供する評価フレームワーク。特定のタスクに対して一貫した評価を行える。
TruLens
LLMの評価をA/Bテストのように管理できるツール。
LangSmith
LangChainの開発者向けのLLM評価ツール。
---
5. 改善方法
プロンプトを改善する際の指針:
1. プロンプトテンプレート化
「何が良かったか・悪かったか」をメタデータ化し、変更時に追跡可能にする。
2. コンテキストの追加・削除
長すぎると冗長、短すぎると不十分。最適な長さをスコアリングして調整。
3. 出力のポストプロセス
生成された出力をルールベースで補正する(正規表現で不要な文を削除など)。
4. モデルバージョン管理
OpenAIのモデル(GPT-4-turboなど)はバージョンによって挙動が変わるため、どのバージョンを使ったのかも記録。
---
まとめ
定量評価(スコアリングやリグレッションテスト)
定性評価(A/Bテストやユーザーのフィードバック)
ユニットテスト的評価(プロンプト変更が他の部分を壊していないかチェック)
ツールを活用(OpenAI Evals, TruLens, LangSmith)
「プロンプトの修正で何が改善・悪化したか」を可視化できる環境を作れば、より良いプロンプトエンジニアリングが可能になるはず。