評価 — 体感ではなく数字で判断する
一言でいうと
LLMアプリケーションの改善は、評価セットなしには判断できず、ハルシネーションは、なくせるバグではなく、管理すべきリスクです。
なぜ必要なのか
プロンプトを直したら、よくなったようです。本当にそうでしょうか。10回動かして判断するなら、それはサンプル10個の実験で、直したプロンプトが別の種類の入力を壊したかどうかは、わかりません。
従来のソフトウェアにはテストがありました。入力に対する期待される出力が決まっているので、同じかどうかを比べればよいのです。LLMは、出力が毎回少しずつ違い、「正しい」の基準も1つではありません。そのため、評価の方法自体を設計する必要があります。
どう動くのか
評価は、3つの層に分けて考えると整理できます。
1層目: 決定的に検査できるもの。出力が有効なJSONか、必須フィールドがあるか、数値の範囲を守っているか、禁止語が入っていないか。こうした検査は安価で確実なので、最初に自動化します。形式エラーのかなりの部分が、ここで見つかります。
2層目: 正解があるもの。分類や抽出のように期待される出力が決まっている課題は、正解率とF1で測れます。RAGの検索段階もここに属します。正解の文書のリストさえあれば、Recall@KとMRRが出ます。最も安価に改善の余地を見つけられる層が、ここです。
3層目: 判断が必要なもの。回答が忠実か、役に立つか、口調が適切か。人間が評価するのが基準ですが、高価で遅いので、モデルを判定者として使う方法が広く使われています。注意点があります。モデルの判定には、長い回答を好む偏りがあり、自分自身が作った答えに甘い傾向も報告されています。そのため、人間の評価との相関を一度は確認し、判定基準を具体的なチェックリストに分けるほうが、安定します。
ハルシネーションは、2種類に分けると対応が分かれます。
- 外的ハルシネーション: コンテキストにない内容をでっち上げたものです。忠実性の検査で見つけられ、根拠の文を示させたり、しきい値未満なら拒否させたりして減らします。
- 内的ハルシネーション: コンテキストにある内容を誤って要約したり、ひっくり返したりしたものです。こちらのほうが危険です。出典が付いているため、かえって信頼を得てしまうからです。
現場での姿
評価セットは、完璧である必要はありません。50個だけでも、ないよりはるかによいです。実際のユーザーの質問のうち、失敗したものを集めておくことから始めればよいのです。そして、事故が起きるたびにそのケースを評価セットに追加すれば、時間がたつほど、リグレッションテストとしての価値が大きくなります。
コストも管理の対象です。評価を毎コミットですべて実行すると高価なので、安価な1層目の検査は常に実行し、高価な3層目の評価はデプロイ前にだけ実行する、というように分けます。
最後に、温度の設定にも触れておく価値があります。評価のときは、温度を下げて変動を減らすほうが、比較に有利です。ただし、本番の設定と違う場合は、その差を考慮する必要があり、本番で温度が高いなら、何回も実行して分散まで見るほうが正確です。
ハルシネーションを減らす順序
「ハルシネーションをなくしてほしい」という要求は、モデルの交換では解決しません。構造で減らします。
1. 根拠を与える(RAG)。モデルが知っていることに頼らず、文書を一緒に入れます。これだけで、事実の誤りが大きく減ります。ただし、検索が間違うと、根拠のある嘘になるので、検索の品質がそのまま回答の品質です。
2. 根拠を引用させる。文ごとに出典の断片番号を付けさせれば、引用のない文を除外できます。検証も、人間が行いやすくなります。
{"answer": "환불은 7영업일 안에 가능합니다 [2].",
"citations": [{"id": 2, "quote": "환불 요청은 결제일로부터 7영업일…"}]}
3. わからなければわからないと言わせる。システムプロンプトに、「提供された文書にない場合は、『文書では確認できません』と答えなさい」と明記します。これを入れないと、モデルはいつも何かを作り出します。
4. 検証器を付ける。回答の引用が実際に文書にあるかを、プログラムで確認します。ない引用は、それ自体がハルシネーションの証拠です。
ハルシネーションを測る方法
| 指標 | 測り方 | 自動化 |
|---|---|---|
| 引用の正確さ | 引用した文が原文にあるか | 文字列の照合で可能 |
| 根拠の忠実性 | 回答の主張が文書で裏付けられるか | LLMジャッジ |
| 無回答率 | わからないと答えた割合 | 自動 |
| 誤った無回答 | 答えられるのにわからないと言った割合 | 評価セットに正解があるので自動 |
最後の行が重要です。わからないと言うことを強く求めすぎると、答えられるものまで回避します。2つの指標を一緒に見ないと、バランスが取れません。
評価セットに必ず入れるもの
- 文書に答えがある質問: 正確に答えるか。
- 文書に答えがない質問: わからないと言うか、でっち上げるか。
- 前提が間違った質問: 「去年廃止されたあの方針ですが」のようなもの。前提を問い返すか。
- 複数の文書を総合する必要がある質問: 1つの断片だけを見て答えていないか。
- 最新性が必要な質問: 古い文書を根拠に、自信を持って答えていないか。
2番目と3番目が、ハルシネーションを最もよく浮かび上がらせます。うまくいく質問だけを集めておくと、スコアは高いのに、実際には作り話を続けるシステムになります。
続くクイズで確認すること
何をどの層で測るべきか、モデルによる判定の偏りをどう扱うべきかを判断できるかを確認します。