검색
← 모듈 로드맵

교정 검색 증강 생성 (Corrective RAG)

논문 · 전문가 · Shi-Qi Yan 외 3명 · 2024 · arXiv

원제 · Corrective Retrieval Augmented Generation

검색 결과를 평가해 맞음·틀림·애매함에 따라 정제·웹 검색·혼합으로 바로잡는 RAG

먼저 알아야 할 것

RAG 기본 구조Self-RAG관련성 평가(교차 인코더)질의 재작성웹 검색 API

다루는 내용

CRAG는 T5-large 기반 가벼운 검색 평가기로 질문-문서 관련성을 매기고, 두 임곗값으로 Correct · Incorrect · Ambiguous를 판정합니다. Correct면 문서를 지식 조각으로 쪼개 관련 없는 조각을 버리고 다시 붙이며, Incorrect면 ChatGPT로 질문을 키워드로 바꿔 웹 검색한 결과를 정제해 쓰고, Ambiguous면 둘을 합칩니다. 생성기를 재학습하지 않는 플러그 앤 플레이 방식으로 RAG와 Self-RAG에 붙여 PopQA · Biography · PubHealth · ARC-Challenge 성능을 크게 올렸고, 계산량 증가는 작았습니다.

초록

저자가 쓴 초록을 옮긴 것입니다.

대형 언어 모델(LLM)은 생성한 텍스트의 정확성을 자신이 담은 파라미터 지식만으로는 보장할 수 없기 때문에 필연적으로 환각을 보입니다. 검색 증강 생성(RAG)은 LLM을 실용적으로 보완하지만, 검색된 문서의 관련성에 크게 의존하므로 검색이 잘못됐을 때 모델이 어떻게 행동할지에 대한 우려를 낳습니다. 이를 위해 우리는 생성의 견고성을 높이는 교정 검색 증강 생성(CRAG)을 제안합니다. 구체적으로, 질의에 대해 검색된 문서들의 전반적 품질을 평가하는 가벼운 검색 평가기를 설계했으며, 이 평가기가 내놓는 신뢰도에 따라 서로 다른 지식 검색 행동을 실행합니다. 정적이고 제한된 말뭉치에서의 검색은 최적이 아닌 문서만 돌려줄 수 있으므로, 대규모 웹 검색을 검색 결과를 보강하는 확장 수단으로 활용합니다. 또한 검색된 문서에 대해 분해 후 재조합 알고리즘을 설계해, 핵심 정보에 선택적으로 집중하고 관련 없는 정보는 걸러 냅니다. CRAG는 플러그 앤 플레이 방식이라 다양한 RAG 기반 방법과 매끄럽게 결합할 수 있습니다. 짧은 글과 긴 글 생성 과제를 포함하는 네 데이터셋에서의 실험은 CRAG가 RAG 기반 방법들의 성능을 크게 높일 수 있음을 보여 줍니다.

해설

교정 검색 증강 생성 (Corrective RAG)

검색한 문서가 틀렸을 때 RAG가 어떻게 행동해야 하는지를 다룬 논문입니다. 가벼운 평가기(T5-large, 7억 7천만 파라미터)가 검색 결과를 '맞음 · 틀림 · 애매함'으로 판정하고, 맞으면 문서를 잘게 쪼개 핵심만 남기고, 틀리면 웹 검색으로 갈아타며, 애매하면 둘을 섞습니다. 기존 RAG와 Self-RAG 어디에나 끼워 쓸 수 있고, 네 개 데이터셋에서 성능을 크게 올렸습니다.

항목내용
원제Corrective Retrieval Augmented Generation
저자Shi-Qi Yan 외 3명 (중국과학기술대 · UCLA · Google DeepMind)
발표2024 · arXiv 2401.15884
트랙 · 수준RAG·검색 · 심화
먼저 알면 좋은 것기본 RAG 구조, Self-RAG, 교차 인코더식 관련성 평가, 질의 재작성, 웹 검색 API

들어가기 전에

이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.

한눈에 보기

  • 기본 RAG가 "검색이 틀리면 어떡하지?"라는 질문을 무시해 온 이유와 그 위험을 알게 됩니다.
  • 검색 결과를 Correct / Incorrect / Ambiguous 세 가지로 판정하는 두 임곗값 규칙을 손계산으로 이해합니다.
  • 문서를 '지식 조각(strip)'으로 쪼개 걸러 내고 다시 붙이는 분해-재조합(decompose-then-recompose) 방식을 압니다.
  • 이 방법이 왜 '플러그 앤 플레이'이고, Self-RAG와 무엇이 다른지 판단할 수 있게 됩니다.

