0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RAGの評価方法の実装&比較~失敗談を添えて~【RAGAS】【LLM-as-a-judge】

0
Posted at

rag_evaluation_eyecatch.png

こんにちは!株式会社 HIBARI の河合と申します。

今回はRAGの評価フレームワークである RAGASLLM-as-a-judge を実装し比較してみました。

私は現在RAGシステムの開発を行っています。開発の中でRAGの精度を評価する必要があり、RAGASと呼ばれる評価フレームワークを使用したことがあります。その時、** この値って本当に信頼できるの?** と思ったことがありました。

実装過程でいくつかのトラブルに遭遇したため、十分に比較検証ができなかった部分がありました。後半でその失敗談もまとめています。

実装内容と検証できたことを中心にまとめてありますのでぜひご一読ください!

はじめに

LLMはハルシネーションを起こします。特に社内規則や製品の説明など、一般的でない内容では誤った情報を出力する可能性が高くなります。そこで必要な情報をまとめたドキュメントを検索しLLMに読ませることで、正確な情報を出力させる仕組みとして RAG があります。

RAGの実装自体は比較的容易で、LangChainなどのフレームワークも存在します。大変なのはRAGの運用であり、一つの壁となるのが次の問題です。

このRAGの精度って良いのか?悪いのか?

人間が目視確認するのは非現実的で、正解ラベルを全件用意するのもコストがかかります。そこで登場するのが自動評価フレームワークです。本記事では代表的な2つの手法を実装し、その検知精度と実装コストを比較します。

手法 概要
RAGAS RAG評価専用フレームワーク。9つの指標を評価できる。
LLM-as-a-judge 独自プロンプトでLLMに直接採点させる手法。

評価データの設計

RAGの入出力結果を再現した評価用データとして 機械学習・AI に関するものを用意しました。意図的に 問題のある回答 などを混ぜた4カテゴリ、計12件を用意しました。

カテゴリ 件数 設計意図
✅ 正確な回答 3件 質問、コンテキスト、回答ともに誤りがない。
❌ ハルシネーション 3件 コンテキストにない情報を回答する。
📄 不適切な参照 3件 質問とズレたコンテキストを参照する。質問には適切に回答できている。
🔀 部分正解 3件 一部正しいがコンテキストに含まれる重要な情報が欠けた回答をする。

評価データは付録に記載してあります。

評価指標の統一

2つの手法を比較するために、以下の4指標に統一しました。

指標 比較対象 検知する問題
Faithfulness コンテキスト ↔ 回答 ハルシネーション
Answer Relevancy 質問 ↔ 回答 的外れな回答
Context Precision 質問 ↔ コンテキスト 不適切な参照
Answer Correctness 模範解答 ↔ 回答 事実誤認・情報の欠落

RAGAS

概要

RAG評価専用に設計されたOSSフレームワークです。評価したいデータを渡すだけで、内部でLLMを使って各指標のスコアを自動計算してくれます。現在は9種類の指標で評価が可能です。

今回使用する4指標についてRAGASでの計算方法は以下の通りになります。

指標 計算方法
Faithfulness 回答をstatement単位に分解し、各statementがコンテキストで裏付けられるかをLLMが判定。「裏付けられたstatement数 ÷ 全statement数」でスコアを算出
Answer Relevancy 回答から複数の疑似質問を逆生成し、元の質問との埋め込み類似度の平均でスコアを算出
Context Precision 取得された各コンテキストが質問に対して有用かをLLMが判定し、有用なものが上位に来るほど高スコアになるよう算出
Answer Correctness 模範解答と回答の間でFaithfulnessと意味的類似度を組み合わせてスコアを算出

RAGASはLLMを使用しますが、割合やcos類似度など定量的に評価できるように工夫されていることが分かります。

実装

# ライブラリのインポート
import json
from ragas import evaluate, EvaluationDataset, SingleTurnSample
from ragas.metrics import Faithfulness, AnswerRelevancy, ContextPrecision, AnswerCorrectness
from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings

# LLMと埋め込みモデルの用意
llm = ChatGoogleGenerativeAI(
    model="gemini-2.5-flash",
    google_api_key=GOOGLE_API_KEY, # APIキーは環境変数から取得
    temperature=0
)
embeddings = GoogleGenerativeAIEmbeddings(
    model="models/embedding-001",
    google_api_key=GOOGLE_API_KEY
)

