📖

【Ragas】RAGの精度を定量的に評価する方法

2025/01/01に公開

1. はじめに

アクセンチュア株式会社の桐山です。
今回は、RAGの精度を定量的に評価することができる Ragas を試してみましたので、紹介したいと思います。

RAG(Retrieval Augmented Generation)とは、独自のデータに対する検索機能と生成AIモデルを組み合わせて、文脈に基づいた回答を生成する技術です。このようなRAGの精度を評価するには、情報取得(Retrieval)と生成(Generation)の両方を適切に測定する必要があります。その測定を可能とするのが Ragas です。

Ragasへのインプット

以下の情報をRagasに入力します。

入力項目 入力内容
user_input 質問
response RAGからの回答
retrieved_contexts RAGが検索・参照したコンテキスト(チャンク)
reference 真の正解

Ragasからのアウトプット(評価指標)

Ragasからは、以下のような評価指標を得ることができます。

出力項目 出力内容
Context Precision
(コンテキストの精度)
検索されたコンテキスト(チャンク)と質問との関連性の高さを示す平均的な指標。(*)
Response Relevancy
(回答の関連性)
回答が質問に対してどれだけ適切かを示す指標。回答に対する質問は何かを逆に生成させた後、本来の質問との類似度を計る。(*)
Faithfulness
(回答の忠実性)
コンテキスト(チャンク)に対し忠実に回答を生成したかどうかを示す指標。(*)
Context Recall
(コンテキストの再現率)
必要な情報をどれだけ漏らさずに取得できたかを示す指標。
Context Entity Recall
(コンテキストのキーワード再現率)
正解データのエンティティをどれだけ漏らさず取得したかを示す指標。特に事実や固有名詞が重要な場面で有効。
Noise Sensitivity
(ノイズへの敏感性)
無関係な情報に引きずられて誤答をどれだけ生成するかを示す指標。
Answer Correctness
(回答の正確性)
生成された回答が真の正解(Ground Truth)とどれだけ正確に一致しているかを示す指標。
Answer Semantic Similarity
(回答の意味的類似性)
生成された回答が真の正解(Ground Truth)と意味的にどれだけ一致しているかを示す指標。単語の一致ではなく、回答の意味の質を評価する。

(*) RAGAsでは、これらの3つの指標が基本的な指標と考えられています。なお、これらの3つの指標は真の正解(Ground Truth)を必要としません。

2. ゴール

Ragasを実行することにより、以下のような評価指標を得ることができます。

Ragasから得られる評価指標を通じてRAGの精度を定量的に把握し、RAGの改善点を特定することができます。

3. インストール

  1. Ragasをインストールします。
pip install ragas
  1. 今回はLLMにAWS Bedrockを使用しますので、langchain-awsパッケージをインストールします。
pip install langchain-aws

4. 実装

今回は、Ragas公式のチュートリアルをそのまま試してみたいと思います。
実際には自前のRAGから得られる回答をRagasに入力するのですが、今回はRagas公式のチュートリアルで用意されているデータセットを使っていきます。
https://docs.ragas.io/en/latest/getstarted/rag_evaluation/#choosing-evaluator-llm

  1. Hugging Face の amnesty_qa データセットを取り込み、Ragas EvaluationDataset に読み込みます。
from datasets import load_dataset
dataset = load_dataset(
    "explodinggradients/amnesty_qa",
    "english_v3",
    trust_remote_code=True
)

from ragas import EvaluationDataset
eval_dataset = EvaluationDataset.from_hf_dataset(dataset["eval"])

データセットの中身は以下となります。

(一部日本語訳)

  1. 取得したい評価指標を指定します。今回は、LLMContextRecall, Faithfulness, FactualCorrectness, SemanticSimilarity の4種類の指標を指定します。
from ragas.metrics import LLMContextRecall, Faithfulness, FactualCorrectness, SemanticSimilarity
from ragas import evaluate
  1. AWS認証情報やLLMモデル等を指定します。今回はLLMモデルに Claude Haiku、埋め込みモデルに Titan Text Embeddings を指定します。
config = {
    "credentials_profile_name": "default",
    "region_name": "ap-northeast-1",
    "llm": "anthropic.claude-3-haiku-20240307-v1:0",
    "embeddings": "amazon.titan-embed-text-v2:0",
    "temperature": 0.4,
}
  1. LLMを定義しLangchainLLMWrapperでラップすることで、Ragasを使用できるようにします。
from langchain_aws import ChatBedrockConverse
from langchain_aws import BedrockEmbeddings
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper

evaluator_llm = LangchainLLMWrapper(ChatBedrockConverse(
    credentials_profile_name=config["credentials_profile_name"],
    region_name=config["region_name"],
    base_url=f"https://bedrock-runtime.{config['region_name']}.amazonaws.com",
    model=config["llm"],
    temperature=config["temperature"],
))
evaluator_embeddings = LangchainEmbeddingsWrapper(BedrockEmbeddings(
    credentials_profile_name=config["credentials_profile_name"],
    region_name=config["region_name"],
    model_id=config["embeddings"],
))
  1. Ragasの評価を実行します。
metrics = [
    LLMContextRecall(llm=evaluator_llm), 
    FactualCorrectness(llm=evaluator_llm), 
    Faithfulness(llm=evaluator_llm),
    SemanticSimilarity(embeddings=evaluator_embeddings)
]
results = evaluate(dataset=eval_dataset, metrics=metrics)
  1. 評価指標を確認します。2.で指定した評価指標が定量的に出力されたことを確認できます。
df = results.to_pandas()
df

5. さいごに

いかがでしたでしょうか。
Ragasは、RAGの精度を定量的に評価し、その改善点を明確化するための強力なツールです。
本記事では、Ragasを用いた基本的な評価手法と、その実装例を紹介しました。
これらの評価指標を活用することで、RAGシステムの性能を体系的に分析し、より信頼性の高い回答生成モデルの構築に役立てることができると考えます。

また、RagasにはRAGのテストデータを生成する機能もあるようですので、次回以降に試してみたいと思っています。

Accenture Japan (有志)

Discussion