Search
Duplicate

RAGAS를 활용한 성능 개선 방법: RAG 시스템 최적화 전략

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

1. 서론

Retrieval-Augmented Generation(RAG) 시스템은 대형 언어 모델(LLM)의 한계를 극복하고, 외부 데이터 소스를 활용하여 더욱 정확하고 관련성 높은 응답을 생성하는 혁신적인 기술입니다. 그러나 RAG 시스템의 성능을 최대한으로 끌어올리기 위해서는 체계적인 평가와 지속적인 개선이 필수적입니다. 이를 위해 RAGAS(Retrieval-Augmented Generation Assessment System)는 다양한 평가 메트릭을 제공하여 RAG 시스템의 강점과 약점을 명확히 파악할 수 있도록 도와줍니다.
이번 글에서는 RAGAS의 평가 결과를 바탕으로 RAG 시스템을 어떻게 개선할 수 있는지에 대해 심도 있게 다루겠습니다. 특히 Context Recall이 낮은 경우 데이터 검색 방식을 최적화하는 방법과, Faithfulness가 낮을 때 모델 재학습 또는 프롬프트 최적화를 통한 성능 향상 방법을 중점적으로 살펴보겠습니다. 또한, RAGAS의 피드백 루프를 활용한 지속적인 성능 모니터링과 개선 전략에 대해서도 논의할 것입니다.

2. 문제 분석 및 개선 방법

RAGAS를 통해 RAG 시스템의 성능을 평가한 후, 낮은 점수를 받은 메트릭에 집중하여 개선 방안을 마련해야 합니다. 일반적으로 Context RecallFaithfulness는 RAG 시스템의 핵심 성능 지표로서, 이 두 메트릭의 점수를 향상시키는 것이 전체 시스템의 성능을 높이는 데 중요합니다.

2.1 Context Recall 최적화

Context Recall은 사용자 질문과 관련된 정보를 얼마나 잘 검색해내는지를 나타내는 지표입니다. 이 지표가 낮다면, 검색 모듈이 적절한 문서를 찾아내지 못하고 있음을 의미합니다.

문제 원인 분석

검색 알고리즘의 한계: 단순 키워드 매칭이나 TF-IDF와 같은 전통적인 검색 알고리즘은 복잡한 자연어 질의에 대한 관련 문서를 정확히 찾아내는 데 한계가 있습니다.
인덱싱 품질 저하: 데이터베이스에 저장된 문서들의 인덱싱이 제대로 이루어지지 않으면 검색 효율이 떨어집니다.
데이터 불균형: 특정 주제나 도메인에 대한 문서가 부족하면 관련 정보를 제공하기 어렵습니다.

개선 방법

1) 시멘틱 검색 도입
시멘틱 검색은 단순한 키워드 매칭이 아닌 문서와 질의의 의미적 유사성을 계산하여 관련 문서를 찾아냅니다. 이를 위해 딥러닝 기반의 임베딩 모델을 활용할 수 있습니다.
Sentence Transformers와 같은 라이브러리를 사용하여 문장 임베딩 생성
FAISS 등 고성능 벡터 검색 라이브러리를 사용하여 대규모 임베딩 인덱스 구축
예시 코드:
from sentence_transformers import SentenceTransformer import faiss import numpy as np # 임베딩 모델 로드 model = SentenceTransformer('all-MiniLM-L6-v2') # 문서 임베딩 생성 documents = [...] # 문서 리스트 doc_embeddings = model.encode(documents) # FAISS 인덱스 생성 index = faiss.IndexFlatL2(doc_embeddings.shape[1]) index.add(np.array(doc_embeddings))
Python
복사
2) 질의 확장(Query Expansion)
질의에 동의어나 관련어를 추가하여 검색 범위를 넓힙니다.
WordNet이나 개념 그래프를 활용하여 관련 어휘를 추출
확장된 질의를 사용하여 검색 수행
3) 인덱싱 최적화
주기적인 인덱스 재구성: 새로운 문서가 추가되거나 기존 문서가 업데이트될 때 인덱스를 재구성하여 최신 상태를 유지
메타데이터 활용: 문서에 태그나 카테고리 정보를 추가하여 검색 정확도 향상

2.2 Faithfulness 향상

Faithfulness는 생성된 응답이 제공된 컨텍스트에 얼마나 충실한지를 나타내는 지표입니다. 이 지표가 낮다면 모델이 컨텍스트에 없는 정보를 생성하거나 왜곡하고 있음을 의미합니다.

문제 원인 분석

모델의 환각 현상(Hallucination): LLM이 자신이 학습한 일반 지식을 바탕으로 컨텍스트에 없는 정보를 생성
프롬프트 설계 미흡: 모델에게 명확한 지침을 제공하지 못하여 부정확한 응답 생성
컨텍스트 길이 제한: LLM의 입력 길이 제한으로 인해 중요한 컨텍스트 정보가 손실

개선 방법

1) 프롬프트 최적화
프롬프트에 모델이 따라야 할 명시적인 지침을 포함시킵니다.
예시: "다음 제공된 컨텍스트 정보만을 바탕으로 질문에 답변하세요. 컨텍스트에 없는 정보는 생성하지 마세요."
예시 프롬프트:
컨텍스트: {context} 질문: {question} 응답을 작성할 때는 위의 컨텍스트 정보만을 사용하고, 추가적인 정보나 추측은 하지 마세요.
CSS
복사
2) 모델 재학습 또는 파인튜닝
도메인 특화 데이터로 모델을 파인튜닝하여 해당 분야에 대한 이해도를 높입니다.
데이터 준비: 도메인에 특화된 질문-답변 쌍과 컨텍스트를 포함한 데이터셋 구축
파인튜닝 수행: Hugging Face Transformers 등의 라이브러리를 활용하여 모델 파인튜닝
3) 컨텍스트 관리
중요 정보 우선순위화: 컨텍스트에 포함될 정보를 중요도에 따라 정렬하여 모델 입력에 포함
요약 기술 활용: 컨텍스트가 너무 길 경우 중요한 부분만을 포함하도록 요약

