Search
Duplicate

RAGAS를 사용한 성능 평가 메트릭: RAG 시스템의 효율적인 평가 방법

Published On
2024/09/18
Lang
KR
Tags
Generative AI
RAG
RAGAS
LLM

1. 서론

Retrieval-Augmented Generation (RAG) 시스템은 대형 언어 모델(LLM)의 한계를 극복하고 외부 데이터 소스를 활용하여 더욱 정확하고 관련성 높은 응답을 제공하는 혁신적인 기술입니다. 그러나 이러한 시스템의 성능을 정확하게 평가하고 개선하기 위해서는 전문적인 평가 도구와 메트릭이 필요합니다. RAGAS (Retrieval-Augmented Generation Assessment System)는 이러한 요구를 충족시키기 위해 개발된 종합적인 평가 프레임워크입니다.
RAGAS는 다양한 평가 메트릭을 제공하여 RAG 시스템의 강점과 약점을 체계적으로 파악할 수 있게 해줍니다. 이를 통해 개발자는 시스템의 성능을 객관적으로 평가하고, 개선이 필요한 부분을 명확히 식별할 수 있습니다. 이번 글에서는 RAGAS의 핵심 메트릭과 Synthetic Test Set의 생성 및 활용 방법, 그리고 실제 평가 사례와 실습 과정을 통해 RAG 시스템의 성능을 효과적으로 평가하는 방법을 자세히 다루겠습니다.

2. RAGAS의 핵심 평가 메트릭

RAGAS는 RAG 시스템의 성능을 다각도로 평가하기 위해 여러 핵심 메트릭을 제공합니다. 이러한 메트릭은 시스템의 응답이 사용자 질문과 컨텍스트에 얼마나 적합하고 정확한지를 정량적으로 측정하는 데 사용됩니다.

2.1 Faithfulness(정확성)

정의: Faithfulness는 생성된 응답이 제공된 컨텍스트(검색된 문서)에 얼마나 충실한지를 평가하는 메트릭입니다. 즉, 모델이 컨텍스트에 없는 정보를 추가하거나 왜곡하지 않고 응답을 생성하는지를 측정합니다.
중요성: LLM은 때때로 존재하지 않는 정보를 생성하는 "환각(hallucination)" 현상을 보일 수 있습니다. 이는 시스템의 신뢰성을 저해하고 사용자에게 잘못된 정보를 제공할 위험이 있습니다. Faithfulness 메트릭은 이러한 문제를 식별하고 완화하는 데 핵심적인 역할을 합니다.
평가 방법:
참조 응답과의 비교: 생성된 응답이 컨텍스트 내의 정보와 얼마나 일치하는지 비교합니다.
정량적 측정: BLEU, ROUGE와 같은 자연어 처리 평가 지표를 활용하여 응답의 정확성을 수치화합니다.

2.2 Context Precision(문맥 정밀도)

정의: Context Precision은 검색된 문서들이 사용자 질문과 얼마나 관련성이 있는지를 평가하는 메트릭입니다. 이는 검색 엔진의 성능과 검색된 컨텍스트의 품질을 반영합니다.
중요성: RAG 시스템에서 검색 단계는 매우 중요합니다. 부적절한 문서가 검색되면 모델이 올바른 응답을 생성하기 어렵습니다. Context Precision은 검색 모듈의 효율성을 평가하고 개선 방향을 제시합니다.
평가 방법:
질문과 문서 간 유사도 계산: TF-IDF, BM25, 또는 시멘틱 임베딩을 활용하여 질문과 문서의 유사도를 측정합니다.
정밀도 계산: 검색된 문서 중 실제로 관련성이 있는 문서의 비율을 계산하여 정밀도를 평가합니다.

2.3 Answer Relevance(답변 관련성)