초록 (번역)

대형 언어 모델(LLM)은 생성한 텍스트의 정확성을 자신이 담은 파라미터 지식만으로는 보장할 수 없기 때문에 필연적으로 환각을 보입니다. 검색 증강 생성(RAG)은 LLM을 실용적으로 보완하지만, 검색된 문서의 관련성에 크게 의존하므로 검색이 잘못됐을 때 모델이 어떻게 행동할지에 대한 우려를 낳습니다. 이를 위해 우리는 생성의 견고성을 높이는 교정 검색 증강 생성(CRAG)을 제안합니다. 구체적으로, 질의에 대해 검색된 문서들의 전반적 품질을 평가하는 가벼운 검색 평가기를 설계했으며, 이 평가기가 내놓는 신뢰도에 따라 서로 다른 지식 검색 행동을 실행합니다. 정적이고 제한된 말뭉치에서의 검색은 최적이 아닌 문서만 돌려줄 수 있으므로, 대규모 웹 검색을 검색 결과를 보강하는 확장 수단으로 활용합니다. 또한 검색된 문서에 대해 분해 후 재조합 알고리즘을 설계해, 핵심 정보에 선택적으로 집중하고 관련 없는 정보는 걸러 냅니다. CRAG는 플러그 앤 플레이 방식이라 다양한 RAG 기반 방법과 매끄럽게 결합할 수 있습니다. 짧은 글과 긴 글 생성 과제를 포함하는 네 데이터셋에서의 실험은 CRAG가 RAG 기반 방법들의 성능을 크게 높일 수 있음을 보여 줍니다.

무엇을 풀었나

기본 RAG는 검색기 RR이 말뭉치에서 상위 KK개 문서 DD를 가져오면, 생성기 GG가 질문 XX와 DD를 함께 보고 답 YY를 만듭니다.

P(Y∣X)=P(D∣X) P(Y∣D,X)P(Y \mid X) = P(D \mid X)\, P(Y \mid D, X)

논문은 이 식이 보여 주듯 검색기와 생성기가 단단히 묶여 있어 위험에 약하다 고 지적합니다. 생성기가 아무리 뛰어나도 검색이 실패하면 답이 망가집니다. 그런데 대부분의 RAG는 문서가 관련 있든 없든 무조건 집어넣습니다.

문제는 두 가지입니다.

  1. 틀린 검색: 품질이 낮은 검색기는 관련 없는 정보를 잔뜩 가져와 모델을 오도하고 환각을 일으킵니다.
  2. 문서 전체를 통째로 쓰는 습관: 관련 있는 문서라도 상당 부분은 답과 무관한데, 기존 방법은 문서 전체를 똑같이 참고합니다.

앞선 Self-RAG는 '검색이 필요한지'와 '문서가 관련 있는지'를 판단했지만, 반성 토큰을 내도록 모델을 따로 학습해야 했습니다. CRAG는 검색이 틀렸을 때 바로잡는 교정 전략 에 초점을 맞추고, 어떤 생성기에도 붙일 수 있는 가벼운 부품으로 만들었습니다.

핵심 아이디어

mermaid
flowchart TD
  X[질문] --> R[검색기: 문서 10개]
  R --> E[검색 평가기 T5-large: 문서마다 관련성 점수]
  E --> J{신뢰도 판정}
  J -->|Correct: 하나라도 상한 초과| KR[지식 정제: 쪼개기 → 거르기 → 다시 붙이기]
  J -->|Incorrect: 모두 하한 미만| WS[질문을 키워드로 재작성 → 웹 검색 → 지식 정제]
  J -->|Ambiguous: 그 밖| BOTH[내부 정제 + 웹 검색 결과 합치기]
  KR --> G[아무 생성기 LLM]
  WS --> G
  BOTH --> G
  G --> Y[답]

1. 가벼운 검색 평가기

직관. 요리사(생성기)에게 재료를 넘기기 전에, 검수 담당자가 재료마다 "신선함 · 상함"을 빠르게 점수 매기는 단계입니다. 검수 담당자는 요리사만큼 비싼 사람일 필요가 없습니다.

