← 機械学習テキスト 一覧

🎓 レベル:標準 | 重要度:B(標準)

📎 前提:アラインメント | 関連:評価指標(分類)とROC・AUC(評価の土台)

要点(BLUF)


1. なぜ評価が難しいのか

分類や回帰なら、正解ラベルと突き合わせて精度や ROC-AUC を出せば済みました。LLMの生成タスクはそうはいきません。理由は単純で、「良い出力」が一意に定まらないからです。

そこで実務では、次の3種類の評価を組み合わせます。

方法内容弱点
ベンチマーク知識・推論・コーディング等を多数の問題で自動採点データ汚染・飽和・過程を見ない
人間評価人が出力の質を比較・採点(例:A/Bの勝敗)高コスト・主観・スケールしない
LLM-as-a-judge強いLLMに採点・順位付けをさせるバイアス・自己優遇・操作可能

データ汚染(contamination)

テストの問題と答えが、事前学習データに混入してしまう現象です。Web全体を学習に使う以上(事前学習とスケーリング則)、有名ベンチマークがコーパスに紛れ込む確率は高くなります。

汚染が起きると、モデルは推論しているのではなく暗記を再生しているだけかもしれません。それでもスコアは上がるので、「賢くなった」ように見えてしまう。これがベンチマーク高得点=賢い、とは言えない最大の理由です。

対策の方向は「汚染しにくいテストにする」こと。代表例が、最近の論文・コンペ・ニュースなど学習時点より後の新しい問題で継続的に更新する動的ベンチマークです(要最新確認:具体的なベンチマーク名・設計は流動的)。

LLM-as-a-judge のバイアス

人間評価の代替として、LLMに採点させる手法が広く使われます。速くて開放型の質問も扱えますが、判定者LLM自身の癖が混入します。代表的なものは次のとおりです。

要するに、LLM-as-a-judge は安いフィルタリングや初期スクリーニングには有用だが、高リスクな最終判定では人間の検証を置き換えられない、というのが現状の理解です。

flowchart TD
    OUT["モデルの出力"] --> Q{"評価の方法"}
    Q -->|"自動・客観"| B["ベンチマーク採点<br/>(正解と照合)"]
    Q -->|"人が判断"| H["人間評価<br/>(A/B比較・採点)"]
    Q -->|"LLMに採点させる"| J["LLM-as-a-judge"]
    B --> RB["落とし穴:データ汚染<br/>(暗記の再生・飽和)"]
    H --> RH["落とし穴:高コスト・主観"]
    J --> RJ["落とし穴:自己優遇・冗長性<br/>選好リーク"]
    RB --> SUM["どの方法も単独では不十分<br/>→ 複数を組み合わせる"]
    RH --> SUM
    RJ --> SUM

2. ハルシネーション:もっともらしい誤り

ハルシネーションとは、出力が流暢でもっともらしいのに、事実として誤っている/根拠なく捏造されている現象です。よく2種類に分けます。

なぜ起きるのか(廃れにくい原理)

ハルシネーションは「バグ」ではなく、今の学習のやり方から自然に出てくるものです。原理は3層に整理できます。

  1. 目的関数が真実性を罰しない。事前学習は次トークンの**尤度最大化(クロスエントロピー最小化)**です(事前学習とスケーリング則)。これは「もっともらしい続き」を作る訓練であって、「真実だけを言う」訓練ではありません。確率的に尤もらしければ、事実でなくても生成されます。

  2. 知識の欠落を埋めようとする。世界の知識を有限のパラメータに圧縮する以上、抜けは必ず残ります。問われると、モデルは空白を統計的にありそうな値で補完してしまう。これが捏造の温床です。

  3. 評価インセンティブが「当てずっぽう」を促す。多くのベンチマークは0/1の二値採点で、「分かりません(IDK)」を不正解と同じ0点にします。すると、

    E[スコア]=P(正解)×1+P(不正解)×0\mathbb{E}[\text{スコア}] = P(\text{正解}) \times 1 + P(\text{不正解}) \times 0

    となり、少しでも当たる見込みがあるなら、棄権するより推測した方が期待スコアが高い。つまり評価のルール自体が「自信満々に答える=当てずっぽう」を学習段階・後学習段階の両方で報酬として強化してしまうのです(2025年のOpenAIらの議論。要最新確認)。

    裏を返せば対策の方向も見えます。自信のある誤りを、棄権より重く罰する採点(例:正解 +1、誤り −2、棄権 0、「75%以上確信があるときだけ答えよ」)にすれば、モデルは適切に棄権・不確実性の表明を学べます。これは 分類の校正(キャリブレーション) の発想を生成に持ち込んだものです。