정의: Answer Relevance는 생성된 응답이 사용자 질문에 얼마나 적합하고 유용한지를 평가하는 메트릭입니다. 이는 응답의 품질과 사용자 만족도를 직접적으로 반영합니다.
중요성: 최종 사용자에게 제공되는 응답의 품질은 시스템의 성공에 결정적인 영향을 미칩니다. Answer Relevance 메트릭은 응답이 사용자 의도를 정확하게 이해하고 적절한 정보를 제공하는지를 평가합니다.
평가 방법:
주관적 평가: 인체 평가자를 통해 응답의 적합성을 평가합니다.
객관적 평가: 자동화된 자연어 처리 기법을 활용하여 질문과 응답 간의 의미적 유사도를 측정합니다.

3. Synthetic Test Set 생성 및 활용 방법

RAG 시스템의 성능을 체계적으로 평가하기 위해서는 적절한 테스트 데이터셋이 필요합니다. 그러나 실제 사용자 데이터를 수집하고 활용하는 데에는 시간과 비용, 그리고 개인정보 보호 이슈 등의 제약이 있습니다. 이러한 문제를 해결하기 위해 Synthetic Test Set을 생성하여 활용할 수 있습니다.

Synthetic Test Set이란?

Synthetic Test Set은 인공적으로 생성된 질문과 응답 쌍으로 이루어진 데이터셋입니다. 이는 특정 도메인이나 시나리오에 맞게 설계되며, 시스템의 특정 기능이나 성능을 집중적으로 테스트하는 데 사용됩니다.

생성 방법

1.
도메인 선정: 평가하고자 하는 RAG 시스템의 도메인을 명확히 정의합니다. 예를 들어, 의료, 금융, 법률 등 특정 분야를 선택합니다.
2.
질문 생성:
도메인 전문가의 참여: 해당 분야의 전문가와 협력하여 실제 사용자들이 할 법한 질문을 수집합니다.
질문 다양성 확보: 난이도, 주제, 형태 등을 다양하게 구성하여 포괄적인 평가가 가능하도록 합니다.
3.
참조 응답 작성:
정확하고 완전한 응답 작성: 각 질문에 대한 이상적인 응답을 작성합니다.
컨텍스트 설정: 응답에 필요한 컨텍스트 정보를 명시하거나 제공된 문서에서 추출합니다.
4.
데이터셋 구성:
질문, 컨텍스트, 참조 응답을 하나의 레코드로 구성하여 데이터셋을 완성합니다.

활용 방법

모델 성능 평가: Synthetic Test Set을 활용하여 모델의 성능을 정량적으로 평가합니다.
에러 분석: 모델이 오답을 생성하는 패턴을 식별하고 원인을 분석합니다.
모델 개선: 분석 결과를 바탕으로 검색 모듈, 모델 아키텍처, 프롬프트 등을 개선합니다.

장점과 한계

장점:
데이터 확보 용이성: 실제 데이터를 수집하는 데 드는 시간과 비용을 절약할 수 있습니다.
개인정보 보호: 민감한 개인정보를 다루지 않으므로 법적 이슈를 최소화합니다.
특정 시나리오 테스트: 시스템의 특정 기능이나 극한 상황을 테스트하는 데 유용합니다.
한계:
현실성 부족: 인공적으로 생성된 데이터는 실제 사용자 질문의 복잡성과 다양성을 완벽히 반영하지 못할 수 있습니다.
편향 위험: 데이터 생성 과정에서 무의식적인 편향이 들어갈 수 있으며, 이는 모델의 일반화 능력을 저해할 수 있습니다.

4. RAGAS를 활용한 실제 평가 사례

RAGAS의 핵심 메트릭과 Synthetic Test Set을 활용하여 RAG 시스템의 성능을 평가하는 실제 사례를 살펴보겠습니다. 이를 통해 평가 프로세스와 개선 방법을 이해할 수 있습니다.

사례 개요