단계별 설명.

  1. 질문마다 보통 문서 10개를 검색합니다(Self-RAG와 같은 Contriever 검색 결과를 그대로 사용).
  2. 질문과 문서 하나를 이어 붙여 평가기에 넣고, 쌍마다 관련성 점수 를 냅니다.
  3. 평가기는 T5-large(0.77B)를 미세조정해 만듭니다. 예를 들어 PopQA는 질문마다 정답 위키 문서 제목을 주므로, 그것으로 '관련 있는' 문단을 찾아 양성으로, 검색 결과 중 비슷하지만 관련 없는 것을 음성으로 씁니다.

왜 이렇게 했나. 큰 LLM에게 관련성을 물으면 비쌉니다. 논문의 비교에서 PopQA 검색 결과 판정 정확도가 T5 평가기 84.3, ChatGPT 58.0, ChatGPT + 생각의 사슬 62.4, ChatGPT 퓨샷 64.7로, 작은 전용 평가기가 더 정확 했습니다. Self-RAG의 비평 모델(Llama-2 7B)보다 훨씬 가볍다는 점도 강조합니다.

2. 세 가지 행동: 두 임곗값으로 판정

직관. 시험 채점처럼 '확실히 합격(상한 이상)', '확실히 불합격(하한 미만)', '애매(그 사이)' 세 구간을 둡니다. 애매할 때 한쪽으로 몰아붙이지 않는 것이 핵심입니다.

단계별 설명.

  1. 상한 임곗값 τup\tau_{\text{up}}과 하한 임곗값 τlow\tau_{\text{low}}를 정합니다.
  2. 문서 중 하나라도 점수가 상한을 넘으면 → Correct. 관련 문서가 있다고 보고 그 문서를 정제해 씁니다.
  3. 문서 모두 점수가 하한보다 낮으면 → Incorrect. 검색 결과를 버리고 웹 검색으로 새 지식을 찾습니다.
  4. 그 밖이면 → Ambiguous. 정제한 내부 지식과 웹 검색 결과를 둘 다 씁니다.

수식 (논문의 규칙을 식으로 정리).

