보통 AI는 질문을 받으면 무조건 자료를 검색합니다. 하지만 이 방식은 AI가 먼저 "이 질문에 검색이 필요한가?"를 스스로 판단해요. 마치 의사가 환자를 볼 때 "이건 검사가 필요하겠다" 또는 "이건 바로 알 수 있다"고 판단하는 것과 같습니다.
"1 더하기 1은?"처럼 이미 알고 있는 건 굳이 검색하지 않고 바로 답합니다. "최근 반도체 수출 동향은?"처럼 최신 정보가 필요하면 자료를 찾아보고요. 답변을 만든 후에도 "이 답이 정확한가?" 스스로 검증하는 단계까지 거칩니다.
의료 분야에서 특히 유용하게 쓰이고 있어요. 의료 논문 검색 서비스에서 AI가 의사의 질문을 받을 때, 일반 상식인지 최신 연구 결과를 찾아야 하는지 자동으로 구분해서 대응합니다. 불필요한 검색을 줄여서 답변 속도도 빨라지고, 정확도도 높아지는 일석이조의 효과가 있습니다.
📚 선수학습: 이 내용을 이해하려면 RAG (Retrieval-Augmented Generation)를 먼저 읽으면 좋습니다.
Self-RAG는 Asai et al. (2023)이 제안한 방법으로, LLM이 스스로 검색 여부를 판단하고, 생성한 답변의 품질을 **자체 평가(self-reflection)**하는 프레임워크다. 핵심은 네 가지 리플렉션 토큰(reflection token)1을 LLM에 학습시켜, 생성 과정에서 비평(critique)을 인라인으로 수행하는 것이다.
네 가지 리플렉션 토큰:
| 토큰 | 역할 | 값 |
|---|---|---|
[Retrieve] | 검색이 필요한가? | Yes / No / Continue |
[IsREL] | 검색된 문서가 관련 있는가? | Relevant / Irrelevant |
[IsSUP] | 생성이 문서에 근거하는가? | Fully / Partially / No |
[IsUSE] | 답변이 유용한가? | 5 / 4 / 3 / 2 / 1 |
생성 과정은 다음과 같이 진행된다:
입력 x
│
▼
LLM: [Retrieve] 판단
├─ No → 직접 생성 (검색 불필요한 경우)
└─ Yes → 검색 수행
│
▼
각 문서 d_i에 대해:
LLM: [IsREL] 판단 → Irrelevant면 건너뜀
LLM: 답변 y_i 생성
LLM: [IsSUP] 판단 → 근거 평가
LLM: [IsUSE] 판단 → 유용성 평가
│
▼
최고 점수 답변 선택
최종 답변 선택은 리플렉션 토큰의 가중 합산 점수로 결정된다:
여기서 은 관련성 지시 함수2이고, 는 가중치다. 추론 시 가중치를 조절하여 **인용 정밀도(citation precision)**와 창의성(creativity) 사이의 균형을 맞출 수 있다.
Self-RAG는 표준 RAG 대비 다양한 벤치마크에서 우위를 보인다:
| 벤치마크 | 표준 RAG | Self-RAG | 향상 |
|---|---|---|---|
| PopQA | 50.8 | 54.9 | +4.1 |
| PubHealth | 72.4 | 81.2 | +8.8 |
| ARC-Challenge | 67.7 | 72.4 | +4.7 |
| ASQA (EM) | 33.9 | 37.3 | +3.4 |
특히 사실 검증(fact verification) 태스크에서 두드러진 향상을 보이며, 이는 [IsSUP] 토큰이 근거 없는 생성을 효과적으로 필터링하기 때문이다.
장점:
한계:
selfrag/selfrag_llama2_7b 모델로 시작 가능[IsSUP] 토큰의 역할을 NLI(Natural Language Inference) 모델로 대체하는 것도 실용적 대안Dify