카테고리 없음

RAG (Retrieval-Augmented Generation)

주녕콩 2024. 7. 15. 14:00

 

 

  • 최근 RAG는 모델의 학습이 아닌 모델의 Inference 성능을 레버리지하기 위해 주로 사용되고 있다.
  • RAG는 문서를 어떻게 잘 검색해서 가져오고 LLM에 잘 넘겨주는지 중요하다.
  • RAG를 도와주는 구글의 Vertex AI는 문서 검색에 벡터 검색뿐만 아니라 전통적인 Keyword 검색도 이용하고, LLM reasoning로 쿼리를 확장한다.

 

RAG는 LLM을 더 잘 활용하기 위한 기법중 하나다.

 

LLM은 학습한 시점 이후의 데이터가 없기 때문에 outdate된 정보를 줄 수 있고, domain specific한 지식이 부족한 단점이 있다.

 

주기적으로 LLM을 재학습시키면 되겠지만 이는 무척 비용이 크다. RAG는 LLM에 쿼리를 넘겨줄 때 데이터베이스에서 관련 정보를 찾아 같이 넘겨주면서 이를 극복한다.

 


 RAG 모델은 크게 Retriever와 Generator로 구성된다.

 

Retriever: 위키피디아와 같은 데이터셋으로부터 쿼리에 알맞은 문서(latent documents)들을 검색한다.

이 상황에서 데이터셋은 vector index를 가지고 있어 pretrained retriever가 문서를 가져올 수 있다.

 

Generator는 쿼리와 Retriever가 구한 문서들을 같이 받아 output을 생성한다. 이 논문에서는 Encoder-Decoder 모델인 BART를 사용하였다.

 

BART (Bidirectional and Auto-Regressive Transformers)는 자연어 처리(NLP) 분야에서 사용되는 트랜스포머(Transformer) 모델 중 하나로, 페이스북 AI 연구소(FAIR)에서 개발되었습니다. BART는 두 가지 주요 트랜스포머 아키텍처를 결합하여 만들어졌습니다: BERT와 GPT.

 

  1. BERT: BERT는 양방향 트랜스포머 모델로, 문장의 모든 단어를 동시에 고려하여 문맥을 이해합니다. 이를 통해 문장의 전후 문맥을 모두 반영할 수 있어, 문장의 의미를 더 정확하게 파악할 수 있습니다.
  2. GPT: GPT는 순방향(Autoregressive) 트랜스포머 모델로, 이전 단어들을 기반으로 다음 단어를 예측합니다. 이 방법은 주로 텍스트 생성에 유용하다.

해당 논문에서는 parametric knowledge non parametric knowledge 언급. 

 

Parametric knowledge는 모델이 학습한 정보를 말하고 non parametric knowledge는 문서를 가져오는 외부 정보를 말한다.

 

Method

Retriever: pretrained된 BERT의 encoder를 활용한 DPR(2019)을 기반으로 하였다.

 

Generator: pretrained된 BART(2019)를 사용하였다. Generator는 굳이 BART를 쓰지 않아도 되고, encoder-decoder 모델이면 다 가능하다.

 

 

이 Paper에서는 RAG의 모델을 두 가지 제시한다.

 

 

RAG-Sequence 모델

  • 완성된 sequence를 생성하기 위해 같은 문서만을 사용하는 모델이다.
  • 각 문서 z마다 beam search를 실행하여 p(yi|x, z, y1:i-1)을 점수를 매긴다.

RAG-Token 모델

  • 각 타겟 토큰마다 다른 문서를 사용할 수 있다. Generator가 각 문서에 대해 다음 아웃풋 토큰 분포를 생성한다.
  • Standard beam decoder를 사용해 디코딩한다.

Marginal
https://pangyoalto.com/brief-history-rag/

 

generator는 이전 i-1개의 토큰들을 보고 새로운 토큰을 생성한다.

 

수식을 보면 generator가 다음 토큰의 확률을 계산할 때 retriever가 해당 문서를 검색할 확률을 포함시키는 것을 알 수 있다. 이런 식으로 검색한 문서를 latent variable로 활용한다.

 

앞서 말했듯이 retriever와 generator는 학습 대상이다. 여기서 document encoder를 학습 대상에서 제외하였는데, 주기적으로 문서 인덱스를 업데이트해야해 비용이 크고 성능에도 큰 영향을 주지 않기 때문이다.