RAGシステムとメモリレイヤの評価モジュール

評価モジュール

Posted by LuochuanAD on April 19, 2026 本文总阅读量

背景

以前いくつかのAIAgentでRAGシステムとメモリレイヤを構築しました。今回はこのRAGシステムとメモリレイヤを評価する必要があります。評価は以下の指標で行います:正確率(accuracy_score)、適合率(precision_score)、再現率(recall_score)、平均カバレッジ(avg_coverage)、平均応答遅延時間(avg_latency)。

データソースのサンプル構造

データソース構造:

evalution_examples =
[
    {
		"query": "user_question",
		"context": [
			"RAG chunk1",
			"RAG chunk5",
			"Memory short 1",
			"Memory short 5",
			"Memory long 1",
			"Memory long 3",
			......
		],
		"generated_answer": "True answer or False answer",
		"reference_answer": "True answer or False answer"
	},
......
]
  • query: ユーザーの入力
  • context: コンテキストデータ(RAGデータまたはMemoryデータ)
  • generated_answer: LLMの回答
  • reference_answer: 実際の正解

評価の計算方法

  generated generated
reference [1, 1] [1, 0]
reference [0, 1] [0, 0]
  • generated = 0: LLMの回答が誤り、1: LLMの回答が正解
  • reference = 0: 実際の答えが誤り、1: 実際の答えが正解

LLMの回答の正誤判定基準:

データソース構造に基づき、「キーワード重複率」を用いてgenerated_answerとreference_answerの平均キーワード重複率を計算します。

疑似コード

		Count(Set(reference_keyWords)) & Count(Set(generated_keyWords))
avg_keyWords = ------------------------------------------------------------------
		   		Count(Set(reference_keyWords))

avg_keyWords > 0.7 の場合、LLMの回答は✅と判定します。

実際の回答の正誤判定基準:

データソースを作成する際に人為的にラベル付けを行い、実際の回答を✅か❌の2種類に分類しています。

accuracy_score(正確率)

正確率:予測が正しいデータの全体に占める割合。

疑似コード

		         Count([1, 1]) + Count([0, 0])
accuracy_score = --------------------------------------------------------------
		   Count([1, 1]) + Count([1, 0]) + Count([0, 1]) + Count([1, 1])

  • LLMの回答と実際の回答がともに正しい、またはともに誤りであれば、それは正しく予測されたデータを指します。
  • LLMの回答と実際の回答が異なる場合は、見逃しや誤判定があったことを意味します。

precision_score (適合率)

適合率:LLMの回答が正しい場合に、実際の回答も正しい割合。

疑似コード

		         Count([1, 1])
precision_score = -------------------------------
		   Count([1, 1]) + Count([0, 1])

recall_score (再現率)

再現率:実際の回答が正しい場合に、LLMの回答も正しい割合。

疑似コード

		         Count([1, 1])
recall_score = -------------------------------
		   Count([1, 1]) + Count([1, 0])

avg_coverage (平均カバレッジ)

データソース構造に基づき、「キーワード重複率」を用いてcontextとgenerated_answerの平均キーワード重複率を計算します。

疑似コード

		     Count(Set(context_keyWords)) & Count(Set(generated_keyWords))
avg_coverage = Sum( ------------------------------------------------------------------ ) / Count(evalution_examples)
		   		Count(Set(generated_keyWords))

avg_latency (平均応答時間)

RAGシステムにおいて、Total = T(embed) ​+ T(retrieve) ​+ T(rerank) ​+ T(llm)​となるが、ここでは各データの応答時間の平均値で表します。

疑似コード

		Sum(end_time - start_time)
avg_latency = ------------------------------
		Count(evalution_examples)

F1スコア

RAG評価ではaccuracy_scoreは信頼性に欠ける傾向があります。precision_scoreとrecall_scoreは逆相関の関係にあるため、両者のバランスを取るためにF1スコアを用います。

疑似コード

		2 * Count([1, 1])
f1_score = ---------------------------------------------------
	     2 * Count([1, 1]) + Count([0, 1]) + Count([1, 0])

GitHubコードアドレス

https://github.com/LuochuanAD/Evaluation_RAG_Memory

今後の展望

次のステップとして、より高度な評価指標を導入します:

  1. MRR(Mean Reciprocal Rank)
  2. nDCG(並び替えの品質評価)
  3. Hit@K
  4. BLEU / ROUGE(生成評価)
  5. LLM-as-a-Judge(現在最も主流の手法)