# データセットの作成
with open("dataset.json", encoding="utf-8") as f:
    data = json.load(f)
dataset = EvaluationDataset([
    SingleTurnSample(
        user_input=item["question"],
        retrieved_contexts=item["contexts"],
        response=item["answer"],
        reference=item["ground_truth"],
    )
    for item in data
])

# 評価
result = evaluate(
    dataset=dataset,
    metrics=[
        Faithfulness(),
        AnswerRelevancy(),
        ContextPrecision(),
        AnswerCorrectness()
    ],
    llm=llm,
    embeddings=embeddings,
)

検証結果

カテゴリ別スコア(Run1)

カテゴリ Faithfulness Answer Relevancy Context Precision Answer Correctness
✅ 正確な回答 1.000 0.800 1.000 -
❌ ハルシネーション 0.000 0.827 0.250 -
📄 不適切な参照 0.000 0.775 0.000 -
🔀 部分正解 0.667 0.767 1.000 -

※Answer CorrectnessはRAGASのバージョン互換性の問題により今回は検証できませんでした。

考察

期待通りだった点

  • Faithfulness: 期待した通りの結果になりました。 正確な回答(1.000)とハルシネーション・不適切参照(0.000)を完全に区別できており、部分正解のスコア(0.667)のように正確さの度合いを表現できていました。

  • Context Precision: 不適切なコンテキストを正確に検知できました。 部分正解カテゴリが1.000になっており「コンテキスト自体は正確でも、回答が不完全」というケースを正しく判断できていました。

期待とは異なった点

  • Answer Relevancy: 値が低くなってほしい「ハルシネーション」でも高い値(0.827)を示しました。 RAGASにおいてこの指標の算出は「回答から疑似質問を逆生成し、元の質問との類似度を計算する」という方式で行われています。ハルシネーションの回答も「それなりに質問に答えている形式」になっていれば高スコアになると考えられ、内容の正確さよりも回答の形式を評価してしまったと考えられます。

LLM-as-a-judge

概要

専用フレームワークを使わず、LLMに直接プロンプトを投げて採点させる手法です。

RAGASとの主な違いは3点です。

  • 独自にプロンプトを設計することで、目的に合った評価が行える。
  • プロンプトを工夫することで、1回のAPIコールで全指標をまとめて評価できる。RAGASは指標ごとに複数回のAPI呼び出しが発生しますが、LLM-as-a-judgeは1回のプロンプトで4指標を同時に評価します。
  • 評価理由を自然言語で取得できる。スコアと同時に「なぜそのスコアになったか」の理由テキストが得られるため、問題の原因追及がしやすくなります。

プロンプト設計

それぞれの指標で評価したいことをLLMにそのまま伝えるようにプロンプトを設計しました。定量的な評価と根拠の明確化など以下のポイントをおさえて作成しました。

  1. 1〜5の段階的に評価 — 1~5全てのスコア基準を明示する
  2. 理由(reason)を必ず出力 — スコアの根拠を可視化するため
  3. 4観点を独立して評価 — 相互影響を抑制するため
  4. JSON形式の構造化出力 — データ集計をしやすくするため

4つの指標の評価基準は以下のように設定しました。

評価基準(プロンプト)

指標 評価基準(プロンプト)
Faithfulness 回答に含まれる各主張が、コンテキストの情報だけで裏付けられるか。コンテキストに存在しない情報・事実誤認が含まれるほど低スコア。
Answer Relevancy 回答が質問の意図に正面から答えているか。余計な情報が多い・質問を無視しているほど低スコア。
Context Precision 提示されたコンテキストが、質問に答えるために本当に必要な情報を含んでいるか。無関係なコンテキストが多いほど低スコア。
Answer Correctness 模範解答と比べて、回答に含まれる事実が正しく、重要な情報が網羅されているか。事実誤認・重要情報の欠落があるほど低スコア。

実装

# ライブラリのインポート
import json
from google import genai
from google.genai import types

# LLMの用意
client = genai.Client(api_key=Google_API_KEY)

# データの読み込み
with open("dataset.json", encoding="utf-8") as f:
    data = json.load(f)

