• Turing Post Korea
  • Posts
  • Topic #9: 'Speculative RAG'은 무엇인가?

Topic #9: 'Speculative RAG'은 무엇인가?

기존 RAG 접근법들의 한계, 그리고 Speculative RAG이 착안한 아이디어

*’튜링 포스트’ 본사와의 글 발행 타이밍 미스매치로 인해, 이번 AI 101 시리즈까지 모든 분들이 발행과 함께 전문을 읽으실 수 있게 되었습니다. 글 재미있게 읽어주세요!

TL;DR

  • Speculative RAG는 기존 RAG 시스템의 한계를 극복하기 위해 작은 전문 모델과 큰 범용 모델을 함께 사용하는 혁신적인 접근 방식입니다.

  • 이 방식은 작은 모델이 여러 답변 초안을 만들고 큰 모델이 이를 검증하는 방식으로 작동하여, 정확도는 높이고 응답 시간은 단축시킵니다.

  • Speculative RAG는 의료나 법률 같은 복잡하고 지식 집약적인 분야에서 특히 유용하지만, 모든 상황에 적합한 것은 아니므로 응용 분야의 특성을 고려해 적용해야 합니다.

글을 시작하며

하루가 멀다하고 새로운 RAG에 대한 연구가 나오는 것 같네요. 튜링 포스트 코리아에서도 이미 몇 차례 RAG 접근법과 그 변형에 대해서 다룬 적이 있는데요:

외부 정보를 활용해서 LLM 어플리케이션을 만드는 ‘RAG’은, Long-Context라든가 지연 시간 문제 등 계속해서 그 한계를 해결하는 방향으로 끊임없이 진화하는 중인데, 최근에는 LLM을 활용해서 검색 결과를 평가하거나 반복적으로 개선하는 방향의 시도들도 많이 보이는 것 같습니다.

‘Speculative RAG’은 RAG을 개선하기 위한 최신의 접근법 중 하나로, 두 가지 종류의 언어모델을 사용해서 RAG 작업의 ‘효과’와 ‘효율’이라는 두 마리 토끼를 다 잡으려는 방법입니다. 바로 ‘작은’ 언어모델을 전체의 큰 프레임웍 안에서 활용하는 아이디어인데, 어떤 배경에서 Speculative RAG라는 개념을 생각하게 되었는지 살펴볼까 합니다.

이 글은 아래 목차로 구성되어 있습니다:

기존 RAG 시스템 개요, 그리고 한계

이미 아시다시피, RAG (Retrieval-Augmented Generation) 시스템은 거대언어모델 (LLM)과 외부의 데이터 소스를 결합해서 사용자의 질의에 답변하는 구조로, LLM이 학습해서 내재화한 데이터가 아니라 별도의 소스에서 검색한 데이터를 통합해서 답변의 정확성, 관련성을 높이는 것을 목표로 합니다.

하지만 이 ‘Original’ RAG에는 몇 가지 한계가 있죠:

  • Original RAG은 검색된 모든 문서를 그대로 프롬프트에 집어넣으니까, 그 길이가 많이 늘어나고 응답 시간이 느려집니다 - Long-Context Window 처리에 어려움이 있는 거죠.

  • LongRAG는 Long-Context Window를 처리할 수 있지만, 현재 사용 가능한 ‘임베딩 모델’ - RAG 파이프라인에서 외부 데이터 소스를 벡터로 변환하는 모델 - 의 한계, 확장된 입력을 처리할 때 나타나는 LLM의 비효율성, 그리고 위키피디아에 특화된 그룹화 방식에 의존하는 점 때문에 아직 널리 사용하기에는 이슈가 있습니다.

  • 최근들어 더 많은 관심을 받고 있는 GraphRAG은 데이터를 그래프 구조로 구성해서 데이터 간의 상호 관계를 표현하는데요. 이 그래프 기반 모델은 시간이 지나면서 변수 간의 관계가 변하는 ‘비정상성 (Non-Stationary)’ 데이터를 다룰 때는 곤란해질 수 있습니다.

  • Self-Reflective RAG은 범용 언어모델에 특별한 인스트럭션 튜닝을 해서 특정한 ‘태그’를 만들어내야 하기 때문에, 때로는 복잡하고 자원이 필요한 추가적인 튜닝이 필요할 수 있습니다.

  • Corrective RAG는 외부의 ‘검색 평가기 (Retrieval Evaluator)’를 사용해서 검색된 문서의 품질을 개선하는데, ‘맥락 정보 (Contextual Information)’의 개선에만 초점을 맞춘 방법입니다. 이 방식의 문제는 모델의 추론 (Reasoning) 능력 자체를 향상시키지는 못한다는 것이죠.

