[논문 리뷰] Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection

smj·2026년 3월 31일

review

목록 보기
5/30

한줄 요약: 특수 reflection token을 학습하여 하나의 LLM이 검색 여부 판단, 관련성 평가, 생성 내용 자기 비평을 모두 수행하는 Agentic RAG의 시작점.

항목내용
저자Akari Asai, Zeqiu Wu, Yizhong Wang, Avirup Sil, Hannaneh Hajishirzi
소속University of Washington, IBM Research
발표ICLR 2024
링크arxiv.org/abs/2310.11511
키워드RAG, Self-Reflection, Retrieval, Factuality

1. 문제 정의

Naive RAG의 3가지 근본 문제:
1. 무조건 검색: LLM이 이미 아는 상식 질문도 매번 검색 → 비효율 + 노이즈 유입
2. 검색 결과 무검증: 관련 없는 문서가 검색되어도 그대로 생성에 사용 → 오답
3. 생성 결과 무검증: 생성된 내용이 검색 문서에 근거하는지 확인 안 함 → 환각

핵심 아이디어: 이 세 가지 판단을 외부 모듈 없이, LLM 내부에 특수 토큰으로 내장시킨다.


2. 제안 방법

Reflection Token 4종

토큰역할
[Retrieve]검색이 필요한가?{yes, no, continue}
[IsRel]검색된 문서가 관련 있는가?{relevant, irrelevant}
[IsSup]생성 내용이 문서에 근거하는가?{fully supported, partially, no support}
[IsUse]생성 내용이 유용한가?{5, 4, 3, 2, 1}

추론 시 동작 흐름

입력: "한국의 2024년 GDP 성장률은?"

Step 1: [Retrieve] = yes → 검색 필요
Step 2: Retriever가 문서 3개 반환
Step 3: 각 문서에 대해:
  문서 1: [IsRel] = relevant → 세그먼트 생성
          "한국의 2024년 GDP 성장률은 2.2%로..."
          [IsSup] = fully supported ✓
          [IsUse] = 5 ✓
  문서 2: [IsRel] = irrelevant → 건너뜀
  문서 3: [IsRel] = relevant → 세그먼트 생성
          [IsSup] = partially → 점수 낮음

Step 4: 점수가 가장 높은 세그먼트 선택 → 최종 출력

학습 방법

  1. Critic Model 학습: GPT-4에게 각 reflection token의 라벨을 생성시킴
  2. 데이터 증강: 원본 학습 데이터에 reflection token을 삽입
  3. 표준 언어 모델링: next-token prediction으로 학습 — 특수 아키텍처 불필요
학습 데이터 예시:
  "한국의 수도는 [Retrieve]no 서울이다. [IsUse]5"
  "최신 GDP는 [Retrieve]yes [문서] [IsRel]relevant 2.2%이다 [IsSup]fully [IsUse]4"

3. 실험 결과

3.1 Open-domain QA

모델PopQAPubHealthARC-CASQA (인용)
Llama2-7B14.7%49.2%47.5%22.8
Llama2 + RAG38.2%51.3%50.1%24.1
Self-RAG 7B54.9%72.4%67.3%30.1
ChatGPT45.7%70.1%75.3%28.3
ChatGPT + RAG50.8%54.4%30.4

7B Self-RAG가 ChatGPT를 PopQA, PubHealth에서 초과

3.2 인용 정확도 (Citation Precision/Recall)

모델Citation PrecisionCitation Recall
Llama2 + RAG42.1%35.8%
Self-RAG68.4%60.2%
ChatGPT + RAG57.3%51.9%

→ 인용 정확도에서 특히 강한 성능 — [IsSup] 토큰이 문서 근거 검증을 강제하기 때문

3.3 어블레이션

변형PopQA
Self-RAG (full)54.9%
− [Retrieve] 제거 (항상 검색)48.7%
− [IsSup] 제거 (근거 검증 없음)50.1%
− [IsUse] 제거 (유용성 평가 없음)52.3%
모든 reflection 제거38.2%

→ 각 reflection token이 독립적으로 성능에 기여


4. 한계점

  • GPT-4 의존: Reflection token 라벨 생성에 GPT-4 사용 → 비용 + GPT-4 편향 전이
  • 추론 지연 증가: 각 세그먼트마다 여러 reflection token 생성 + 다중 후보 평가 → Naive RAG 대비 2-3배 느림
  • 한 모델에 모든 역할: "검색 판단 + 생성 + 비평"을 한 모델이 수행 → 역할 간 간섭 가능성
  • 7B 모델 한정: 더 큰 모델(70B+)에서 reflection token의 효과가 어떻게 변하는지 미검증 (이미 강한 모델에서는 이점이 감소할 수 있음)
  • Retriever에 여전히 의존: Retriever가 완전히 실패하면 [IsRel]=irrelevant만 반복 → 대안 없음 (CRAG가 이를 보완)
  • Reflection token의 신뢰성: 모델이 [IsRel]=relevant라고 판단했지만 실제로는 무관한 경우의 오판율 분석 부족

5. 의의와 영향

  • Agentic RAG 패러다임의 출발점: RAG가 수동적 파이프라인 → 능동적 에이전트로 전환
  • 검색을 "항상 하는 것"에서 "판단하는 것"으로의 패러다임 전환
  • 기존 아키텍처 변경 없이 vocabulary에 토큰만 추가하는 우아한 접근
  • 이후 CRAG, Adaptive-RAG, Active RAG 등 자기 교정 RAG 연구의 직접적 기반
  • LangGraph 등 프레임워크에서 "Self-RAG 패턴"을 공식 예제로 채택

6. 💬 리뷰어 코멘트

Self-RAG의 가장 우아한 점은 기존 아키텍처를 전혀 바꾸지 않는다는 것이다. Vocabulary에 특수 토큰 몇 개를 추가하고, 일반적인 언어 모델링으로 학습하면 끝이다. 이 단순함이 실전 적용성을 크게 높인다.

하지만 실전에서의 핵심 우려는 reflection token의 오판이다. 모델이 "[Retrieve]=no"라고 판단했는데 실제로 최신 정보가 필요한 경우, 기존 RAG보다 오히려 나빠진다. 이 문제에 대한 체계적 분석이 부족한 것이 아쉽다.

CRAG와 결합하면 이상적이다: Self-RAG가 "검색 여부"를 판단하고, CRAG가 "검색 결과의 품질"을 평가하는 2중 안전망. 실제로 프로덕션 RAG 시스템에서 이 조합이 점점 표준이 되고 있다.


관련 논문: CRAG, Adaptive-RAG, Active RAG, FLARE

0개의 댓글