한 금융 기업에서 고객 지원 챗봇을 개선하기 위해 RAG 시스템을 도입했습니다. 이 시스템은 최신 금융 정보와 회사의 정책 문서를 활용하여 고객의 질문에 답변합니다. 시스템의 성능을 평가하고 개선하기 위해 RAGAS를 활용했습니다.

평가 프로세스

1.
Synthetic Test Set 생성:
질문 수집: 금융 전문가들이 고객들이 자주 묻는 질문과 예상되는 추가 질문들을 수집했습니다.
참조 응답 작성: 각 질문에 대한 정확한 답변을 작성하고 필요한 컨텍스트를 명시했습니다.
2.
모델 응답 생성:
RAG 시스템을 통해 각 질문에 대한 응답을 생성했습니다.
3.
메트릭 계산:
RAGAS를 사용하여 Faithfulness, Context Precision, Answer Relevance를 계산했습니다.

평가 결과

Faithfulness: 0.78
일부 응답에서 컨텍스트에 없는 정보가 포함되어 있었습니다.
Context Precision: 0.82
검색된 문서 중 일부가 질문과 직접적인 관련이 없었습니다.
Answer Relevance: 0.75
응답이 질문에 완전히 부합하지 않는 경우가 발견되었습니다.

문제점 파악

환각 현상: 모델이 컨텍스트에 없는 정보를 생성하는 경향이 있었습니다.
검색 품질 문제: 관련성이 낮은 문서가 검색되어 컨텍스트로 제공되었습니다.
프롬프트 설계 미흡: 프롬프트가 명확하지 않아 모델이 정확한 응답을 생성하지 못했습니다.

개선 조치

1.
검색 모듈 개선:
시멘틱 검색 도입: 단순 키워드 기반 검색에서 시멘틱 유사성을 고려한 검색으로 전환했습니다.
검색 결과 필터링: 질문과의 유사도가 일정 수준 이상인 문서만 컨텍스트로 사용하도록 설정했습니다.
2.
프롬프트 엔지니어링:
명시적 지침 추가: 모델이 컨텍스트에 없는 정보를 생성하지 않도록 프롬프트에 지침을 추가했습니다.
컨텍스트 강조: 제공된 컨텍스트 정보를 최대한 활용하도록 프롬프트를 재설계했습니다.
3.
모델 파인튜닝:
도메인 특화 데이터로 재학습: 금융 도메인에 특화된 데이터로 모델을 파인튜닝했습니다.

재평가 결과

Faithfulness: 0.88 (10% 향상)
Context Precision: 0.90 (8% 향상)
Answer Relevance: 0.85 (10% 향상)

성과 및 교훈

신뢰성 향상: 모델의 환각 현상이 크게 줄어들어 응답의 신뢰성이 높아졌습니다.
사용자 만족도 증대: 고객 만족도 조사에서 긍정적인 피드백이 증가했습니다.
지속적인 개선 필요성: 시스템의 성능을 유지하고 향상시키기 위해 지속적인 모니터링과 개선이 필요함을 인식했습니다.

5. 실습: 데이터셋 평가 과정

이번 섹션에서는 RAGAS를 활용하여 RAG 시스템의 성능을 평가하는 과정을 코드 예제와 함께 실습해보겠습니다. 이 실습을 통해 평가 메트릭 계산부터 결과 해석까지의 전체 흐름을 이해할 수 있습니다.

환경 설정

프로그래밍 언어: Python 3.8 이상
필요한 라이브러리:
ragas
pandas
transformers
torch
scikit-learn

코드 예제

