DeepLearing/NLP(LLM)

[논문리뷰] Speculative RAG- Enhancing Retrieval Augmented Generation through Drafting

notdecidedyet 2024. 11. 12. 21:59

 

0 Abstract

  • 연구 발단
    • RAG 시스템의 성능과 효율성 동시 개선
    • 긴 컨텍스트 처리 시 발생하는 position bias 문제 해결
  • 방법론
    • 작은 모델(RAG drafter)과 큰 모델(RAG verifier) 역할 분담
      • Drafter: 병렬로 여러 답변 초안 생성
      • Verifier: 초안들을 검증하여 최적의 답변 선택
    • 문서 처리 방식 개선
      • 유사 문서 클러스터링
      • 각 클러스터에서 하나씩 샘플링하여 다양성 확보

1. Introduction

 

연구 배경 및 문제점

  • LLM은 질문답변에 강점이 있으나, 최신/희귀 정보에서는 hallucination 발생
  • RAG는 외부 데이터베이스 활용으로 이를 보완하지만, 새로운 문제 발생 :
    • 여러 문서를 검색하면서 입력 길이 증가 : RAG정보를 model의 입력으로 사용 
    • 긴 컨텍스트로 처리 문제 : Lost in the middle?, 시간, 비용
    • 복잡한 추론 필요성 증가 : 

기존 해결책의 한계

  • 검색 품질 개선에만 초점 : 이 논문에서는 효율성에도 초점을 맞춤.
  • 추가적인 instruction tuning 필요 : SAIL, Self Reflective RAG
  • 지연 시간 문제 해결 미흡
  • Position bias 문제 존재 : Lost in the middle.

제안 방법 : Speculative(추측성) RAG

  1. 문서 검색 및 클러스터링
  2. 다양한 Subset생성
  3. 초안 생성(RAG Drafter)
  4. 검증준비
  5. 검증
  6. 최종 답변 선택

 

 

구체적인 내용은 Method부분에서 다룰 예정

 

2. Related Work

  • RAG : 관련 문서 검색하여 생성 프로세스에 통합하여 LLM성능 향상에 의의
    • SAIL : 검색된 데이터에 대해서 필요없는 문서를 제외하도록 FineTuning
    • Self-Reflective RAG : Reflection 토큰을 도입하여, 검색이 필요한 시점 및 답변의 품질을 평가할 수 있게 FineTuning.
      예시 토큰 : [Need Retrieval], [Relevant/Irrelevant], [Supported]
  • Speculative Decoding
    • draft-then-verify 패러다임을 통해 auto regressive 디코딩 지연 시간을 줄이는 것을 목표로 함
    • 작은 모델로 여러 토큰을 초안으로 작성하고, 검증하는 과정이 있음.
    • 이 논문은, 이것에 영감을 받아 토큰 수준 초안 작성에서 답변 수준으로 확장함.

 

3. Speculative Retrieval Augmented Generation through Drafting

Problem Formulation

  • 지식 집약적 task는 (Q,D,A)로 표현할 수 있음. (지식 집약적 : 단순 기억이나 패턴 매칭으로는 해결할 수 없고, 깊은 도메인 지식 필요
    • Q : 추가 지식이 필요한 질문이나 진술
    • D = {d₁, ..., dₙ}은 데이터베이스에서 검색된 n개 문서의 집합
    • A는 예상되는 답변
  • 구체적인 예
    • 질문 답변 작업에서, Q와 A는 자연어 형태의 질문과 예상 답변
    • 진술 검증 작업에서, Q는 진술이고 A ∈ {True, False}는 진술의 정확성을 나타내는 Boolean 값
    • 객관식에서, A ∈ {A, B, C, ...}는 정답의 인덱스

 

3.1 Overview

  • 목적 : 
    • 처리 속도를 늦추지 않으며, 성능을 올리는 것을 목표로함.
    • 큰 모델에서 instruction tuning하는 대신 분할 정복 접근
      • 기존 접근은(Self-Reflective RAG) 큰 규모의 LM전체를 instruction tuning진행
      • 여기서는 작은 M_Drafter만 Instruction tuning진행.
    • 1. RAG drafter : 작은 모델로 검색 결과를 바탕으로 여러 답변 초안을 빠르게 생성하기 위함.
    • 2. RAG verifier : 더 큰 모델로, 초안들을 평가하고 최선의 것을 선택하여 생성 결과에 통합함.
  • 프로세스 : 
    • 1. 검색된 문서를 여러 Subset으로 분할하여 답변 후보를 초안으로 작성
    • 2. 콘텐츠 유사성으로 문서들을 클러스터링
    • 3. 각 클러스터에서 하나의 문서들만 샘플링하여 subset을 형성함 -> 이로서 중복을 최소화하고 다양성을 최대화
    • 4. 문서 subset들을 병렬로 RAG drafter LLM에 제공하여 근거와 함께 초안 답변 생성
    • 5. 답변 검증(RAG verifier)
    •  
    • 더보기
      예)

      2번) 에서 3개의 클러스터가 생성되었다고 가정
      - 1번 클러스터 : 문서1, 문서2, 문서3
      - 2번 클러스터 : 문서4, 문서5
      - 3번 클러스터 : 문서6

      3번) Subset샘플링
      - 1번 Subset : 문서1,문서4,문서6 <- 각 클러스터에서 하나씩의 문서를 추출
      - 2번 Subset : 문서2,문서4,문서6
      - 3번 Subset : 문서3,문서4,문서6
      ...

