AI/NLP

[논문] RAG

jihuSunbae 2024. 12. 5. 17:02

배경

- 사전학습모델(Pre-trained Model)은 외부 지식에 확장이 쉽지 않음. 

- 기존에도 검색 증강 기법들은 있었지만 ?? 한 한계가 있었다. 

- 아이디어: sequence-to-sequence 구조(-> text-to-text)를 채택하여 기존 한계를 극복한다. 

 

RAG 

- 기본 구조: encoder-decoder,  Dense Passage Retriever

주요 구성 요소

 

1. Retriever: Pretrained BERT(encoder)

  • BERT 기반의 DPR(Dense Passage Retriever) 사용
  • 입력 쿼리를 받아서 관련된 문서들을 검색
  • 쿼리와 문서를 벡터로 인코딩하여 유사도 계산
  • Top-k개의 가장 관련성 높은 문서들을 선택

 

DPR

DPR은 질문-답변(QA) 시스템을 위한 효율적인 문서 검색 방법입니다. 기존의 키워드 기반 검색(예: TF-IDF, BM25)과 달리, 의미적 검색이 가능한 고밀도 벡터 공간에서 작동합니다.

 

이를 위해서 사전 작업을 진행함. 

: 문서 DB → 문단 분할 → Context Encoder → 벡터 인덱싱

 

[구성 요소]

1. Query Encoder: 입력 쿼리 q →  벡터 q(x) 

  질문 유형

 

  • Question Answering
  • Question Query
  • Fact Verification Fact Query
  • Jeopardy Question
  • Generation Answer Query

 

* Jeopardy Question 이란? 

더보기

🔄 일반 질문과 Jeopardy Question 비교:

  1. 일반적인 Question-Answer:
  • 질문: "세종대왕이 만든 문자는?"
  • 답변: "한글입니다"
  1. Jeopardy Question 방식:
  • 답변(주어지는 정보): "세종대왕이 1443년에 만든 이 문자는 과학적이고 독창적인 제자 원리를 가지고 있습니다"
  • 질문(만들어야 하는 것): "한글은 무엇입니까?"

 

2. MIPS(Maximum Inner Product Search): 유사도 검색

  • MIPS를 사용하여 q(x)와 가장 유사한 문서들을 검색
    • 벡터 내적 기반으로 q(x) 와 비슷한 문서를 도출 
  • Document Index에서 관련성 높은 top-k 문서들(z) 선택

2. Generator (생성기):  seq-2-seq 모델 

  • 사전 학습된 BART 모델 기반
  • 검색된 문서들과 원래 입력을 결합하여 최종 출력 생성
  • 각 검색 결과에 대해 다른 출력을 생성하고 이들을 결합
  • 자세한 process
    • 검색된 문서들을 Generator(pθ)로 전달
    • 각 문서에 대한 d(z) 표현 생성

RAG 검색 모델 버젼: (1) RAG-Sequence, (2) RAG-token

 

(1) RAG-sequence

: input을 검색하는 문서 자체는 1개 

 

(2) RAG-token

: input의 각 토큰 당 검색하는 문서가 달라짐 

 

<예시>

 

input: "BTS의 데뷔와 첫 번째 월드투어에 대해 설명해주세요"

 

RAG-Sequence:

  • 한 번의 검색으로 BTS 데뷔와 투어 관련 문서를 모두 검색
  • 검색된 문서들을 바탕으로 전체 응답 생성
  • 더 일관된 스토리텔링 가능

RAG-Token:

  • "BTS의 데뷔" 부분 설명할 때는 데뷔 관련 문서 검색
  • "첫 번째 월드투어" 설명할 때는 투어 관련 문서 새로 검색
  • 각 부분에 대해 더 구체적인 정보 제공 가능

<장단점>

(1) RAG-sequence

 

장점:

  • 계산 효율성이 좋음
  • 일관된 정보 사용으로 응답의 일관성 유지
  • 더 빠른 생성 속도

단점:

  • 응답 생성 중 새로운 정보가 필요할 때 유연성이 부족
  • 초기 검색 결과에 큰 의존성

(2) RAG-Token

장점:

  • 더 유연한 정보 검색 가능
  • 각 토큰 생성시 최적의 정보 활용
  • 더 정확하고 상세한 응답 가능

단점:

  • 계산 비용이 매우 높음
  • 생성 속도가 상대적으로 느림
  • 응답의 일관성 유지가 더 어려울 수 있음

 

 

참고 자료 

https://gbdai.tistory.com/67