정보의 홍수 속에서 신뢰할 수 있는 지식을 찾는 것은 점점 어려워지고 있습니다. 인터넷에는 검증되지 않은 정보들이 넘쳐나고, 인공지능 챗봇이라는 새로운 정보 탐색 도구가 등장했지만, 이들의 답변을 얼마나 신뢰할 수 있는지에 대한 의문은 여전히 남아있습니다.

그림 1. 정보 과잉과 그 속의 가짜 뉴스들
AI 생성 이미지 (Gemini)

기존 인공지능 챗봇은 방대한 양의 데이터를 학습하지만, 정보의 출처를 명확히 제시하지 못하고, 때로는 허위 정보를 생성하는 환각(Hallucination) 현상을 보이기도 합니다. 이는 언어모델(Language Model)의 성능이 학습한 데이터의 질과 양에 따라 크게 좌우되기 때문인데, 데이터의 양을 늘리기 위해 검증되지 않은 무작위 인터넷 데이터를 학습하는 과정에서 불가피하게 발생하는 문제입니다. 또한, 빠르게 변화하는 세상 속에서 모든 정보를 실시간으로 학습하고 정확하게 반영하기에는 한계가 있습니다.

이러한 한계를 극복하기 위해 등장한 것이 바로 RAG(Retrieval-Augmented Generation)입니다. RAG는 인공지능 모델이 방대한 양의 정보를 검색하고, 그 결과를 바탕으로 더욱 정확하고 풍부한 답변을 생성할 수 있도록 돕는 혁신적인 기술입니다. 즉, RAG는 챗봇이 단순히 학습된 정보를 재생산하는 것을 넘어, 사용자의 질문에 대한 답변을 찾기 위해 실시간으로 정보를 검색하고, 그 결과를 종합하여 가장 적절한 답변을 제공할 수 있도록 언어 모델에게 도움을 줄 수 있습니다.

이 글에서는 RAG가 무엇이고, 왜 필요한지, 그리고 어떻게 우리의 삶을 변화시킬 수 있을지에 대해 자세히 알아보겠습니다. RAG는 단순히 정보 검색의 효율성을 높이는 것을 넘어, 우리가 정보를 얻고 활용하는 방식을 근본적으로 변화시킬 잠재력을 가지고 있습니다.


RAG(Retrieval-Augmented Generation)

그림 2. Retrieval-Augmented Generation Concept Diagram
Michiel De Koninck (2024)

인공지능 챗봇이 검색을 활용하는 것은 마치 사람이 오픈북 시험을 치르는 것과 유사합니다. 일반적인 시험에서는 머릿속에 내재된 지식만을 활용하여 문제를 해결해야 하지만, 오픈북 시험에서는 실시간으로 참고 자료를 활용하여 문제 풀이가 가능합니다. 마찬가지로, 통상적인 챗봇은 이미 학습된 지식을 바탕으로 주어진 질문에 대한 답변을 생성하지만, RAG(Retrieval-Augmented Generation)를 활용하는 챗봇은 데이터베이스 내의 유용한 참고 자료들을 바탕으로 더욱 정확하고 풍부한 답변을 생성할 수 있습니다.

검색 증강 생성이란 말 그대로 데이터베이스를 검색(Retrieval)하고, 검색된 결과를 활용하여 생성(Generation) 결과를 강화(Augmentation)시키는 것을 의미합니다. 여기서 핵심은 검색입니다. 마치 오픈북 시험에서 문제와 관련된 참고자료를 찾는 것이 중요하듯이, RAG에서도 정확한 정보를 검색하는 것이 답변의 질을 좌우합니다. 만약 검색 결과가 부정확하다면, 아무리 뛰어난 언어 모델이라도 잘못된 정보를 바탕으로 답변을 생성할 수밖에 없습니다.

이때, 사람은 자신의 지식과 경험을 바탕으로 필요한 정보를 찾지만, 언어 모델은 별도의 검색 모델을 이용하여 정보를 검색합니다. 이러한 분리된 구조는 언어 모델과 검색 모델을 각각 개선할 수 있다는 장점을 가집니다. 예를 들어, 언어 모델이 올바른 정보를 제대로 활용하지 못한다면, 언어 모델 자체를 개선하면 됩니다. 즉, 검색 모델의 정확도를 높이기 위해 다양한 검색 알고리즘을 개발하고, 언어 모델의 경우 생성된 답변의 질을 높이기 위해 학습 데이터를 개선하는 것이 가능합니다.

요약하면, RAG는 언어 모델이 외부 정보를 활용하여 더욱 정확하고 신뢰할 수 있는 답변을 생성할 수 있도록 돕는 기술입니다. 마치 사람이 오픈북 시험에서 참고자료를 활용하여 문제를 해결하듯이, RAG를 통해 챗봇은 더욱 지능적이고 유용한 도구로 발전할 수 있습니다.