3.2 Specialist RAG Drafter

  • M_Drafter :
    • 작은 specialist LM, retrieve document를 이해하며 query에 답변하는 것에 특화됨
    • 검색된 문서 읽기 -> 관련 내용 찾기 -> 답변 생성 이라는 특정 작업만 수행
    • <-> GPT-4, Claude처럼 다양한 작업을 수행할 수 없음.
      예를들어) GPT4와 같은 경우, 의사로 지칭할 수 있으며 다양한 의료문제를 전반적으로 다룸

      반면, M_Drafter는 방사선 전문의처럼 특정 영역에만 특화된 전문가임.
  • 기존의 방법론 : 큰 규모의 generalist LM전체를 RAG를 위해 fine-tuning함.
  • 제안하는 방법론 : 더 작은 규모의 specialist LM인 M_Drafter를 훈련하여, 답변 초안과 근거 생성하도록 함.

Instruction Tuning

  1. 학습 데이터 구성(Q,A,D)
    Q : 일반 쿼리, A : 응답, D : 검색된 지원 문서
    더보기
    예)
    Q(질문): "언제 기독교가 로마의 공식 종교가 되었나요?"
    D(검색된 문서): "기독교는 상당한 대중적 지지를 받았지만... 380년 2월 27일 'De fide catolica' 칙령에 의해 가톨릭 기독교가 로마 제국의 국교로 선포되었다..."
    A(답변): "380년에 공식 종교가 되었습니다."
  2. 근거(E) 생성 (Synthetic Dataset)
    큰 모델 ( GPT-4, Gemini-Ultra)를 사용해 (Q,A,D)데이터 셋에 대한 근거(E)를 자동 생성
    이때, 근거는 원본 문서 D에서 핵심 정보만 추출, 질문 Q와 답변 A사이의 논리적 연결 제공, 원본 문서보다 짧지만 핵심 정보 유지
    더보기
    예)
    E(생성된 근거): "가톨릭 기독교는 380년 2월 27일 'De fide catolica' 칙령을 통해 로마 제국의 공식 국교로 선포되었습니다."
  3. 학습 데이터셋 구성
    더보기
    최종 학습 데이터 형태: (Q, A, D, E)
    예시:
    Q: "언제 기독교가 로마의 공식 종교가 되었나요?"
    D: (원본 긴 문서)
    A: "380년에 공식 종교가 되었습니다."
    E: "가톨릭 기독교는 380년 2월 27일 'De fide catolica' 칙령을 통해 로마 제국의 공식 국교로 선포되었습니다."
  4. M_Drafter 모델 학습
    더보기
    목표 : P(M_Drafter(A,E|Q,D))가 최대가 되도록 모델 학습
    - Q,D를 input으로, A,E를 생성하도록 학습
  5. inference 예
    더보기
    입력 : 
    Q : 새로운 질문
    D : 관련 검색된 문서들

    출력 : 
    A : 답변
    E : 답변에 대한 근거

Multi-Perspective Sampling