# ベースのプロンプト
JUDGE_PROMPT="""\
あなたはRAGシステムの回答品質を評価する専門家です。
以下の4つの観点で1〜5点の整数で評価し、それぞれ理由を述べてください。

【質問】
{question}

【参照コンテキスト】
{context}

【生成された回答】
{answer}

【模範解答】
{ground_truth}

## 1. Faithfulness(忠実性): 1〜5点
回答に含まれる各主張が、コンテキストの情報だけで裏付けられるか。
コンテキストに存在しない情報・事実誤認が含まれるほど低スコア。
- 5: 全ての主張がコンテキストで完全に裏付けられる
- 4: ほぼ全ての主張がコンテキストで裏付けられるが、わずかに曖昧な部分がある
- 3: 主張の半数程度はコンテキストで裏付けられるが、コンテキスト外の情報も含む
- 2: コンテキストで裏付けられる主張が少なく、コンテキスト外の情報が目立つ
- 1: 主張の大半がコンテキストと無関係、または明らかな事実誤認を含む

## 2. Answer Relevancy(回答の関連性): 1〜5点
回答が質問の意図に正面から答えているか。
余計な情報が多い・質問を無視しているほど低スコア。
- 5: 質問の意図に完全に答えており、不要な情報がない
- 4: 質問に答えているが、一部余分な情報や軽微なズレがある
- 3: 質問に部分的に答えているが、的外れな記述や重要な抜けがある
- 2: 質問への回答が不十分で、大半が質問と関係の薄い内容になっている
- 1: 質問にほぼ答えておらず、回答の内容が質問と無関係

## 3. Context Precision(コンテキストの精度): 1〜5点
提示されたコンテキストが、質問に答えるために本当に必要な情報を含んでいるか。
無関係なコンテキストが多いほど低スコア。
- 5: コンテキストの全内容が質問の回答に直接関連している
- 4: コンテキストのほとんどが有用だが、一部不要な情報が含まれる
- 3: コンテキストの約半分が有用で、残りは質問との関連性が薄い
- 2: 有用なコンテキストがわずかしかなく、大半が質問と関係が薄い
- 1: コンテキストがほぼ質問と無関係で、回答の根拠として使えない

## 4. Answer Correctness(回答の正確性): 1〜5点
模範解答と比べて、回答に含まれる事実が正しく、重要な情報が網羅されているか。
事実誤認・重要情報の欠落があるほど低スコア。
- 5: 模範解答と事実・内容が完全に一致し、重要な情報を全て網羅している
- 4: 模範解答とほぼ一致しているが、細部の情報がわずかに欠けている
- 3: 正しい情報を含むが、模範解答と比べて重要な事実が欠けているか一部誤りがある
- 2: 模範解答と比べて正確な情報が少なく、重要な事実誤認や大きな欠落がある
- 1: 模範解答と大きく食い違う、または重要な事実誤認が複数含まれる

以下のJSON形式のみで回答してください(説明文・コードブロック記号は不要):

{{
"faithfulness_score": <1-5の整数>,
"faithfulness_reason": "<理由(日本語・1〜2文)>",
"answer_relevancy_score": <1-5の整数>,
"answer_relevancy_reason": "<理由(日本語・1〜2文)>",
"context_precision_score": <1-5の整数>,
"context_precision_reason": "<理由(日本語・1〜2文)>",
"answer_correctness_score": <1-5の整数>,
"answer_correctness_reason": "<理由(日本語・1〜2文)>"
}}
"""

# プロンプトの作成
context      = "\n".join(item["contexts"])
filled_prompt = JUDGE_PROMPT.format(
    question    = item["question"],
    context     = context,
    answer      = item["answer"],
    ground_truth= item["ground_truth"],
)

# 評価
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents=prompt,
    config=types.GenerateContentConfig(
        temperature=0,
    ),
)

検証結果

カテゴリ別スコア(1-5点評価を0-1に正規化)

カテゴリ Faithfulness Answer Relevancy Context Precision Answer Correctness
✅ 正確な回答 1.000 1.000 1.000 1.000
❌ ハルシネーション 0.000 0.500 0.583 0.000
📄 不適切な参照 0.000 1.000 0.000 0.917
🔀 部分正解 0.667 0.500 1.000 0.250

根拠の提示の例

実際に得られた評価理由を確認してみます。例として「ハルシネーション」カテゴリで出力された理由を示します。

質問: バックプロパゲーションアルゴリズムはいつ誰が発明しましたか?

