モデルが嘘をつく前に、評価用ハーネスがあなたに嘘をつく
評価スコアボードでは、両方のエンジンが失敗したことになっていた。
Llama3.2は6ケース中5ケースで失敗。 Anthropic Sonnetは6ケース中6ケースすべてで失敗。
ラベルは「malformed」となっていた。しかし、その原因は異なっていた。
1つの失敗は、クレジット切れによるAPIエラー。 1つの失敗は、CLIコマンドによるターミナル制御バイトがテキストを破損させたもの。 1つの失敗は、パーサーが読み取れないmarkdownのフェンスでラップされた有効なJSON。
もし最初の要約をそのまま公開していたら、私は嘘をついていたことになる。自分のコードの不備を、モデルのせいにしてしまっていたのだ。
要約を鵜呑みにせず、生のレコードを確認することで、これらのバグを見つけることができた。
最初のバグは、Ollamaを呼び出すためにCLIのサブプロセスを使用したことが原因だった。コマンドがスピナーやカーソル移動などのターミナルアニメーションを生成し、それらのANSI制御バイトがデータに混入してしまった。パーサーは不可視文字を検知してクラッシュした。
修正策:CLIサブプロセスから直接的なHTTP APIへの切り替え。
2番目のバグは、LLMがJSONをmarkdownのフェンスで囲むことが多いため、発生した。私のパーサーは生の文字列に対して json.loads() を使用していた。そのため、バックティックを検知して失敗した。
修正策:パースする前にコードフェンスを取り除く関数を追加する。
パイプラインを修正すると、真の結果が現れた。
モデルが「ダメ」だったわけではない。単にハーネスによってデータが乱されていただけなのだ。修正後、2つのモデル間の品質の差が明確になり、測定可能になった。
AI評価パイプラインへの教訓:
- 生の出力を保持すること。要約が「malformed」と言っているなら、生の出力こそが唯一の真実(source of truth)である。
- 失敗の理由を記録すること。単に「malformed」とするのではなく、「API error」や「parse error」と明記すること。
- テスト基準を固定すること。結果を良く見せるためにルールを変更してはならない。
- ハーネスをテスト対象のシステムの一部として扱うこと。
審判にかけられているのはモデルだけではない。あなたのコードも同様だ。
出典: https://dev.to/kenielzep97/your-harness-will-lie-to-you-before-your-model-does-662
オプションの学習コミュニティ: https://t.me/GyaanSetuAi