Image Credit: Speculative RAG 논문

종합해 보자면, 위 여러가지 방법은 각자 나름의 장점이 있지만, ‘Long-Context를 잘 다루고 다양한 관점을 균형있게 검토하면서도 속도와 정확성을 담보한다’는, ‘효과’와 ‘효율’ 두 가지 목표를 동시에 달성하는 것은 쉽지 않습니다.

Speculative RAG의 아이디어

UC 샌디에고와 구글 연구자들은, “더 작고 전문화된 언어모델이 문서의 여러 가지 하위 집합으로부터 여러 개의 답변을 초안으로 작성한 다음에, 더 큰 범용 언어모델은 초안들을 검증하는 역할을 하면 어떨까?” 하는 생각을 했습니다. 이렇게 한다면, RAG 접근 방식이 어떻게 개선되는 걸까요?

이 혁신적인 아이디어가 지난 7월에 ‘Speculative RAG: Enhancing Retrieval Augmented Generation through Drafting’이라는 논문으로 구체화되었는데, 이렇게 두 종류의 언어모델을 사용해서 분업을 하면 ‘RAG 작업의 정확성과 속도를 크게 향상시킬 수 있다’는 걸 보여주고 있습니다. ‘드래프트 (초안)’ 작업을 소형의 ‘전문’ 모델에 맡겨서 대형 ‘범용’ 모델의 계산 부담을 줄이고 ‘검증에만 집중’하게 할 수 있습니다. 프로세스가 간소화된 만큼 응답의 생성 속도가 높아지고 최종 결과물의 품질도 좋아질 수 있어서, ‘지식 집약적’ 작업에 적용해야 하는 RAG으로서 효과적인 해결책이 될 수 있습니다.

최근에 소형 언어모델 (SLM)이 많은 주목을 받고 있는데요, 이 논문도 문제 해결을 위한 전체 틀 안에서 SLM을 활용하는 하나의 방법을 보여준다고 볼 수도 있겠습니다.

Speculative RAG의 작동 방식

Speculative RAG에서는 Original RAG의 아키텍처에 두 가지 구성 요소를 추가로 도입합니다:

  • RAG Drafter (소형, 전문 모델): 답변이 될 수 있는 여러 개의 초안을 근거와 함께 생성합니다. 문서의 고유한 하위 집합을 입력으로 받아서, 이를 기준으로 한 답변, 그리고 근거를 초안으로 제공합니다.

  • RAG Verifier (대형, 범용 모델): RAG Drafter가 제공한 드래프트를 평가, 검증한 다음 가장 좋은 답변을 선택합니다.

Image Credit: Speculative RAG 논문