1. 라이브러리 설치
pip install ragas pandas transformers torch scikit-learn
Shell
복사
2. 데이터셋 로드
import pandas as pd # 데이터셋은 질문, 컨텍스트, 생성된 응답, 참조 응답을 포함하는 CSV 파일입니다. data = pd.read_csv('synthetic_test_set.csv') # 데이터 프레임 확인 print(data.head())
Python
복사
3. RAGAS 메트릭 계산
from ragas.metrics import faithfulness, context_precision, answer_relevance from ragas import evaluate, RagasDataset # RagasDataset 객체 생성 ragas_dataset = RagasDataset( queries=data['question'].tolist(), contexts=data['context'].tolist(), responses=data['generated_answer'].tolist(), references=data['reference_answer'].tolist(), ) # 평가 메트릭 리스트 metrics = [faithfulness, context_precision, answer_relevance] # 평가 실행 results = evaluate(ragas_dataset, metrics) # 결과 출력 for metric, score in results.items(): print(f"{metric}: {score:.4f}")
Python
복사
4. 결과 해석
Faithfulness: 결과 값이 1에 가까울수록 모델이 컨텍스트에 충실한 응답을 생성합니다.
Context Precision: 값이 높을수록 검색된 문서가 질문과 관련성이 높습니다.
Answer Relevance: 값이 높을수록 응답이 질문에 적합하고 유용합니다.
5. 개선 방안 도출
Faithfulness가 낮다면:
프롬프트를 개선하여 모델이 컨텍스트를 더 잘 활용하도록 합니다.
모델의 파인튜닝을 고려합니다.
Context Precision이 낮다면:
검색 알고리즘을 개선하거나 시멘틱 검색을 도입합니다.
인덱스된 문서의 품질을 검토합니다.
Answer Relevance가 낮다면:
모델이 질문을 제대로 이해하지 못할 수 있으므로 프롬프트 엔지니어링을 재검토합니다.
질문 처리 및 전처리 과정을 개선합니다.

추가 실험: 모델 개선 후 재평가

1. 모델 개선 작업 수행
프롬프트 수정
검색 알고리즘 개선
모델 파인튜닝
2. 개선된 모델로 응답 생성
# 개선된 모델을 사용하여 응답 생성 data['improved_generated_answer'] = data['question'].apply(generate_improved_answer)
Python
복사
3. 재평가 실행
# 개선된 응답으로 데이터셋 업데이트 ragas_dataset.responses = data['improved_generated_answer'].tolist() # 재평가 실행 improved_results = evaluate(ragas_dataset, metrics) # 개선 전후 결과 비교 for metric in results.keys(): original_score = results[metric] improved_score = improved_results[metric] print(f"{metric} - Original: {original_score:.4f}, Improved: {improved_score:.4f}")
Python
복사

결과 분석

개선 전후의 메트릭 변화를 확인하여 모델 개선의 효과를 정량적으로 평가합니다.
향상된 부분과 추가 개선이 필요한 부분을 식별합니다.

6. 결론

RAGAS는 RAG 시스템의 성능을 종합적으로 평가하고 개선하는 데 필수적인 도구입니다. Faithfulness, Context Precision, Answer Relevance와 같은 핵심 메트릭을 통해 시스템의 강점과 약점을 명확히 파악할 수 있으며, 이를 기반으로 효과적인 개선 전략을 수립할 수 있습니다.
Synthetic Test Set의 생성과 활용은 현실적인 평가 환경을 제공하며, 시스템의 특정 기능이나 도메인에 초점을 맞춘 평가를 가능하게 합니다. 실제 평가 사례와 실습을 통해 RAGAS의 활용 방법과 그 중요성을 체감할 수 있었을 것입니다.
앞으로 RAG 시스템의 복잡성이 증가하고 다양한 도메인에 적용됨에 따라, RAGAS와 같은 전문적인 평가 도구의 필요성은 더욱 커질 것입니다. 지속적인 성능 모니터링과 개선을 통해 사용자에게 신뢰성 있고 유용한 정보를 제공하는 RAG 시스템을 구축하는 데 기여할 수 있기를 바랍니다.

7. 참고 자료

다른 언어로 읽기:

작가 후원하기:

제 기사가 마음에 드셨다면, 커피 한 잔으로 응원해 주세요!
Search
September 2024
Today
S
M
T
W
T
F
S