[Hallucination] Part 3. 검색된 지식이 쓰레기라면? 스스로 교정하는 검색 (CRAG)

JOINSPIRED·2026년 3월 11일
post-thumbnail

이전 Part 2에서 다룬 Self-RAG는 모델 스스로 검색 시점을 판단하고 가져온 문서를 성찰(Reflection)하며 환각을 억제하는 혁신적인 방법이었습니다. 하지만 이 시스템에도 치명적인 전제가 하나 있습니다. 바로 "검색 엔진이 가져온 문서 중에 최소한 하나는 정답이 섞여 있어야 한다"는 점입니다.

만약 검색 엔진이 찾아온 문서들이 전부 엉뚱한 내용이거나, 사내 데이터베이스(Static Corpus)에 아예 정답이 존재하지 않는다면 어떻게 될까요? 컴퓨터 과학의 격언인 '가비지 인, 가비지 아웃(Garbage In, Garbage Out)'은 RAG에도 그대로 적용됩니다. 아무리 똑똑한 모델이라도 쓰레기 같은 정보만 쥐여주면 결국 정교한 환각을 만들어낼 수밖에 없습니다.

중국 과학기술대학교(USTC), 구글 딥마인드, UCLA 연구진이 발표한 "Corrective Retrieval Augmented Generation (CRAG)"는 바로 이 '검색 실패(Retrieval Failure)' 상황을 스스로 교정(Correct)하여 답변의 견고함을 극대화하는 아키텍처입니다.


1. RAG의 문지기: '검색 평가기(Retrieval Evaluator)'의 구조와 학습 전략

기존 RAG는 검색기가 가져온 문서를 별도의 검증 없이 생성기(LLM)에 전달합니다. 하지만 CRAG는 검색기와 생성기 사이에 문서의 품질을 엄격히 판별하는 '검색 평가기(Retrieval Evaluator)'라는 전략적 문지기를 배치합니다.

이 평가기는 단순히 기존 모델에 프롬프트를 입력해 만든 것이 아닙니다. RAG의 고질적인 한계인 '검색 실패'를 극복하기 위해 특수 목적으로 직접 설계하고 미세 조정(Fine-tuning)한 독자적인 경량 모델입니다.

💡 [Deep Dive] 평가기는 어떻게 설계되었을까? (아키텍처와 데이터 전략)

  • 아키텍처: 초경량 모델 T5-Large(0.77B)의 효율성
    연구진은 평가기의 뼈대(Backbone)로 구글이 개발한 T5-Large 모델을 채택했습니다. 파라미터 수가 단 7.7억 개(0.77B)에 불과하여, 이전 Part 2에서 다루었던 Self-RAG의 비판 모델(Llama-2 7B)과 비교하면 크기가 약 1/10 수준에 불과합니다. 이는 실제 서비스 파이프라인 중간에 배치되더라도 응답 지연 시간(Latency)이나 연산 비용을 거의 발생시키지 않는 압도적인 실무적 강점을 제공합니다.

  • 학습 데이터: 교묘한 오답(Hard Negatives)을 걸러내는 훈련
    이 작은 모델이 범용 거대 모델을 뛰어넘는 정확한 판별력을 갖춘 비결은 정교한 학습 데이터 구성에 있습니다. 연구진은 PopQA와 같은 질의응답 데이터셋(약 14,000개)을 기반으로 평가기를 학습시켰습니다.

    • 긍정 샘플 (Positive, 라벨 1): 질문에 대한 정답이 확실히 포함된 고품질 위키백과 문서(Golden subject wiki)를 학습시킵니다.
    • 부정 샘플 (Negative, 라벨 -1): 검색 엔진이 찾아왔지만 키워드만 비슷할 뿐 정답은 없는 '그럴싸한 오답(Hard Negatives)'들을 무작위로 추출하여 집요하게 학습시켰습니다. 이를 통해 모델은 단순한 키워드 매칭을 넘어 실제 정보의 유용성을 가려내는 안목을 갖게 됩니다.

결과에 따른 세 가지 행동(Action) 트리거

평가기는 질문과 '개별 검색 문서'를 짝지어 읽은 후, -1점에서 1점 사이의 신뢰도 점수(Confidence Score)를 회귀(Regression) 방식으로 예측합니다. 이렇게 도출된 점수 분포에 따라 CRAG는 다음 세 가지 경로 중 하나를 선택합니다.

  • 🟢 정확함 (Correct): 검색된 K개의 문서 중 최소 1개 이상이 상한선(Upper threshold)을 넘었을 때. 쓸만한 정보가 확보되었다고 판단하여 내부 지식 정제 단계로 이동합니다.
  • 🔴 부정확함 (Incorrect): 검색된 모든 문서가 하한선(Lower threshold)보다 낮을 때. 가져온 모든 정보가 '노이즈'라고 판단하여 전량 폐기하고, 즉시 외부 웹 검색으로 전환합니다.
  • 🟡 모호함 (Ambiguous): 그 외의 애매한 점수 분포일 때. 평가기가 확신하지 못하는 상황이므로, 안전을 위해 기존 내부 문서와 웹 검색 결과를 모두 혼합하여 활용합니다.