한 레벨만 더 상세하게 단계별로 살펴보면:

  1. ‘질문 입력’과 ‘문서 검색’

    • 질문이 들어오면, 시스템은 먼저 관련 정보가 포함돼 있을 것 같은 외부 DB에서 여러 문서를 검색합니다.

  2. ‘문서 클러스터링’

    • 검색된 문서를 그 내용에 따라서 여러 개의 클러스터로 만듭니다. 각각의 클러스터는 질문과 관련된 여러 가지 관점과 측면을 대표합니다.

  3. ‘하위 집합 만들기’

    • 각 클러스터에서 문서 하나를 선택해서 하위 집합을 구성합니다. 이 하위 집합이라는 요소로 시스템이 계속 똑같은 정보가 아니라 다양한 관점의 정보를 보유할 수 있도록 해 줍니다.

  4. ‘답변 초안 작성하기’

    • 위에서 RAG Drafter라고 말씀드렸던, 작고 전문화된 모델이 ‘하위 집합’을 가져와서 답변 초안을 만들고, 또 왜 이 답변이 만들어졌는지 근거를 첨부합니다.

  5. ‘답변 초안 작성하기’

    • RAG Drafter, 즉 작고 전문화된 모델이 ‘하위 집합’을 가져와서 답변 초안을 만들고, 또 왜 이 답변이 만들어졌는지 근거를 첨부합니다.

  6. ‘병렬 처리로 초안 다수 생성’

    • 위 과정을 반복하면서, 각각 다른 문서의 하위 집합에서 여러 개의 초안이 병렬적으로 생성됩니다. 이렇게 해서 다양한 관점의 답변이 빠르게 작성됩니다.

  7. ‘초안 검증 및 평가’

    • RAG Verifier, 즉 대형의 범용 모델이 원본 분서를 처리할 필요없이 초안의 품질, 정확성을 확인합니다. 대형 모델이 보유하고 있는 지식, 초안과 함께 제공된 근거를 기반으로 각 초안이 질문에 대한 좋은 답이 되는지를 판단해서 점수를 매깁니다.

  8. ‘최종 답변 선택’

    • 가장 좋은 답변을 최종 결과물로 선택, 제공합니다. 이 결과물 (답변)이 사용자에게 정확하고 효율적으로 작성된 것으로 표시됩니다.

Speculative RAG은 문서의 하위 집합으로부터 더 짧지만 다양한 초안을 생성해서 Long-Context를 다루는 것이 까다롭다는 문제를 해결하는데 도움이 됩니다. 또 전체 처리 시간을 늘리지 않으면서 초안 작성 작업을 병렬로 할 수 있어서 확장성이 큽니다. 그래서 단순한 쿼리 뿐 아니라 ‘지식 집약적’인 작업에 이르기까지 다양한 어플리케이션 유형에 적용할 수 있을 것으로 보입니다.

Speculative RAG의 성능 - 정말 뛰어난가?

위에서 설명드린대로, 이 논문은 소형 언어모델 (SLM)을 큰 프레임웍의 일부로 통합해서 활용하는 방법을 보여줍니다. 높은 추론 성능을 가진 SLM로 여러 개의 답변 초안을 병렬로 생성하면서 토큰 수를 최적화, 비용을 절감해 주고, 파인튜닝을 하지 않고 추론 시점에 관련 지식을 집어넣어서 최대 12.97%의 정확도 향상, 51%의 지연 시간 단축이라는 성과를 보인 것으로 나타나고 있습니다. 테스트한 것들 중 Drafter로 Mistral 7B SLM, Verifier로 Mixtral 8×7B를 사용했을 때 최고 성능을 보여줬습니다.

다음은 4개의 벤치마크에서 Speculative RAG의 성능 시험 결과입니다:

지연 시간 (Latency) 단축

Image Credit: Original Paper

  • TriviaQA: 지연 시간 23.41%까지 단축

  • MuSiQue: 지연 시간 17.28%까지 단축

  • PubHealth: 지연 시간 51.25%까지 단축

  • ARC-Challenge: 지연 시간 26.73%까지 단축

정확도 개선

Image Credit: Original Paper

  • TriviaQA: 74.24%, 최고 비교기준 대비 0.33% 상승

  • MuSiQue: 31.57%, 최고 비교기준 대비 2.15% 상승

  • PubHealth: 76.60%, 최고 비교기준 대비 12.97%로 큰 폭으로 상승

  • ARC-Challenge: 80.55%, 최고 비교기준 대비 2.14% 상승

Speculative RAG이 잘 하는 것들