RAG의 동작 원리

그림 3. Comparison between the three paradigms of RAG
Yunfan Gao, et al. (2024)

RAG(Retrieval-Augmented Generation)는 외부 지식 소스를 활용하여 언어 모델의 답변 생성 능력을 향상시키는 방법 중 하나입니다. 여기서 Naive RAG는 명칭에서 나타나듯 비교적 단순한 구조를 지니며, 기본적인 RAG의 동작 원리를 이해하는 데 유용한 출발점을 제공합니다.

[Naive RAG의 동작 과정]

  1. 질의(Query) 입력: 사용자로부터 언어 모델에 질문 또는 요청을 입력받습니다.
  2. 질의 임베딩(Query Embedding): 입력된 질의는 임베딩 모델을 거쳐 벡터 형태로 변환됩니다. 임베딩이란 텍스트 데이터를 수치화하여 벡터 공간에 표현하는 과정으로, 의미적으로 유사한 텍스트들은 벡터 공간 내에서 가까운 위치에 배치됩니다.
  3. 벡터 데이터베이스 검색: 사전에 구축된 벡터 데이터베이스에서 질의 임베딩과 가장 유사한 벡터를 탐색합니다. 이 데이터베이스는 외부 지식 소스(예: 문서, 웹 페이지, 데이터베이스 등)의 텍스트를 임베딩하여 저장하고 있습니다. FAISS와 같은 라이브러리가 벡터 검색에 주로 활용됩니다. 유사도 검색을 통해 질의와 의미적으로 가장 연관 있는 텍스트 조각(chunk)들을 검색합니다.
  4. 검색 결과 추출: 검색된 텍스트 조각들과 원래의 질의를 함께 언어 모델의 입력으로 전달합니다. 이때, 질의와 함께 제공되는 검색된 텍스트는 ‘맥락(context)’의 역할을 수행합니다.
  5. 언어 모델 생성: 언어 모델은 제공받은 질의(query)와 맥락(context)을 (바탕으로/토대로) 최종 답변을 생성합니다. 검색된 텍스트가 답변 생성의 참고 자료로 활용되므, 언어 모델은 단순히 학습된 지식에 의존하는 것이 아닌 외부 정보를 활용하여 더욱 정확하고 풍부한 답변을 도출할 수 있습니다.

이러한 Naive RAG는 비교적 간단하게 구현할 수 있어 신속한 프로토타입 제작이 가능하다는 장점을 갖습니다. 하지만 검색된 맥락과 질의의 관련성이 낮을 경우 부정확한 답변을 생성할 수 있으며, 검색된 맥락과 질의 사이의 관계성을 제대로 파악하지 못해 불필요한 정보가 포함될 수 있다는 한계점을 지닙니다.

이러한 한계점들을 극복하기 위해 Advanced RAG와 같은 더욱 발전된 방법들이 연구되고 있습니다. Advanced RAG는 다양한 청킹 전략, 쿼리 재구성(query rewriting), 검색 결과 재정렬(re-ranking) 등의 기술을 활용하여 검색 및 생성 과정의 효율성과 정확성을 향상시키는 것을 목표로 합니다. Naive RAG는 RAG의 기본 원리를 이해하는 데 효과적인 출발점이지만, 실제 서비스에 적용하기 위해서는 Advanced RAG와 같은 더욱 발전된 모델을 고려하는 것이 바람직합니다.


RAG의 활용 사례

특정 도메인에 특화된 질의의 경우, 위 그림과 같이 LLM(Large Language Model)이 자체적으로 응답하기 어려울 수 있습니다. LLM은 광범위한 지식을 학습하지만 모든 지식을 망라할 수는 없기 때문에 특정 영역에 심화된 질문에 대해서는 지식의 난이도와는 별개로 해당 지식에 접근할 기회가 없을 수 있습니다.

또한 보험사의 보험약관 문서와 같이 방대한 양의 내용이 주기적으로 변경되는 경우, 변경된 내용을 LLM에 지속적으로 학습시키는 것은 비용 효율성이 떨어질 수 있습니다. 이와 같은 경우는 RAG를 활용하는 편이 비용절감에 큰 도움이 될 수 있습니다.

그 밖에도 법률 문서 검색, 학술 논문 검색, 제품 설명서 검색, 뉴스 기사 검색, 교육 자료 검색과 의료 기록 분석, 고객 상담 등 다양한 영역에서 모델에 새로운 지식을 학습하는 것 보다 RAG를 이용한 검색을 통해서 답변을 확장시키는 편이 품질 및 비용 양쪽 측면에서 모두 유리할 수 있습니다.


RAG의 미래 전망