overview process에서 설명한 것임.

  1. 초기 검색 (Dense Retrieve - Contriever-MS MACRO사용)
    더보기
    질문(Q): "인공지능이 일자리에 미치는 영향은 무엇인가요?"

    검색된 문서들(D):
    D1: AI가 반복적인 사무직 일자리를 대체할 것이라는 전망
    D2: AI로 인한 제조업 자동화 증가 예측
    D3: 새로운 AI 관련 일자리 창출 전망
    D4: 사무직 일자리 감소 통계
    D5: AI 시대의 새로운 직업군 등장
    D6: 제조업 로봇 도입으로 인한 고용 변화
    ...
    D10: AI 교육과 재취업 프로그램
  2. 문서 클러스터링 과정
    더보기
    instruction-aware embedding:
    - 질문 Q의 맥락을 고려하여 각 문서를 벡터로 변환
    - emb(D1) = [0.2, 0.8, 0.1, ...]
    - emb(D2) = [0.3, 0.7, 0.2, ...]


    K-Means 클러스터링 (k=3 예시):
    클러스터 1 (일자리 감소): D1, D4
    클러스터 2 (제조업 영향): D2, D6
    클러스터 3 (새로운 기회): D3, D5, D10
  3. subset 구성
    더보기
    Subset δ1: [D1(클러스터1), D2(클러스터2), D3(클러스터3)]
    Subset δ2: [D4(클러스터1), D6(클러스터2), D5(클러스터3)]
    Subset δ3: [D1(클러스터1), D6(클러스터2), D10(클러스터3)]
    Subset δ4: [D4(클러스터1), D2(클러스터2), D5(클러스터3)]

RAG Drafting

  • m개의 문서 subset에 대해 M_Drafter(instruct tuning된 모델)를 실행하여 해당하는 답변 초안을 생성(prompt는 Appendix B)
  • 문서 subset δ_j = {d_j1, ..., d_jk}가 주어졌을 때, LLM을 통해 '초안'과 '근거'를 생성함
    -> LLM(Q, d_j1, ..., d_jk) → α_j, β_j. (초안, 근거)
    •  j : subset j
    • k : retrieve document k
    • α : 답변 초안
    • β : 근거
  • 조건부 생성 확률인 ρ_Draft,j = P(β_j|Q, d_j1, ..., d_jk) + P(α_j|Q, d_j1, ..., d_jk, β_j)을 계산하여, 초안 답변과 근거 생성의 신뢰성 점수로 사용함 (model에서 j번쨰 근거가 생성되는 확률곱 + 초안이 생성되는 확률곱)
  • j개의 subset이 있고, j개의 score가 있을 것이고, 이들은 근거 생성의 신뢰성 및 답변 초안 생성의 신뢰도를 측정

3.3 Generalist RAG Verifier

generalist LM M_Verifier로 RAG Drafting 평가 :

  • 목표 : 신뢰성이 낮은 초안을 필터링, 최선의 답변을 선택
  • generalist LM : pretrained LLM(GPT4, claude, Llama3.1 ...)
  • 초안-근거 쌍(α, β)만을 고려하고 중복된 검색 결과는 생략
  • 초안-근거 쌍의 순위를 매기고 최종 답 선택

Evaluation Scores : 

  • 자기 일관성 점수(self-consistency score) :
    • ρ_Self-contain = P(α, β|Q)
    • 초안과 근거가 질문의 맥락에서 자기 일관성이 있는지 평가
    • 자기 일관성이 있는 초안-근거 쌍은 더 높은 확률을 가질 것으로 예상됨.
      -> OpenSource의 경우 Perplexity, NLL을 구할 수 있음.
      -> API사용시 우회하는 방법을 사용해야 될것으로 생각함.
  • 자기 반영 점수 (self-reflection score) :
    • ρ_Self-reflect = P("Yes"|Q, α, β, R)
    • LLM으로 하여, 스스로의 답변 품질을 평가하는 메커니즘
    •  
    • 더보기
      입력: 
      - Q: 원래 질문
      - α: 생성된 답변 초안
      - β: 제공된 근거
      - R: "근거가 답변을 지지한다고 생각하나요, 예 또는 아니오?"

      프로세스:
      1. LM에게 위 요소들을 제시
      2. "Yes" 또는 "No" 응답의 확률 계산
      3. "Yes" 응답의 조건부 확률을 점수로 사용

Computation Method : 

  • 논문에서는 한번에 효율적으로 계산할 수 있는 방법에 대해서 말하고 있음.
    • inference상황에서 : Query는 주어지는 것으로 생각
    • ρ_Self-Contain : P(t_i|Query, t<i)를 계산하여 토큰들의 확률곱을 구함
      -> 논문에서는 OpenSource의 경우만 고려한 것으로 보임.
      -> API를 사용하는 경우 우회적인 방법을 사용해야 할것으로 보임.
    • ρ_Self-Reflection : 또한 비슷하게 계산함.

그래서... 결론적으로?

최종 점수는 아래와 같은 방법으로 구한다.

  • 목적을 다시 살펴보면 : "질문에 대한 가장 신뢰할 수 있는 답변을 최종 답변으로 선택"
  • 최종점수 ρ_j = ρ_Draft,j · ρ_SC,j · ρ_SR,j
    • 여기서 j는 j번째 subset
    • ρ_Draft,j3.2에서 다루었고 구체적으로는 오른쪽과 같음 P(β_j|Q, d_j1, ..., d_jk) + P(α_j|Q, d_j1, ..., d_jk, β_j)
    • ρ_SC,j는 3.3의 Evaluation Scores 에서 다루었고 P(α, β|Q)
    • ρ_SR,j는 3.3의 Evaluation Scores 에서 다루었고 P("Yes"|Q, α, β, R)
  • j들 중에서 가장 높은 점수를 최종 답변으로 선택

 

