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