포스트

Langchain PDF Chatbot 만들기 - 21 - RAGChecker

목차

  1. RAGChecker란?
  2. RAGChecker 주요 특징
  3. RAGChecker 주요 Metric 설명
  4. RAGChecker Code

RAGChecker란?

RAGCheckerAmazon에서 만든 RAG 시스템의 성능을 평가하는 프레임워크입니다.
이틀 통해 개발자는 RAG 시스템의 성능 대한 포괄적인 지표를 확인하고 분석하여 개선할 수 있습니다.

RAGChecker 주요 특징

1) 전체 평가

  • RAGChecker는 전체 RAG 파이프라인 평가를 위한 Overall Metrics를 제공합니다.

2) 진단 지표

  • 검색 컴포넌트를 분석하기 위한 Diagnostic Retriever Metric와 생성 컴포넌트를 평가하기 위한 Diagnostic Generator Metrics를 통해 목표 개선을 위한 인사이트를 제공합니다.

3) 세부 평가

  • claim-level entailment의 연산을 활용하여 세부적인 평가를 수행합니다.

4) 벤치마크 데이터셋

  • 10개 도메인 분야를 아우르는 4,000개 질문을 포함한 포괄적인 RAG 벤치마크 데이터셋을 제공합니다 (곧 출시 예정).

5) 메타 평가

  • RAGChecker의 결과와 인간 판단 간의 상관관계를 평가하기 위한 인간 주석 기반 선호 데이터셋을 포함합니다.

RAGChecker 주요 Metric 설명

1) Overall Metrics (RAG 시스템의 전반적인 성능을 평가)

  • Precision
  • Recall
  • F1 Score

2) Diagnostic Retriever Metrics (검색 컴포넌트의 성능 평가)

  • Claim Recall: 검색된 문맥이 얼마나 많은 관련 정보를 포함하는지 평가
  • Context Precision: 검색된 문맥 중 실제로 정확환 정보의 비율

3) Diagnostic Generator Metrics (생성 컴포넌트의 성능 평가)

  • Faithfulness: 생성된 응답이 제공된 문맥에 얼마나 충실한지 평가
  • Noise Sensitivity: 생성기가 관련 정보와 노이즈를 어떻게 처리하는지 분석
  • Hallucination: 문맥에 없는 정보를 생성하는 비율 평가
  • Self-knowledge: 생성기가 자체 지식에 의존해 응답을 생성하는 비율
  • Context Utilization: 검색된 문맥 정보를 얼마나 효과적으로 활용하는지 평가

RAGChecker Code

1) 설치

1
2
pip install ragchecker
python -m spacy download en_core_web_sm

2) CLI를 통한 실행

1
2
3
4
5
6
7
8
ragchecker-cli \
    --input_path=examples/checking_inputs.json \
    --output_path=examples/checking_outputs.json \
    --extractor_name=bedrock/meta.llama3-1-70b-instruct-v1:0 \
    --checker_name=bedrock/meta.llama3-1-70b-instruct-v1:0 \
    --batch_size_extractor=32 \
    --batch_size_checker=32 \
    --metrics all_metrics

3) Python 코드를 통한 실행

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from ragchecker import RAGResults, RAGChecker
from ragchecker.metrics import all_metrics


with open("examples/checking_inputs.json") as fp:
    rag_results = RAGResults.from_json(fp.read())

evaluator = RAGChecker(extractor_name="bedrock/meta.llama3-1-70b-instruct-v1:0",
                      checker_name="bedrock/meta.llama3-1-70b-instruct-v1:0",
                      batch_size_extractor=32,
                      batch_size_checker=32)

evaluator.evaluate(rag_results, all_metrics)
print(rag_results)

4) 결과값

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
"""Output
RAGResults(
  2 RAG results,
  Metrics:
  {
    "overall_metrics": {
      "precision": 76.4,
      "recall": 62.5,
      "f1": 68.3
    },
    "retriever_metrics": {
      "claim_recall": 61.4,
      "context_precision": 87.5
    },
    "generator_metrics": {
      "context_utilization": 87.5,
      "noise_sensitivity_in_relevant": 19.1,
      "noise_sensitivity_in_irrelevant": 0.0,
      "hallucination": 4.5,
      "self_knowledge": 27.3,
      "faithfulness": 68.2
    }
  }
)
"""

이러한 형태의 결과값을 확인할 수 있습니다.



RAGAS보다 자세하고 많은 성능 지표를 제공해서 최근에는 RAGChecker를 사용하게 되는 것 같습니다.