4. Experiments

  • 평가 데이터셋
    • TriviaQA (unfiltered): 단일 문서에서 정확한 증거 필요
    • MuSiQue: 다단계 추론을 위해 여러 문서 필요
    • PubHealth: 의학 데이터셋
    • ARC-Challenge: 과학 시험 객관식 문제
  • 평가 메트릭:
    • 주관식 : 골드 답변 포함 여부 (문자열 매칭?)
    • Closed-set(객관식): 정확도(accuracy) 측정

4.1 Baseline

  • 평가 모델 : OpenSource(Mistral_7B, Mistral-Instruct_7B, Mixtral_8x7B, Mixtral-Instruct_8x7B, Alpaca_7B)
  • RAG방법론 : Self-Reflective RAG (Self-RAG), Corrective RAG (CRAG)
    • Self-RAG : 문서 검색 후, 낮은 품질의 문서 제거 개선 후 답변 생성
    • Corrective RAG : LLM이 instruction tuning을 통해 특별한 태그 생성하도록 학습
      특별한 태그 : 추가 정보가 필요함, 필요없는 정보 ... 등 을 생성하여 추가 행동 진행

4.2 Experiment Settings모델 설정

  • Base Model (RAG drafter):
    Mistral_7B (v0.1)
  • RAG verifier:
    • Mistral_7B (v0.1) - M_Verifier-7B
    • Mixtral_8x7B (v0.1) - M_Verifier-8x7B
    • 두 모델 모두 fine-tuning 없이 사용
  • 기술 구현
    • Embedding 모델: InBedder_Roberta (경량 instruction-aware 모델)
    • Decoding 방식: greedy decoding (temperature = 0)
  • 데이터에 초점, 파라미터 설정
    • TriviaQA, PubHealth, ARC-Challenge:
      • 검색 문서 수: 상위 10개
        10개 문서에서 -> N개의 클러스터 생성 -> 각 클러스터에서 1개씩 선택(N=2인 경우, 25가지 draft생성 가능)
      • 초안 생성 수: 쿼리당 5개 (m = 5)
        -> 5개의 draft생성
      • 초안당 문서 수: 2개 (k = 2)
        -> 클러스터 2개 생성
    • MuSiQue:
      • 검색 문서 수: 상위 15개
      • 초안 생성 수: 쿼리당 10개

4.3 Main Results

  • baseline대비 우수한 성능
  • RAG Drafter에서는 instruction tuning이 효과적(당연한 것 아닌가...싶은데)
    • Mistral_7B와 M_Drafter-7B를 비교했을 때 주목할 만한 성능 향상이 관찰
  • RAG Verifier의 신뢰할 수 있는 점수 평가
    M_Drafter-7B <-------> M_Verifier-7B + M_Drafter-7B를 비교했을 때 주목할 만한 성능 향상이 있음.

4.4 Latency Analysis

4.5 Ablation Studies

  • Diversity and reduced redundancy in retrieval improves draft quality significantly
    • multi-perspective sampling의 영향을 평가 (클러스터마다 하나의 문서만 추출)
      • 1. 클러스터링 없는 무작위 샘플링: 컨텍스트로 무작위로 문서 subset을 선택
      • 2. 동일 클러스터에서의 샘플링: 단일 클러스터에서 모든 문서를 선택
    • 결과 : 제안한 방법(다양한 draft만들 수 있는 방법)이 더욱 뛰어난 퍼포먼스를 보임
  • Scoring method on self-consistency and self-reflection refines draft quality effectively.
    • 신뢰도 점수인 ρ_Draft, ρ_Self-contain, ρ_Self-reflect를 각기 제거하며 실험
    • 결과 : 하나라도 제거하면 점수 하락

4.6 Effects of Generated Rationale for Verification

  • 이 논문에서 제안한 방법 : ρ = Score(α|Q, β) (3.2 Rag Drafting 쪽)
    α : 초안, β : 근거, δ : 문서
  • 실험 :
    • 근거를 검색된 문서로 대체 (ρ = Score(α|Q, δ))
    • 검색된 문서를 근거에 추가 (ρ = Score(α|Q, β, δ))
  • 결과 : 개인적인 시각에서는 성능에서는 크게 차이가 없으나, Latency는 증가한것이 보임.