コンテキスト:
  - バックプロパゲーションは、ニューラルネットワークの重みを更新するためのアルゴリズムです。損失関数の勾配を出力層から入力層に向かって伝播させることで各層の重みを更新します。
  - 連鎖律(Chain Rule)を利用して効率的に勾配計算を行うことができます。

回答(ハルシネーション):
  バックプロパゲーションは1970年にアラン・チューリングによって発明されました。
  当初は暗号解読の研究の一環として開発されたアルゴリズムです。

→ Faithfulness [1点 / 0.000]:
  『1970年にアラン・チューリングによって発明された』『暗号解読の研究の一環』という主張は、参照コンテキストに全く記載されておらず、裏付けがない。

コンテキストには発明者・年号の情報が一切ないにもかかわらず、自信満々に誤情報を断言しているケースです。Faithfulnessが正しく1点(最低)を付け、その理由も具体的に指摘できています。

考察

期待通りだった点

  • Faithfulness: 正確な回答とハルシネーション・不適切参照を完全に区別でき、部分正解も「一部コンテキストと矛盾する」という実態を正確に捉えていました。

  • Answer Relevancy: 質問と回答がかみ合っているかを判定します。質問と回答はかみ合うがコンテキストに誤りがある不適切な参照カテゴリでも1.000と正しく判定できていました。

  • Context Precision: 不適切な参照を正確に検知できました。部分正解カテゴリが高スコアになっているのも「コンテキスト自体は正確」という実態を正しく判断できていました。

  • Answer Correctness: ハルシネーションを正確に検知でき、部分正解も「重要情報が欠落している」という実態を反映できていました。

期待とは異なった点

  • Context Precisionのばらつき: ハルシネーションカテゴリ内でスコアが大きくばらついていました。「コンテキストが有用か」と「コンテキストを正しく使ったか」は別の問いであるため、Context Precisionだけではハルシネーションの検知が難しいことが分かりました。

根拠テキストの価値

  • 評価値を信頼できるかを判断しやすいことや、同じ値でも原因追及などがしやすいことなどのメリットを感じました。

RAGASとLLM-as-a-judgeの比較

評価が一致した点

Faithfulness

カテゴリ RAGAS LLM-as-a-judge
✅ 正確な回答 1.000 1.000
❌ ハルシネーション 0.000 0.000
📄 不適切な参照 0.000 0.000
🔀 部分正解 0.667 0.667

Faithfulnessはコンテキストと回答の関連度、すなわちハルシネーションの検出を目的とします。この項目で同じような値になったことは、非常に良い結果だと思います。

Context Precision

カテゴリ RAGAS LLM-as-a-judge
✅ 正確な回答 1.000 1.000
❌ ハルシネーション 0.250 0.583
📄 不適切な参照 0.000 0.000
🔀 部分正解 1.000 1.000

Context Precisionは質問とコンテキストの関連度、すなわち適切な参照が行えているかを判定します。特に不適切な参照カテゴリで両手法で一致していました。

評価が異なった点

Answer Relevancy

カテゴリ RAGAS LLM-as-a-judge
✅ 正確な回答 0.800 1.000
❌ ハルシネーション 0.827 0.500
📄 不適切な参照 0.775 1.000
🔀 部分正解 0.767 0.500

少し異なる評価となったのがこの項目です。RAGASは「正確な回答」と「ハルシネーション」カテゴリを高得点、LLM-as-a-judgeは「正確な回答」と「不適切な参照」カテゴリを高得点としました。

RAGASは「回答から疑似質問を逆生成して元の質問と埋め込みの類似度を比較する」方式で、LLM-as-a-judgeは「回答が質問の意図に答えているか」をLLMが直接判断する方式です。

今回の評価データでは、質問と回答に食い違いが生じるのは「ハルシネーション」と「部分正解」カテゴリです。そのためLLM-as-a-judgeの方が正確に判断できていると考えることができます。

実装コストの体感比較

今回の実装を通じた体感として両手法のコストの違いについて感想を述べておきます。

  • RAGASは各評価項目ごとにAPI呼び出しをするが、LLM-as-a-judgeはまとめて評価できるため呼び出し回数が少ない。
  • RAGASではバージョン変更によって関数の呼び出し方などが変わり、その影響を受けやすかった。

失敗談