3. 지속적인 성능 개선

RAG 시스템은 한 번의 개선으로 완벽해지지 않습니다. 지속적인 모니터링과 피드백을 통해 시스템의 성능을 유지하고 향상시키는 것이 중요합니다.

3.1 RAGAS 피드백 루프

RAGAS 피드백 루프는 평가 결과를 기반으로 시스템을 지속적으로 개선하는 프로세스입니다.

피드백 루프 구성 요소

1.
평가: RAGAS를 통해 시스템의 현재 성능을 정량적으로 평가
2.
분석: 낮은 점수를 받은 메트릭과 그 원인을 분석
3.
개선: 분석 결과를 바탕으로 시스템의 구성 요소(검색 모듈, 프롬프트, 모델 등) 개선
4.
재평가: 개선된 시스템을 다시 평가하여 개선 효과 확인

자동화 도구 활용

CI/CD 파이프라인에 평가 및 개선 과정을 통합하여 자동화
모니터링 도구를 활용하여 실시간 성능 지표 수집 및 시각화

3.2 성능 모니터링 및 조정

실시간 모니터링은 시스템의 이상 동작을 빠르게 감지하고 대응하는 데 필수적입니다.

모니터링 지표

응답 시간(latency)
성공률(success rate)
사용자 피드백
시스템 리소스 사용량

자동 조정(Auto-tuning)

스케일링: 트래픽 증가에 대응하여 시스템 자원을 자동으로 조절
캐싱 전략: 반복적인 요청에 대해 응답을 캐싱하여 성능 향상
알림 설정: 특정 지표가 임계값을 넘을 경우 알림을 받아 빠른 조치 가능

4. 실습: RAG 시스템 개선 및 재평가

이번 섹션에서는 실제로 RAG 시스템을 개선하고 RAGAS를 통해 재평가하는 과정을 실습해보겠습니다.

단계 1: 초기 성능 평가

기존 시스템의 성능을 RAGAS로 평가합니다.
from ragas import evaluate, RagasDataset from ragas.metrics import faithfulness, context_recall # 데이터셋 로드 dataset = RagasDataset.load_from_json('initial_dataset.json') # 평가 메트릭 설정 metrics = [faithfulness, context_recall] # 초기 평가 initial_results = evaluate(dataset, metrics) print("초기 평가 결과:") for metric, score in initial_results.items(): print(f"{metric}: {score:.4f}")
Python
복사

단계 2: 문제점 분석

평가 결과를 분석하여 낮은 점수를 받은 메트릭과 그 원인을 파악합니다.
Faithfulness가 낮다면 모델이 컨텍스트에 없는 정보를 생성하고 있음을 의미
Context Recall이 낮다면 검색 모듈이 관련 문서를 제대로 찾아내지 못하고 있음을 의미

단계 3: 시스템 개선

1) 검색 모듈 개선
시멘틱 검색 도입
질의 확장 적용
2) 프롬프트 최적화
모델에게 명시적인 지침 추가
불필요한 정보 생성을 억제하는 프롬프트 설계
3) 모델 파인튜닝
도메인 특화 데이터로 모델 재학습

단계 4: 개선된 시스템 배포

개선된 구성 요소를 시스템에 통합하고 배포

단계 5: 재평가

개선된 시스템을 다시 평가하여 성능 향상을 확인합니다.
# 개선된 데이터셋 로드 improved_dataset = RagasDataset.load_from_json('improved_dataset.json') # 재평가 improved_results = evaluate(improved_dataset, metrics) print("재평가 결과:") for metric, score in improved_results.items(): print(f"{metric}: {score:.4f}")
Python
복사

단계 6: 결과 비교 및 추가 개선

평가 결과를 비교하여 개선 효과를 확인하고, 추가로 개선할 부분을 식별합니다.
향상된 점수를 통해 개선이 효과적이었음을 확인
여전히 낮은 점수를 받은 메트릭에 대해 추가 개선 방안 마련

5. 결론

RAG 시스템의 성능을 최적화하기 위해서는 RAGAS를 활용한 체계적인 평가와 지속적인 개선이 필수적입니다. Context RecallFaithfulness와 같은 핵심 메트릭을 주기적으로 모니터링하고, 문제점을 정확히 파악하여 적절한 개선 조치를 취해야 합니다.
Context Recall이 낮을 경우 시멘틱 검색질의 확장을 통해 검색 모듈의 성능을 향상시킬 수 있습니다.
Faithfulness가 낮을 경우 프롬프트 최적화모델 파인튜닝을 통해 모델이 컨텍스트에 충실한 응답을 생성하도록 유도할 수 있습니다.
또한, RAGAS 피드백 루프를 구축하여 시스템의 성능을 지속적으로 모니터링하고 개선하는 것이 중요합니다. 이를 통해 RAG 시스템은 사용자에게 더욱 정확하고 신뢰성 있는 정보를 제공할 수 있게 됩니다.

6. 참고 자료

Huang, Po-Sen, et al. "Embedding-based retrieval in Facebook search." Proceedings of the 26th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. 2020.
Gao, Jingfeng, et al. "Rethink Training of BERT for Document Retrieval and Re-Ranking." arXiv preprint arXiv:2106.00882 (2021).

다른 언어로 읽기:

작가 후원하기:

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