業界・業務から探す
導入目的・課題から探す
データ・AIについて学ぶ
News
Hakkyについて
ウェビナーコラム
◆トップ【AI・機械学習】
AI

執筆者:Handbook編集部

RAGの性能評価ツール Ragas入門 (実装例つき)

はじめに

近年、大規模言語モデル(LLM)を利用したアプリケーションが急速に普及しています。 その中でも、外部データを活用してLLMのコンテキストを強化する手法としてRAG(Retrieval-Augmented Generation)が注目されています。 しかし、RAGシステムの性能を正確に評価することは困難です。

関連記事

そこで本記事では、RAGパイプラインの評価を支援するライブラリ「Ragas」を紹介します。 Ragasを使用することで、様々な評価指標に基づいた定量的な評価が可能となり、RAGシステムの改善点を明確化することができます。

Ragas の概要

Ragasは、RAGの評価を効率的に行うためのOSSのライブラリで、RAGの性能を多角的に評価する各種メトリクスを提供します。 また、LangChainやLlamaIndexなどのフレームワークとの統合が容易であり、ユーザーのニーズに応じてカスタマイズすることができます。

Ragas への入力

Ragasでは、主に4つの入力を使用してRAGシステムの性能に関するメトリクスを計算します。

Question: 質問はユーザーからのクエリを示します。RAGパイプラインが処理する基本的な入力であり、生成された回答の評価の基準となります。

Context: コンテキストは質問に対して取得された情報のリストです。これらはLLMに提供され、質問に対する回答を生成するための根拠となります。コンテキストは関連性や正確性の観点から評価されます。

Answer: 回答はRAGパイプラインによって生成された出力です。この回答は、質問と提供されたコンテキストに基づいて生成され、評価の対象となります。

Ground Truth: Ground Truthは質問に対する正しい回答のリストです。これは、評価時に生成された回答と比較するための基準として使用されます。 Ground Truthがあることで、生成された回答の正確性や関連性を定量的に評価することができます。

Ragas で扱う評価メトリクス

上記の図のように、RAGシステムをGeneration(回答生成)とRetrieval(関連情報の取得)の2つの部分に着目したメトリクスが用意されています。

Generation に関するメトリクス

  • Faithfulness: 提供されたContextに対する生成されたAnswerの事実性を評価します。これは、回答がどれだけ正確に事実を反映しているかを測定します。
  • Answer Relevancy: Questionに対する生成されたAnswerの関連性を評価します。

Retrieval に関するメトリクス

  • Context Precision: 取得されたContextに含まれるGrand Truthが関連性で高いランクを持つかを評価します。
  • Context Recall: 取得されたContextがどれだけGround Truthに関連しているかを評価します。回答に必要な情報がどれだけ含まれているかを測定します。

他のメトリクスについてはこちらを参考にしてください。

Ragas の使用例

簡易的なRAGパイプラインを用意し、Ragasによる評価を行う実装例を紹介します。

以下のコマンドでragasをインストールします。

pip install ragas

必要なライブラリをインポートします。

from datasets import Dataset 
from dotenv import load_dotenv
from langchain_community.document_loaders import TextLoader
from langchain.indexes import VectorstoreIndexCreator
from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI
from ragas import evaluate
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_precision,
    context_recall,
)

# OPENAI_API_KEYの読み込み
load_dotenv()

評価対象となるQAChainを作成します。 データソースとしてWikipediaの夏目漱石のページを使用しました。

loader = TextLoader("./data/ragas/soseki.txt")
index = VectorstoreIndexCreator().from_loaders([loader])
qa_chain = RetrievalQA.from_chain_type(
    ChatOpenAI(temperature=0),
    retriever=index.vectorstore.as_retriever(),
    return_source_documents=True,
)

まず適当なquestionとそれに対するgroud_truthを用意します。 QAChainによる回答をanswer、参照したドキュメントをcontextsとして追加し、評価データセットを作成します。

data_samples = {
    'question': [
        "夏目漱石の本名は何ですか?",
        "夏目漱石の俳号は何ですか?",
        "夏目漱石の処女作は何ですか?"
    ],
    'ground_truth': [
        "本名は夏目 金之助(なつめ きんのすけ)です。",
        "俳号は愚陀佛(ぐだぶつ)です。",
        "1905年処女作「吾輩は猫である」を発表しました。"
    ],
    'answer': [],
    'contexts' : [],
}

for question in data_samples['question']: 
    response = qa_chain(question) 
    data_samples['answer'].append(response['result'])
    data_samples['contexts'].append(
        [doc.page_content for doc in response['source_documents']]
    )

dataset = Dataset.from_dict(data_samples)

Ragasによる評価を実行します。

result = evaluate(
    dataset,
    metrics=[
        context_precision,
        faithfulness,
        answer_relevancy,
        context_recall,
    ],
)
print(dataset)
print(result)

結果は以下のようになりました。

{
  'question': [
    '夏目漱石の本名は何ですか?',
    '夏目漱石の俳号は何ですか?',
    '夏目漱石の処女作は何ですか?'
  ],
  'ground_truth': [
    '本名は夏目 金之助(なつめ きんのすけ)です。',
    '俳号は愚陀佛(ぐだぶつ)です。',
    '1905年処女作「吾輩は猫である」を発表しました。'
  ],
  'answer': [
    '夏目漱石の本名は夏目金之助(なつめ きんのすけ)です。',
    '夏目漱石の俳号は「愚陀仏」です。',
    '夏目漱石の処女作は『吾輩は猫である』です。'],
  'contexts': [...]
}
Dataset({
    features: ['question', 'ground_truth', 'answer', 'contexts'],
    num_rows: 3
})
{'context_precision': 0.9444, 'faithfulness': 0.5000, 'answer_relevancy': 0.9997, 'context_recall': 0.8333}

質問がすべて一問一答形式で答えが曖昧になりにくいためか、questionとanswerの関連性を表すanswer_relevancyが1に近い値を取っているように見えます。

複数のドキュメントを参照する必要がある質問や曖昧な質問など、より充実したデータセットで評価することで、RAGの特徴を捉えやすくなるか可能性があります。

まとめ

本記事では、RAGパイプラインの評価を支援するライブラリ 「Ragas」を紹介しました。

Ragas を導入することで、RAGに関して多面的に評価することが可能になります。 また、LangChainやLlamaIndexなどのフレームワークに加えて、LangSmithやLangfuseなどのRAGの実験管理やモニタリングを行うためのLLMOpsツールとの連携も進んでいます。 そのため、Ragasを活用することでLLMアプリケーションの効率的な開発が可能になると考えられます。

参考

info
備考

LLM を業務で活用したり、自社のサービスに組み込みたくありませんか?Hakky では、AI を用いた企業独自のシステムを構築するご支援を行っています。 ソリューションサイト:https://www.about.st-hakky.com/chatgpt-solution

「どんなことが出来るのか」「いま考えているこのようなことは本当に実現可能か」など、ご検討段階でも構いませんので、ぜひお気軽にフォームよりお問い合わせくださいませ。

Hakkyへのお問い合わせ
2025年06月13日に最終更新
読み込み中...