[RAG] RAGAS를 통한 평가

avatar
2025.01.12
·
5 min read

2800

Ch1. RAG 평가

01. RAGAS 소개

Retrieval-Augmented Generation Evaluation System

  • RAGAS는 RAG 과정에서 생성된 답변이 얼마나 정확하고 유용한지 평가하는 역할

  • RAG 모델이 정보를 정확하고, 적절하게 잘 활용하고 있는지를 체계적이고 자동화된 방식으로 평가해주는 라이브러리

  • 평가방식이 간결하다.

합성 테스트 데이터셋 생성

  • RAGAS를 통해 생성

    • Seed Question을 만든 후 평가

    • QA samples를 만들어 얼마만큼 근사한지 평가

    • 질문은 변하지 않지만 예측 답변을 정답과 비교

    • 기준이 되는 데이터셋 생성

02. 합성 테스트 데이터셋 생성

from langchain_community.document_loaders import PDFPlumberLoader
from ragas.testset.generator import TestsetGenerator
from ragas.testset.evolutions import simple, reasoning, multi_context, conditional
from ragas.llms import LangchainLLMWrapper
from ragas.embeddings import LangchainEmbeddingsWrapper
from ragas.testset.extractor import KeyphraseExtractor
from ragas.testset.docstore import InMemoryDocumentStore

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter

# 문서 로더 생성
loader = PDFPlumberLoader("data/dataset2.pdf")

# 문서 로딩
docs = loader.load()

# 목차, 끝 페이지 제외
docs = docs[3:-1]

# 문서의 페이지수
len(docs)

# 데이터셋 생성기
generator_llm = ChatOpenAI(model="gpt-4o-mini")
# 데이터셋 비평기
critic_llm = ChatOpenAI(model="gpt-4o-mini")
# 문서 임베딩
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")

generator = TestsetGenerator.from_langchain(
    generator_llm,
    critic_llm,
    ragas_embeddings,
    docstore=docstore,
)

# 질문 유형별 분포 결정
# simple: 간단한 질문, reasoning: 추론이 필요한 질문, multi_context: 여러 맥락을 고려해야 하는 질문, conditional: 조건부 질문
distributions = {simple: 0.4, reasoning: 0.2, multi_context: 0.2, conditional: 0.2}

# 테스트셋 생성
# docs: 문서 데이터, 10: 생성할 질문의 수, distributions: 질문 유형별 분포, with_debugging_logs: 디버깅 로그 출력 여부
testset = generator.generate_with_langchain_docs(
    documents=docs,
    test_size=10,
    distributions=distributions,
    with_debugging_logs=True,
    raise_exceptions=False,
)
# 생성된 테스트셋을 pandas DataFrame으로 변환
test_df = testset.to_pandas()
test_df
  • 테스트로 100page를 진행해보았는데, 10개의 질문을 만드는데 2분 30초 소요

  • 기본적으로 언어는 영어

2801
  • 만든 데이터셋을 csv로 저장하였다.

03. RAGAS를 활용한 평가

  • 평가를 하기 위해선 question, context, ground_text(정답) 가 필요

  • 생성한 답변은 answer key를 통해 관리

평가지표

  1. Faithfulness: 답변이 얼마나 충실한가?

    1. 할루시네이션과 관련

2805
  1. Context_precision : 얼마나 관련된 문서가 상위에 배치되었는가?

    1. gound-truth 관련 항목들이 상위 순위에 있는지 평가하는 지표

    2. 0~1사이의 값을 가지며, 높은 점수일수록 더 나은 정밀도를 나타낸다.

2803
  1. Answer_relevancy: 답변이 얼마나 질문과 관련이 높은가?

    1. 생성된 답변이 주어진 프롬프트에 얼마나 적절한지

    2. consine 유사도를 기반으로 측정

2804
  1. Context_recall: 답변에 필요한 문서들을 얼마나 잘 가져왔는가 ?

    1. 검색된 문서가 LLM이 생성한 답변과 얼마나 일치하는 지 측정

    2. 값은 0~1사이이며, 높을수록 더 나은 성능을 나타낸다.

    3. 이상적인 시나리오에서는 ground_truth 답변의 모든 주장이 검색된 context에 귀속될 수 있어야 한다.

2802

04. 테스트 데이터셋 번역 업로드 관리

  • DeepL의 API KEY를 사용

  • HuggingFace Dataset에 업로드 가능

05. 실험결과

2811






- 컬렉션 아티클