今回の検証ではいくつかの失敗が重なり思うように検証を進められませんでした。

  • RAGASのバージョン互換性: RAGASの検証をローカルPCとGoogle Colabの2つの環境で行いました。その時、RAGASのバージョンが両者で異なりエラーが多発してしまいました。
  • Gemini APIのレート制限: Geminiの無料枠での検証を行っていました。Geminiの無料枠での検証を行っていました。上記のエラーなどの影響で、よくレート制限に引っかかりました。

その結果、今回は基礎比較にフォーカスし、以下は今後の検証項目として残りました。

  • RAGASのAnswer Correctness
  • LLMモデルを変えた際の比較
  • LangChain Evaluationでの評価
  • LLM API関連のコストの定量的比較

おわりに

今回はRAGASとLLM-as-a-judgeの2つの手法を実装し比較しました。

検知精度という観点では、最も重要なFaithfulnessで両手法が同じ結果を示しました。本質的に同じ問いをLLMに投げれば同じ答えが返るという、当たり前といえば当たり前の結論ですが、改めて数値として確認できたのは良かったと思います。

実装コストという観点では、個人が手軽に始めるならLLM-as-a-judgeの方が現実的だという印象を持ちました。RAGASはRAG評価専用に設計された理論的な裏付けのあるフレームワークですが、バージョン変化への追従やレート制限への対処など、評価以外の部分でコストがかかりました。LLM-as-a-judgeはプロンプト1つで始められ、評価観点も自由にカスタマイズできます。

一方で、今回は実装と基礎比較を優先したため、モデル差による評価の揺れやLangChain Evaluationとの比較は今後の課題として残りました。理論面についても、関連論文を踏まえて改めて検証したいと考えています。

RAGの評価は「そのスコア、本当に信頼できるか?」という問いから始まりました。今回の検証でその問いへの完全な答えは出ませんでしたが、同じような疑問や考えを持っている人に少しでも参考になればと思っています。

参考リンク

付録

