
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초 소요
기본적으로 언어는 영어

만든 데이터셋을 csv로 저장하였다.
03. RAGAS를 활용한 평가
평가를 하기 위해선 question, context, ground_text(정답) 가 필요
생성한 답변은 answer key를 통해 관리
평가지표
Faithfulness: 답변이 얼마나 충실한가?
할루시네이션과 관련

Context_precision : 얼마나 관련된 문서가 상위에 배치되었는가?
gound-truth 관련 항목들이 상위 순위에 있는지 평가하는 지표
0~1사이의 값을 가지며, 높은 점수일수록 더 나은 정밀도를 나타낸다.

Answer_relevancy: 답변이 얼마나 질문과 관련이 높은가?
생성된 답변이 주어진 프롬프트에 얼마나 적절한지
consine 유사도를 기반으로 측정

Context_recall: 답변에 필요한 문서들을 얼마나 잘 가져왔는가 ?
검색된 문서가 LLM이 생성한 답변과 얼마나 일치하는 지 측정
값은 0~1사이이며, 높을수록 더 나은 성능을 나타낸다.
이상적인 시나리오에서는 ground_truth 답변의 모든 주장이 검색된 context에 귀속될 수 있어야 한다.

04. 테스트 데이터셋 번역 업로드 관리
DeepL의 API KEY를 사용
HuggingFace Dataset에 업로드 가능
05. 실험결과