여러 가지 소스를 가져와서 검토해야 하는 어려운 질문에 대해서, 빠르고 정확한 답변을 해야 하는 경우에 Speculative RAG이 그 진가를 발휘합니다. 예를 들어, 의사의 옆에서 의료 관련 질문에 도움을 주는 어시스턴트가 좋은 예시인데, 의사가 특정한 질환에 대해서 최신의 치료 지침을 문의할 때 다양한 의료 DB에서 가장 관련성이 높은 최신 정보를 가져와서 종합, 정확한 답변을 빠르게 제공해야겠죠.

또 다른 훌륭한 예시로, 법률 연구 분야가 있는데, 변호사가 새로운 법률이 지금 담당하는 사건에 어떤 영향이 있을까 이해하고 싶을 때 Speculative RAG 시스템을 이용해서 관련 법률 텍스트를 수집하고 다양한 각도에서 분석한 다음, 균형잡힌 정확한 요약을 제공할 수 있습니다. 그 구조 상 Speculative RAG은 헤비하고 복잡한 작업을 나눠서 더 작은 모델로 분할해서 속도, 정확성의 균형을 맞추는 것이니, 컴퓨팅 성능이 제한되어 있는 상황이지만 여전히 최고 수준의 결과를 원하는 경우에도 괜찮은 선택지가 됩니다.

물론 여기도 한계는 있습니다

Original RAG과 비교해서 Speculative RAG가 상당한 장점이 있지만, 여전히 몇 가지 한계가 있습니다:

  • 복잡성 증가: 초안을 작성할 소형 전문 모델을 훈련해야 하니까, Original RAG 대비 복잡성이 증가합니다.

  • ‘근거의 품질’에 대한 의존성: 시스템 전체의 효율성이 Drafter가 작성한 ‘근거의 품질’에 크게 의존하게 됩니다.

  • 성능-지연 시간 트레이드오프: 지연 시간은 단축할 수 있지만, 초안을 병렬적으로 처리하려면 더 많은 연산 자원이 필요합니다.

  • 검증 오버헤드: 대형 범용모델이 실행하는 추가 검증 단계가 속도가 중요한 시나리오에서는 병목 (Bottleneck)이 될 수 있습니다.

  • 과적합 가능성: 소형 모델인 Drafter를 인스트럭션 튜닝하다가 잘못하면 과적합 상태, 즉 일반화가 잘 안 되는 모델이 만들어질 수 있습니다.

그래서, 입력 데이터가 아주 단순하고 간단할 때, 그리고 복잡한 추론이나 다양한 관점에서 검토할 필요가 없는 시나리오에는 Speculative RAG을 사용하지 않는게 낫습니다 - 기본적인 사실 검색, 간단한 질문에 대한 답변이 주가 되는 경우는 Original RAG 등 다른 방식을 검토해 보세요.

또, 반대로 지연 시간이 아주 아주 짧아야 해서 ‘초안 검증’ 같은 추가적인 단계를 감당하기 어렵다고 판단되는 경우, 그리고 과적합 위험이 클 때 - 특히 학습 데이터가 많이 제한되어 있거나 고도로 전문화된 도메인의 경우 - Speculative RAG는 좋은 선택지가 아닐 가능성이 높습니다.

맺으며

Speculative RAG는 문제를 해결하기 위해서 더 큰 관점에서 대형 언어모델과 소형 언어모델을 결합해서 활용하는 좋은 예입니다.

하지만 실제 현실의 문제를 해결할 때 ‘One size fits all’이라는 건 있기가 힘들죠. Speculative RAG도 복잡하고 지식 집약적 작업을 처리하는데는 효율도 높고 정확하기도 하지만, 응답 시간이 아주 빨라야 되는 경우라든가 아주 단순한 시나리오의 작업에는 어울리지 않습니다. 결국, RAG 방법론 선택하기 전에 내가 만들고 싶은 AI 어플리케이션의 구체적인 요구 사항, 특성, 제약 조건을 명확히 하는 것이 아주 아주 중요합니다.

보너스: 각종 자료 소스

읽어주셔서 감사합니다. 친구와 동료 분들에게도 뉴스레터 추천해 주세요!

Reply

or to participate.