⚠️ ハルシネーションは理論的に完全には消せないという主張(“Hallucination is Inevitable”)があります。有限パラメータ・尤度目的・未知への外挿という構造上、ゼロにはできない。だから目標は「根絶」ではなく「減らして・検出して・正直に表明させる」ことです。

flowchart LR
    subgraph 原因
        C1["尤度最大化は<br/>真実性を罰しない"]
        C2["知識の欠落を<br/>統計的に補完"]
        C3["二値採点が<br/>当てずっぽうを報酬化"]
    end
    subgraph 対策
        M1["RAG:外部知識で根拠付け"]
        M2["引用・出典の提示"]
        M3["不確実性の表明・棄権"]
        M4["生成後の検証<br/>(自己検証・別モデル照合)"]
        M5["採点を校正<br/>(自信ある誤りを重く罰)"]
    end
    C2 --> M1
    C1 --> M2
    C3 --> M5
    C1 --> M3
    C1 --> M4

対策

ただし RAG も万能ではありません。検索が外せば誤った文脈で自信満々に答える(内在的ハルシネーションがむしろ悪化する)ので、検索の質が前提になります。


3. 安全性:有害出力と攻撃

評価・事実性とは別軸で、「悪用・有害出力をどう防ぐか」という安全性の問題があります。アラインメント(アラインメント)で「無害であれ」を学習させても、それをかいくぐる攻撃が存在します。

代表的な脅威

💡 jailbreak とインジェクションの違い:jailbreak は会話相手(ユーザー)が安全装置を破ろうとする。プロンプトインジェクションは第三者が用意したデータ経由で、ユーザーもモデルも気づかないうちに命令が注入される。後者は「データと命令の境界が曖昧」というLLMの根本構造に起因します。

守り方

防御は「いつ守るか」で2層に分かれます。

いつ何をするか対応する概念
学習時訓練段階有害要求を拒否するよう学習アラインメント(アラインメント
推論時運用段階入出力を別の仕組みで検査・遮断ガードレール
flowchart LR
    A["攻撃<br/>jailbreak・<br/>プロンプトインジェクション"] --> G1["入力ガードレール<br/>(攻撃を検出・遮断)"]
    G1 --> LLM["アラインメント済み<br/>LLM<br/>(拒否を学習済み)"]
    LLM --> G2["出力ガードレール<br/>(有害出力をフィルタ)"]
    G2 --> SAFE["利用者へ"]
    RT["レッドチーミング<br/>(事前に攻めて弱点発見)"] -.->|改善| LLM
    RT -.->|改善| G1
    RT -.->|改善| G2

4. アラインメントとの関係:両輪で守る

安全性は、**学習時の対策(アラインメント)推論時の対策(ガードレール)**の両輪で成り立ちます。

どちらか一方では不十分です。アラインメントは完璧にできない(必ず破られる例が見つかる)し、ガードレールも誤検出・突破がある。**多層防御(defense in depth)**として重ねるのが基本方針で、その穴をレッドチーミングで継続的に探します。


⚠️ よくある誤解・要最新確認


まとめ

LLMの信頼性は、**測る(評価)・正す(ハルシネーション対策)・守る(安全性)**の3点で考えます。評価は正解が一意でない難しさと汚染・judgeバイアスを抱え、ハルシネーションは尤度最大化と評価インセンティブに根ざす構造的問題で、安全性は学習時アラインメントと推論時ガードレールの両輪+レッドチーミングで支えます。いずれも「完成」はなく、継続的に測り直し・攻め直すことが運用の前提になります。


関連ノート