검색 증강 생성과 검색
외부 지식을 검색해 생성에 결합하는 RAG의 구조와 주장, 흔한 오해, 긴 컨텍스트와의 관계를 정리한 개념 뼈대 글이다.
고친 내용: 초판
검색을 붙인 생성
사전학습 언어모델은 가중치 안에 상당한 사실 지식을 품고 있지만, 지식을 정확히 꺼내고 다루는 능력은 제한적이다. RAG 논문은 바로 이 지점에서 출발한다. 지식 집약적인 태스크에서는 모델만으로 답하는 성능이 태스크 전용 구조에 뒤처지고, 결정의 근거를 대는 일과 세계 지식을 갱신하는 일은 열린 문제로 남는다는 것이다. 해법은 모델 밖에 지식을 두고 필요할 때 가져오는 통로를 미분 가능한 구조로 붙이는 것이다.
이 발상은 검색과 생성을 별개의 단계로 보지 않는 데 핵심이 있다. 검색된 문서가 생성의 조건이 되므로, 모델은 외운 것을 토해내는 대신 눈앞의 근거를 읽고 답을 빚는다. 잘 되면 최신성과 출처 표시에 유리하고, 잘못되면 검색 실패가 곧장 오답으로 이어진다. RAG를 이해한다는 것은 이 결합의 이득과 대가를 함께 이해한다는 뜻이다.
구조: retriever와 generator
원 논문의 RAG는 세 부품으로 이루어진다. 파라메트릭 메모리에 해당하는 사전학습 seq2seq 생성 모델, 비파라메트릭 메모리에 해당하는 Wikipedia의 dense vector 인덱스, 그리고 질문에 맞는 구절을 고르는 사전학습 neural retriever다. 질문이 오면 retriever가 관련 구절들을 추리고, generator는 그 구절들을 조건으로 삼아 답을 생성한다.
논문은 두 가지 formulation을 비교했다. 하나는 검색된 구절들을 생성 전체에 걸쳐 고정해 쓰는 방식이고, 다른 하나는 토큰을 만들 때마다 다른 구절을 참고할 수 있는 방식이다. 어느 쪽이든 핵심은 같다. 생성의 근거를 외부 문서에 두었다는 것이다. 이 구조는 이후 수많은 변형을 낳았지만, 검색-생성 결합이라는 뼈대는 그대로 남았다.
무엇이 달라졌나
논문이 보고한 바에 따르면 RAG 모델들은 파인튜닝과 평가를 거쳐 세 개의 open-domain 질의응답 태스크에서 당시 최고 성능을 기록했다. 비교 대상은 파라메트릭 seq2seq 모델과 태스크 전용 retrieve-and-extract 구조였다. 지식 집약 태스크의 넓은 범위에서 평가했다는 점도 함께 보고되었다. 이 결과는 외부 기억을 붙인 생성이 순수 파라메트릭 생성을 앞설 수 있음을 보인 사례로 읽힌다.
다만 이 수치는 2020년의 실험 설정 안에서만 의미를 가진다. 인덱스의 구성, retriever의 품질, 평가 태스크의 선택이 모두 결과에 영향을 준다. 이 서가는 원 논문의 주장을 그 조건과 함께 전달할 뿐, RAG가 모든 태스크에서 항상 우월하다는 식의 일반화는 하지 않는다.
흔한 오해
첫째, RAG는 만능이 아니다. 검색이 실패하면 생성도 실패한다. 엉뚱한 문서를 근거로 삼은 답은 그럴듯한 오답이 되기 쉽고, 이 경우 모델만 썼을 때보다 오히려 검증이 어려워질 수 있다. 둘째, RAG라는 말은 원 논문의 구조를 넘어 검색을 곁들인 생성을 통틀어 가리키게 되었다. 누군가 RAG를 말할 때는 원 논문의 구조인지, 그저 검색 결과를 프롬프트에 붙이는 것인지 확인해야 한다. 이 구분은 이 글의 편집자 관점이며, 용어의 확장을 탓하자는 것이 아니라 혼선을 피하자는 제안이다.
셋째, 외부 지식을 붙였다고 환각이 사라지지 않는다. 모델은 검색 결과를 오독하거나 없는 내용을 덧붙일 수 있다. 근거를 함께 보여주는 설계는 검증 가능성을 높이지만, 그 자체가 정답을 보장하지는 않는다. 넷째, 업데이트가 공짜가 아니다. 인덱스를 최신으로 유지하고 낡은 문서를 가려내는 일은 별도의 운영 비용이다.
긴 컨텍스트와의 관계
한 번에 입력할 수 있는 분량이 늘어나자 검색이 필요 없어졌다는 말이 나왔다. 자료를 전부 입력에 넣으면 되지 않느냐는 것이다. 그러나 Lost in the Middle 연구가 보였듯, 긴 입력 안의 정보를 모델이 골고루 잘 쓴다는 보장은 없다. 관련 정보가 중간에 묻히면 못 읽는 경향이 관찰되었고, 이는 긴 입력용 모델에서도 나타났다. 검색의 역할은 단순히 분량을 줄이는 것이 아니라 읽어야 할 것을 앞으로 내미는 일이라는 해석이 가능하다.
그래서 실무의 선택은 검색 대 긴 입력의 이분법이 아니라 배합의 문제다. 검색으로 후보를 좁히고, 그중 핵심을 추려 배치하며, 그래도 모자라면 여러 번 나누어 묻는다. 비용도 함께 따져야 한다. 긴 입력은 매 호출의 계산량을 키우고, 검색은 인덱스 운영비를 요구한다. 어느 쪽이 유리한지는 질문의 성격과 자료의 규모에 따라 달라진다.
열린 문제
검색 증강 생성의 숙제는 대체로 세 가지다. 무엇을 가져올 것인가, 가져온 것을 어떻게 배치하고 생성에 반영할 것인가, 그리고 그 전 과정을 어떻게 평가할 것인가. 특히 평가는 검색의 기여와 생성의 기여를 분리하기 어려워 까다롭다. 답이 좋아졌을 때 검색 덕분인지 모델 덕분인지 알기 힘들기 때문이다. 이 서가의 범위를 넘어서는 최신 기법 논쟁에는 발을 들이지 않고, 이 글은 원 논문의 뼈대와 그로부터 뻗은 질문들까지만 다룬다.
검색의 품질이 곧 답의 품질
RAG의 성패는 retriever의 어깨에 걸려 있다. 관련 구절을 잘 고르면 생성은 근거 위에서 춤추지만, 엉뚱한 구절을 고르면 그럴듯한 오답의 재료만 늘어난다. 그래서 검색 증강 생성의 절반은 검색의 설계다. 무엇을 인덱스에 담을 것인가, 질문을 어떻게 벡터로 빚을 것인가, 몇 개를 추리고 어떻게 순서를 매길 것인가.
배치의 문제도 검색의 연장이다. 추린 구절을 어떤 순서로 앞에 둘 것인가. Lost in the Middle의 관찰을 기억한다면 핵심을 앞에 두는 일이 단순한 예의가 아니라 성능의 변수임을 알 수 있다. 검색과 배치를 함께 설계할 때 RAG는 비로소 근거 있는 답에 다가간다.
이 글의 입장
검색을 곁들인 생성은 근거와 최신성의 가능성을 열었지만, 검색의 실패와 운영의 비용을 함께 안는다는 것이 이 글의 입장이다. 원 논문의 구조와 넓어진 용법을 구분하고, 결합의 이득과 대가를 함께 본다. 이 태도가 RAG를 뜬소문이 아니라 설계의 재료로 대하는 길이다.
현재 판 출처 (이 개정의 출처 보관본 아님) 2건
아래는 현재 판의 출처 목록을 고리 풀이용으로 그대로 둔 참조이며, 이 개정의 출처 보관본이 아니다.