2. 지식의 정제: 분해 후 재조합 (Decompose-then-Recompose)

평가기가 '정확함' 판정을 내렸더라도 문제는 남습니다. 방대한 위키백과 문서에서 정작 필요한 정보는 한두 줄뿐이며, 나머지 80%의 문맥은 모델의 주의력을 분산시키는 노이즈가 될 수 있기 때문입니다. CRAG는 이를 해결하기 위해 정교한 정제 알고리즘을 가동합니다.

  • 분해 (Decompose): 검색된 문서를 한두 문장 단위의 미세한 '지식 조각(Knowledge Strips)'으로 잘게 쪼갭니다.
  • 필터링 (Filter): 앞서 사용한 평가기를 다시 호출하여, 각 조각이 질문과 관련 있는지 개별 채점하고 무관한 조각은 과감히 버립니다.
  • 재조합 (Recompose): 살아남은 순도 높은 핵심 조각들만 다시 이어 붙여 최적화된 내부 지식을 완성합니다.

평가기가 '부정확함' 판정을 내렸다는 것은 사내 DB나 정적인 코퍼스(Static Corpora)에 답이 없음을 의미합니다. 기존 RAG는 여기서 환각을 일으키거나 침묵해야 했지만, CRAG는 웹 검색을 전략적 도구로 활용해 돌파구를 찾습니다.

먼저 사용자의 질문을 검색 엔진이 잘 이해할 수 있도록 핵심 키워드 중심의 쿼리로 재작성(Rewriting)합니다. 이후 구글 검색 API 등을 호출하여 정보를 수집하는데, 이때 정보의 신뢰성을 위해 위키백과와 같은 권위 있는 출처를 최우선으로 우대(Preferential)하여 수집합니다. 이렇게 수집된 웹 페이지 내용 역시 '지식 정제' 과정을 거쳐 노이즈가 제거된 외부 지식(External Knowledge)으로 모델에 주입됩니다.


💡 [Deep Dive] CRAG와 System-2 Thinking의 연결

이전 시리즈에서 강조한 System-2 Thinking(자가 검증 및 교정)의 철학은 CRAG에서 '자료 조사' 영역까지 확장됩니다.

  • 자료의 맹신 거부: 일반적인 RAG가 주어진 문맥을 절대 진리로 믿고 왜곡된 답변을 내놓는 '문맥 기반 환각'에 빠질 때, CRAG는 자료를 읽기도 전에 "이 자료가 과연 쓸모 있는가?"를 먼저 비판적으로 사고(Critique)합니다.
  • 유연한 백트래킹 (Backtracking): 자료가 틀렸음을 인지하면 해당 경로를 고집하지 않고, 과감히 탐색 방향을 외부(Web)로 틀어버립니다. 이는 막힌 길에서 다른 대안을 찾던 생각의 트리(ToT)의 백트래킹 철학과 정확히 일치합니다.
  • 플러그앤플레이(Plug-and-play)의 마법: CRAG는 부품처럼 기존 시스템에 끼워 넣을 수 있습니다. 실제 실험 결과, 이전 파트의 최첨단 모델인 Self-RAG에 CRAG 모듈을 결합했을 때(Self-CRAG), 환각이 극적으로 줄어들고 성능이 폭발적으로 향상되는 시너지를 증명했습니다.

다음 파트 예고: 단순 팩트 검색을 넘어 전체 맥락을 꿰뚫는 법

CRAG를 통해 우리는 잘못된 정보 유입을 차단하고 부족한 지식을 보완하는 법을 배웠습니다. 하지만 여전히 해결되지 않은 문제가 있습니다. 만약 질문이 "A와 B의 관계는 무엇인가?" 혹은 "이 데이터셋 전체의 핵심 주제는 무엇인가?"와 같이 전체 데이터를 가로지르는 거시적인 통찰을 요구한다면 어떻게 될까요?

기존의 벡터 검색 방식으로는 파편화된 문서 몇 개만 가져올 뿐, 데이터 간의 연결 고리를 파악하기 어렵습니다. 다음 [Part 4. 단순 팩트 검색을 넘어 전체 맥락을 꿰뚫다 (GraphRAG)] 편에서는 지식 그래프를 이용해 데이터의 계층적 구조를 파악하고, 방대한 문서 전체를 아우르는 통찰을 환각 없이 생성하는 최신 아키텍처를 살펴보겠습니다.

profile
기술과 산업에 대해 궁금한 것들을 함께 이야기 해보고 싶습니다.

0개의 댓글