그렇다면 RAG가 모든 문제의 해결책이 될 수 있을까요? 그렇지는 않습니다. RAG는 새로운 지식을 습득하기 위해 추가적인 학습(fine-tuning)이 필요하지 않다는 장점을 가지고 있어 신속하게 새로운 정보를 활용할 수 있다는 이점을 제공하지만, 검색 성능에 크게 의존한다는 근본적인 문제점을 가지고 있습니다. 예를들어, 검색하지 않았다면 능히 답변할 수 있었던 질문에 대해 잘못된 검색 결과를 참조함으로써 오히려 오답을 생성할 수 있습니다.

또한 최근에는 AI 타임즈의 기사 “RAG를 사용하지 마세요… 모든 정보를 프롬프트에 입력하세요"에서 볼 수 있듯이, RAG보다는 장기 컨텍스트(long context) 기술을 활용하여 참고 문서 전체를 입력으로 제공하는 방식이 주목받고 있습니다.

대형 언어 모델(Large Language Model)의 성능과 컨텍스트 길이(context length)가 함께 발전함에 따라, 굳이 검색 과정을 거치지 않고도 대용량 문서를 언어 모델이 직접 검토하여 질의와 관련된 부분에 대한 답변을 생성하는 것이 가능해진 것입니다.

그리고 RAG로는 해결하기 어려운 문제들도 존재합니다. 예를 들어 “두 문서의 차이점을 비교해 주세요"와 같은 질의의 경우, 문서 내에 두 문서 간의 차이점을 명시적으로 기술한 내용이 있는 경우가 아니라면, 맥락을 이용한 검색만으로는 차이점을 도출내는 것이 거의 불가능합니다. 반면 장기 컨텍스트를 활용할 경우, 단순히 두 개의 문서와 질의를 입력하는 것만으로도 LLM의 성능에 따라 우리가 원하는 결과를 높은 확률로 얻을 수 있습니다.

장기 컨텍스트가 무한정으로 확장될 것이라는 예측도 있지만, 아직까지는 약 100페이지 내외의 정보만을 처리할 수 있는 수준입니다. 그 이상의 정보를 참조해야 하는 경우에는 여전히 검색을 통한 데이터 축소 과정이 필요합니다.

결론적으로 RAG만으로는 해결할 수 없는 질의가 존재하고, 장기 컨텍스트라는 효과적인 대안이 있기 때문에, 모든 문제를 RAG로 해결할 수 있다고 단정짓고 RAG를 도입하는 것은 바람직하지 않을 수 있습니다.


결론

RAG는 LLM이 미처 학습하지 못한 최신 정보나 특정 도메인에 특화된 지식을 필요로 하는 질문에 대해 외부 지식 소스를 검색하여 답변을 생성함으로써 LLM의 답변 정확도를 높이고, 새로운 지식에 대한 추가 학습 없이도 즉각적으로 정보를 활용할 수 있도록 합니다. 또한, 방대한 양의 정보를 LLM에 지속적으로 학습시키는 데 드는 비용을 절감할 수 있다는 장점도 있습니다.

그러나 RAG는 검색 성능에 크게 의존한다는 근본적인 문제점을 가지고 있습니다. 검색 시스템의 성능이 낮거나 검색된 정보의 품질이 좋지 않으면 RAG의 답변 품질 또한 낮아질 수밖에 없습니다. 또한, 검색된 정보와 질문 사이의 관련성을 제대로 파악하지 못하거나 불필요한 정보가 포함된 답변을 생성할 수도 있습니다.

게다가 최근에는 RAG의 대안으로 장기 컨텍스트(long context) 기술이 주목받고 있습니다. 장기 컨텍스트 기술은 RAG와 달리 외부 지식 소스를 검색하는 과정 없이, 참고 문서 전체를 LLM의 입력으로 제공하여 답변을 생성하는 방식입니다.

LLM의 성능과 컨텍스트 길이가 발전함에 따라 장기 컨텍스트 기술은 RAG 없이도 대용량 문서를 LLM이 직접 검토하여 질문과 관련된 부분에 대한 답변을 생성하는 것이 가능하게 되었습니다. 하지만 장기 컨텍스트 기술 역시 아직까지는 처리할 수 있는 정보의 양에 한계가 있습니다.

결론적으로 RAG는 LLM의 한계를 보완하고 다양한 분야에서 활용될 수 있는 유용한 기술이지만, 만능 해결책은 아니라는 점을 명심해야 합니다. RAG를 도입할 때에는 질문의 유형, 검색 시스템의 성능, 장기 컨텍스트 기술과의 비교 등 다양한 요소를 종합적으로 고려하여 신중하게 결정해야 합니다.


Reference

[1] De Koninck, Michiel (2023) | Leveraging LLMs on your domain-specific knowledge base

[2] Gao, Yunfan (2024) | Retrieval-Augmented Generation for Large Language Models: A Survey

[3] Vergadia, Priyanka (2024) | RAG vs Large Context Window LLMs: When to use which one?