評価データ
[
  {
    "id": 1,
    "category": "correct",
    "category_label": "✅ 正確な回答",
    "question": "機械学習における過学習(オーバーフィッティング)とは何ですか?",
    "contexts": [
      "過学習(オーバーフィッティング)とは、モデルが訓練データに過度に適合してしまい、未知のデータに対して汎化性能が低下する現象です。訓練データのノイズや偶然の特徴まで学習してしまうことが原因で起こります。",
      "過学習を防ぐ手法としては、正則化(L1・L2正則化)、ドロップアウト、早期終了(Early Stopping)、データ拡張などがあります。"
    ],
    "answer": "過学習(オーバーフィッティング)とは、モデルが訓練データに過度に適合し、未知データへの汎化性能が低下する現象です。正則化やドロップアウトなどの手法で防ぐことができます。",
    "ground_truth": "過学習とは、モデルが訓練データに過度に適合し、未知のデータに対して性能が低下する現象で、正則化や早期終了などで対策できる。"
  },
  {
    "id": 2,
    "category": "correct",
    "category_label": "✅ 正確な回答",
    "question": "トランスフォーマーアーキテクチャにおけるアテンション機構の役割を説明してください。",
    "contexts": [
      "アテンション機構は、入力シーケンスの各要素が他の要素とどれだけ関連しているかを計算する仕組みです。Query、Key、Valueの三つのベクトルを用いて重み付けされた文脈情報を生成します。",
      "Self-Attentionにより、文中の離れた単語間の依存関係を効率的に捉えることができ、従来のRNNの長距離依存問題を解決しました。"
    ],
    "answer": "アテンション機構はQuery・Key・Valueベクトルを使い、入力シーケンス内の各要素間の関連度を計算します。Self-Attentionにより離れた単語間の依存関係も効率的に捉えられます。",
    "ground_truth": "アテンション機構はQuery・Key・Valueベクトルで要素間の関連度を計算し、長距離依存関係を捉える仕組み。"
  },
  {
    "id": 3,
    "category": "correct",
    "category_label": "✅ 正確な回答",
    "question": "RAG(Retrieval-Augmented Generation)の基本的な仕組みを教えてください。",
    "contexts": [
      "RAG(Retrieval-Augmented Generation)は、LLMの生成に外部知識検索を組み合わせたアーキテクチャです。質問に関連するドキュメントをベクトル検索で取得し、そのコンテキストをLLMに入力して回答を生成します。",
      "RAGはLLMの学習時点以降の情報にも対応でき、ハルシネーションを軽減できる利点があります。"
    ],
    "answer": "RAGはベクトル検索で関連ドキュメントを取得し、それをコンテキストとしてLLMに渡して回答を生成するアーキテクチャです。最新情報への対応とハルシネーション軽減が主な利点です。",
    "ground_truth": "RAGはベクトル検索で関連情報を取得しLLMのコンテキストとして利用するアーキテクチャ。ハルシネーション軽減と最新情報対応が利点。"
  },
  {
    "id": 4,
    "category": "hallucination",
    "category_label": "❌ ハルシネーション",
    "question": "バックプロパゲーションアルゴリズムはいつ誰が発明しましたか?",
    "contexts": [
      "バックプロパゲーション(誤差逆伝播法)は、ニューラルネットワークの重みを更新するためのアルゴリズムです。損失関数の勾配を出力層から入力層に向かって伝播させることで各層の重みを更新します。",
      "連鎖律(Chain Rule)を利用して効率的に勾配計算を行うことができます。"
    ],
    "answer": "バックプロパゲーションは1970年にアラン・チューリングによって発明されました。当初は暗号解読の研究の一環として開発されたアルゴリズムです。",
    "ground_truth": "バックプロパゲーションは1986年にRumelhartらが広く普及させた(Werbosが1974年に提案)。アラン・チューリングとは無関係。"
  },
  {
    "id": 5,
    "category": "hallucination",
    "category_label": "❌ ハルシネーション",
    "question": "GPT-4のパラメータ数はいくつですか?",
    "contexts": [
      "大規模言語モデル(LLM)は膨大なパラメータを持つニューラルネットワークです。パラメータ数が増えるほど、より複雑なパターンを学習できる可能性があります。",
      "OpenAIはGPT-4の詳細なアーキテクチャについて公式には発表していません。"
    ],
    "answer": "GPT-4のパラメータ数は正確には1兆7000億パラメータです。これはGPT-3の175億パラメータの約97倍に相当します。",
    "ground_truth": "OpenAIはGPT-4のパラメータ数を公式に発表していない。推測値は様々あるが確定情報はない。"
  },
  {
    "id": 6,
    "category": "hallucination",
    "category_label": "❌ ハルシネーション",
    "question": "ドロップアウト(Dropout)はどのような仕組みで過学習を防ぎますか?",
    "contexts": [
      "ドロップアウト(Dropout)は、学習中にランダムに一部のニューロンを無効化(出力を0にする)する正則化手法です。",
      "ドロップアウト率(drop rate)は通常0.2〜0.5の間で設定されます。無効化するニューロンはミニバッチごとにランダムに選ばれます。"
    ],
    "answer": "ドロップアウトは、学習中に全てのニューロンの出力を50%の確率でゼロにすることで、ニューロン間の共適応を防ぎます。これにより各ニューロンが独立して有用な特徴を学習するよう促されます。ドロップアウト率は必ず0.5に固定する必要があります。",
    "ground_truth": "ドロップアウトは学習中にランダムに一部のニューロンを無効化することで、特定のニューロンへの依存(共適応)を防ぎ汎化性能を高める。ドロップアウト率は0.2〜0.5の間で調整可能。"
  },
  {
    "id": 7,
    "category": "bad_context",
    "category_label": "📄 不適切な参照",
    "question": "強化学習のQ学習アルゴリズムを説明してください。",
    "contexts": [
      "Pythonはインタープリタ型のプログラミング言語で、読みやすい構文が特徴です。データサイエンスや機械学習の分野でよく使われます。",
      "NumPyは数値計算ライブラリで、多次元配列の操作を効率的に行えます。scikit-learnと組み合わせてよく使われます。"
    ],
    "answer": "Q学習はQ値テーブルを更新しながら最適な行動方針を学習する強化学習アルゴリズムです。状態と行動のペアに対してQ値を割り当て、ベルマン方程式で更新します。",
    "ground_truth": "Q学習はQ値テーブルをベルマン方程式で更新し最適方策を学ぶ強化学習アルゴリズム。"
  },
  {
    "id": 8,
    "category": "bad_context",
    "category_label": "📄 不適切な参照",
    "question": "畳み込みニューラルネットワーク(CNN)の特徴を教えてください。",
    "contexts": [
      "自然言語処理(NLP)では、テキストをトークンに分割してベクトル化します。BERTやGPTなどのモデルが広く使われています。",
      "データ前処理はモデルの性能に大きく影響します。正規化やスケーリングが重要です。"
    ],
    "answer": "CNNは画像認識に特化したニューラルネットワークで、畳み込み層でフィルタを適用してローカルな特徴を抽出します。プーリング層で次元削減を行い、空間的な不変性を持ちます。",
    "ground_truth": "CNNは畳み込み層・プーリング層で画像の局所特徴を抽出する画像認識向けネットワーク。"
  },
  {
    "id": 9,
    "category": "bad_context",
    "category_label": "📄 不適切な参照",
    "question": "バッチ正規化(Batch Normalization)はなぜ学習を安定させるのですか?",
    "contexts": [
      "正規化(Normalization)とは、データのスケールを統一する前処理手法の総称です。Min-Max正規化やZ-score標準化などが代表的です。",
      "データの前処理において、外れ値の除去やスケーリングは重要なステップです。学習データと検証データに同じスケーリングを適用する必要があります。"
    ],
    "answer": "バッチ正規化は各層の出力を平均0・分散1に正規化することで、勾配消失・爆発を抑制し学習を安定させます。また内部共変量シフトを軽減し、より高い学習率が使えるようになります。",
    "ground_truth": "バッチ正規化は各ミニバッチの活性化値を正規化することで内部共変量シフトを抑制し、勾配の安定化・学習速度の向上・正則化効果をもたらす。"
  },
  {
    "id": 10,
    "category": "partial",
    "category_label": "🔀 部分正解",
    "question": "Transformerモデルのエンコーダとデコーダの違いを説明してください。",
    "contexts": [
      "Transformerはエンコーダ・デコーダ構造を持ちます。エンコーダは入力シーケンスを処理して文脈ベクトルを生成します。",
      "デコーダはエンコーダの出力と自身の過去の出力を受け取り、次のトークンを生成します。Cross-Attentionによってエンコーダの情報を参照します。"
    ],
    "answer": "エンコーダは入力シーケンスを処理します。デコーダは出力を生成しますが、両方とも同じ構造をしています。",
    "ground_truth": "エンコーダは入力を文脈ベクトルに変換。デコーダはCross-Attentionでエンコーダ出力を参照しながら逐次的に出力を生成。役割と構造が異なる。"
  },
  {
    "id": 11,
    "category": "partial",
    "category_label": "🔀 部分正解",
    "question": "機械学習の評価指標であるPrecisionとRecallの違いを説明してください。",
    "contexts": [
      "Precision(精度)は、モデルが正と予測したデータのうち、実際に正であるものの割合です。TP/(TP+FP)で計算します。",
      "Recall(再現率)は、実際に正であるデータのうち、モデルが正と予測できたものの割合です。TP/(TP+FN)で計算します。F1スコアはPrecisionとRecallの調和平均です。"
    ],
    "answer": "Precisionは予測の正確さを表し、TP/(TP+FP)で計算します。これはモデルの性能を測る重要な指標です。",
    "ground_truth": "Precisionは予測正の中の正解率(TP/(TP+FP))、Recallは実際の正の中での検出率(TP/(TP+FN))。トレードオフの関係がある。"
  },
  {
    "id": 12,
    "category": "partial",
    "category_label": "🔀 部分正解",
    "question": "ベクトルデータベースのANNS(近似最近傍探索)について説明してください。",
    "contexts": [
      "ANNS(Approximate Nearest Neighbor Search)は、ベクトル空間内で最も近いベクトルを近似的に高速で探索するアルゴリズムです。",
      "代表的なアルゴリズムにHNSW(Hierarchical Navigable Small World)、IVF(Inverted File Index)、LSH(Locality Sensitive Hashing)などがあります。完全な精度より検索速度を優先します。"
    ],
    "answer": "ANNSは近似的に最近傍ベクトルを検索する手法です。HNSWなどのアルゴリズムが使われます。大量データに対して高速な検索が可能です。",
    "ground_truth": "ANNSはベクトル空間での近似最近傍探索。完全一致より速度優先。HNSW・IVF・LSHなどが代表的手法。精度と速度のトレードオフが存在する。"
  }
]

この記事は株式会社Hibariのテックブログからの転載です。
元記事はこちら: RAGの評価方法の実装&比較~失敗談を添えて~【RAGAS】【LLM-as-a-judge】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?