행동={Correct,max⁡isi>τupIncorrect,max⁡isi<τlowAmbiguous,그 밖\text{행동} = \begin{cases} \text{Correct}, & \max_i s_i > \tau_{\text{up}} \\ \text{Incorrect}, & \max_i s_i < \tau_{\text{low}} \\ \text{Ambiguous}, & \text{그 밖} \end{cases}
기호뜻
sis_i평가기가 매긴 ii번째 문서의 관련성 점수
τup\tau_{\text{up}}, τlow\tau_{\text{low}}상한 · 하한 임곗값. 논문은 데이터셋별로 실험적으로 정함
max⁡isi\max_i s_i가장 관련 있어 보이는 문서의 점수 ('모두 하한 미만'은 최댓값이 하한 미만인 것과 같음)

논문이 쓴 임곗값 예시는 (상한, 하한) = PopQA (0.59, −0.99), PubHealth · ARC-Challenge (0.5, −0.91), Biography (0.95, −0.91)입니다.

숫자로 해 보기 (PopQA 임곗값 사용, 점수는 설명용).

  • 문서 점수가 (0.72,0.10,−0.50)(0.72, 0.10, -0.50) → 최댓값 0.72 > 0.59 → Correct
  • (−1.20,−1.05,−1.30)(-1.20, -1.05, -1.30) → 최댓값 −1.05 < −0.99 → Incorrect
  • (0.30,−0.20,−1.10)(0.30, -0.20, -1.10) → 최댓값 0.30은 상한 미만 · 하한 이상 → Ambiguous

왜 Ambiguous가 필요한가. 논문은 예비 실험에서 Correct · Incorrect 두 행동만 쓰면 평가기 정확도에 성능이 쉽게 흔들렸다고 밝힙니다. 판단이 확실하지 않아도 무조건 지식을 갈아타 버리기 때문입니다. 중간 행동을 두면 평가기가 틀려도 피해가 줄어듭니다. 절제 실험에서도 세 행동 중 무엇을 빼도 성능이 떨어졌습니다.

3. 지식 정제: 분해 → 거르기 → 재조합

직관. 두꺼운 참고서를 통째로 건네는 대신, 형광펜으로 필요한 문장만 칠해 그 부분만 오려 붙인 요약 노트를 건넵니다.

단계별 설명.

  1. 분해: 검색 문서를 '지식 조각(knowledge strip)'으로 나눕니다. 한두 문장짜리 문서는 그대로 하나의 조각, 긴 문서는 전체 길이에 따라 몇 문장씩 묶은 작은 단위로 자릅니다.
  2. 거르기: 같은 평가기로 조각마다 관련성 점수를 매기고, 낮은 조각을 버립니다(부록 설정: 상위 k=5k = 5, 거르기 임곗값 −0.5).
  3. 재조합: 남은 조각을 원래 순서대로 이어 붙여 '내부 지식'을 만듭니다.

숫자로 해 보기 (설명용). 문서 하나를 조각 4개로 나눴더니 점수가 (0.8,−0.9,0.2,−0.7)(0.8, -0.9, 0.2, -0.7)이라면, 임곗값 −0.5보다 낮은 2번 · 4번을 버리고 1번 · 3번만 순서대로 붙입니다. 생성기는 절반 길이의 더 깨끗한 근거를 받습니다.

4. 웹 검색으로 교정

직관. 회사 자료실에 답이 없다고 판단되면, 억지로 엉뚱한 자료를 쓰지 말고 바깥 도서관(웹)으로 가는 것입니다.

단계별 설명.

  1. ChatGPT로 질문을 검색창에 넣기 좋은 키워드 질의 로 다시 씁니다.
  2. 상용 웹 검색 API(구글 검색 API)로 URL 목록을 받습니다. 편향 · 부정확한 정보를 줄이려고 위키백과처럼 권위 있는 페이지를 우선합니다.
  3. 페이지 내용을 가져와 위와 같은 지식 정제를 거쳐 '외부 지식'으로 씁니다.

왜 이렇게 했나. 고정된 말뭉치는 범위와 다양성에 한계가 있어, 검색이 실패했을 때 그 안에서 아무리 다시 찾아도 좋은 문서가 없을 수 있습니다. 논문은 "자기가 모른다는 것을 알고 바깥 지식을 찾는 시스템이 더 똑똑하다"고 표현합니다.

결과

네 데이터셋 결과 (PopQA · PubHealth · ARC-C는 정확도, Biography는 FactScore)

생성기방법PopQABiographyPubHealthARC-C
LLaMA2-hf-7bRAG50.544.948.943.4
LLaMA2-hf-7bCRAG54.947.759.553.7
LLaMA2-hf-7bSelf-RAG (재현)29.032.20.723.9
LLaMA2-hf-7bSelf-CRAG49.069.10.627.9
SelfRAG-LLaMA2-7bRAG52.859.239.053.2
SelfRAG-LLaMA2-7bCRAG59.874.175.668.6
SelfRAG-LLaMA2-7bSelf-RAG54.981.272.467.3
SelfRAG-LLaMA2-7bSelf-CRAG61.886.274.867.2
  • 기본 RAG에 붙이면: SelfRAG-LLaMA2-7b 생성기 기준 PopQA +7.0, Biography +14.9, PubHealth +36.6, ARC-C +15.4(%p)였습니다.
  • Self-RAG에 붙이면(Self-CRAG): 같은 생성기 기준 PopQA +6.9, Biography +5.0, PubHealth +2.4였습니다.
  • 생성기를 바꿔도 견고합니다. 반성 토큰을 배우지 않은 일반 LLaMA2-hf-7b로 바꾸면 Self-RAG는 크게 무너졌지만(PubHealth 0.7), CRAG는 경쟁력을 유지했습니다. CRAG는 생성기에 특별한 능력을 요구하지 않기 때문입니다.

절제 실험 (PopQA 정확도, SelfRAG-LLaMA2-7b 생성기)

설정CRAGSelf-CRAG
전체59.861.8
Correct 행동 제거58.359.6
Incorrect 행동 제거59.560.8
Ambiguous 행동 제거59.061.5
문서 정제 제거54.252.2
질의 재작성 제거56.258.4
외부 지식 선별 제거58.657.9
  • 어느 행동 · 어느 지식 활용 단계를 빼도 성능이 떨어졌고, 문서 정제 를 뺐을 때 하락이 가장 컸습니다.

비용 (토큰당 TFLOPs / 실행 시간): RAG 26.5 / 0.363초, CRAG 27.2 / 0.512초, Self-RAG 26.5~132.4 / 0.741초, Self-CRAG 27.2~80.2 / 0.908초. 계산량 증가는 작았습니다.

왜 중요한가 · 이후 영향

  • "검색이 틀렸을 때"를 정면으로 다룬 RAG 설계 로 자리 잡았습니다. 실무 RAG에서 검색 결과를 평가해 재검색 · 웹 검색으로 넘기는 '교정 루프' 패턴의 대표 참고 사례입니다.
  • 플러그 앤 플레이: 생성기를 재학습하지 않고 앞단에 평가기와 정제 단계만 붙이면 되므로, 더 좋은 LLM이 나오면 그대로 바꿔 끼울 수 있습니다.
  • 문서를 조각 단위로 정제 하는 아이디어는 긴 문맥에 불필요한 내용을 넣지 않는 '문맥 압축 · 선별' 기법과 맞닿아 있습니다.

한계 · 주의할 점

  • 평가기 품질에 크게 의존합니다. 논문은 결론에서 외부 평가기를 따로 미세조정해야 하는 점을 한계로 꼽고, 이 평가기를 없애고 LLM 자체에 검색 평가 능력을 주는 것을 다음 과제로 둡니다. 앞의 논의에서도 성능이 평가기 정확도에 흔들릴 수 있음을 짚습니다.
  • 임곗값을 데이터셋마다 정해야 합니다. 논문은 실험적으로 값을 골랐고, 새 분야에서는 다시 맞춰야 합니다.
  • 웹 검색의 위험: 편향되거나 신뢰할 수 없는 정보가 들어올 수 있어 권위 있는 페이지를 우선했지만, 완전한 해결책은 아닙니다. 또 사내 기밀 질문을 외부 검색 API로 보내는 것은 보안상 따로 검토가 필요합니다.
  • 질의 재작성에 ChatGPT를 씁니다. 이 단계만큼은 외부 LLM 비용과 의존이 생깁니다.

스스로 점검

  1. PopQA 임곗값(0.59, −0.99)에서 문서 점수가 (0.40,−0.30)(0.40, -0.30)이면 어떤 행동인가요?

    최댓값 0.40은 0.59 미만이고 −0.99 이상이므로 Ambiguous입니다. 정제한 내부 지식과 웹 검색 결과를 함께 씁니다.

  2. Correct · Incorrect 두 행동만 쓰면 어떤 문제가 생기나요?

    평가기 판단이 애매해도 무조건 한쪽으로 지식을 갈아타 버려, 성능이 평가기 정확도에 쉽게 흔들립니다.

  3. CRAG가 Self-RAG보다 생성기 교체에 강한 이유는?

    Self-RAG는 생성기가 반성 토큰을 내도록 학습돼 있어야 하지만, CRAG는 앞단에서 검색 결과만 고쳐 주므로 생성기에 특별한 능력을 요구하지 않습니다.

용어 정리

용어쉬운 뜻
교정 RAG(Corrective RAG)검색 결과를 평가해 틀리면 바로잡은 뒤 생성하는 RAG
검색 평가기(retrieval evaluator)질문-문서 쌍의 관련성을 점수로 매기는 작은 모델
신뢰도(confidence degree)평가 점수로 정한 '검색이 맞았다고 믿을 수 있는 정도'
Correct · Incorrect · Ambiguous검색 맞음 · 틀림 · 애매함에 따른 세 가지 행동
지식 조각(knowledge strip)문서를 몇 문장 단위로 잘게 나눈 조각
분해-재조합문서를 조각으로 나누고, 관련 없는 조각을 버린 뒤 남은 것을 다시 이어 붙이는 방법
질의 재작성(query rewriting)질문을 검색에 맞는 키워드 형태로 다시 쓰는 것
플러그 앤 플레이기존 시스템을 고치지 않고 끼워 넣어 바로 쓸 수 있는 방식
FactScore긴 글(전기)의 사실 정확도를 재는 지표
환각(hallucination)근거 없는 내용을 사실처럼 생성하는 현상

이어서 읽을 것

다음에 볼 것

이 글을 이해했다면 이어서 보면 좋은 항목입니다.

출처

  • 원문: https://arxiv.org/abs/2401.15884 (2024 · Shi-Qi Yan 외)

AI 원리부터 이해하기 · RAG·검색 모듈

RAG·검색 모듈 학습

이 글은 RAG·검색 모듈의 학습 자료입니다. 전체 21개 자료 중 17번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

arXiv (논문별 상이)

arXiv 2401.15884