RAG는 Retrieval-Augmented Generation 의 약자로 논문의 이름은 Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks다. (링크)
저자는 Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin, Naman Goyal, Heinrich Küttler, Mike Lewis, Wen-tau Yih, Tim Rocktäschel, Sebastian Riedel, Douwe Kiela다.
지금의 RAG는 주로 LLM의 답변 생성에 있어서 문맥 context로 주어지는데 본래의 논문에서는 RAG를 활용하여 모델 자체를 파인 튜닝 방법으로 학습한다.
Abstract
General-purpose fine-tuning을 위해서 retrieval-augmented generation (RAG)를 제안한다.
2. Methods
Retriver $p_{\eta}(z | x)$는 주어진 쿼리 $x$를 토대로 텍스트에 대한 top-K 분포를 반환한다.
Generator $p_{\theta}(y_i \, | \, x, z, y_{1:i - 1})$은 이전의 $i - 1$개의 토큰와 오리지널 입력 $x$, retrieved passage $z$를 기반하여 다음 토큰 $y_i$를 예측한다.
저자들은 2가지 RAG 모델을 제시한다.
RAG-Sequence Model
Complete sequence 완전한 문장 시퀀스를 생성하기 위해서 retrieved document를 사용한다.
$ p_{\text{RAG-Sequence}} (y | x) \approx \sum_{z \in \text{top-k}(p(\cdot | x))} p_{\theta}(y | x, z) = \sum_{z \in \text{top-k}(p(\cdot | x))} p_{\eta}(z | x) \prod_{i}^{N} p_{\theta}(y_i \, | \, x, z, y_{1:i - 1}) $
RAG-Token Model
개별 타켓 토큰에 대한 서로 다른 latent document를 뽑고 marginalize하는 모델이다.
$ p_{\text{RAG-Token}} (y | x) \approx \prod_{i}^{N} \sum_{z \in \text{top-k}(p(\cdot | x))} p_{\eta}(z | x) p_{\theta}(y_i \, | \, x, z, y_{1:i - 1}) $
Retriever: DPR
Retrieval component $p_{\eta}(z | x)$는 DPR (Dense Passage Retrieval for Open-Domain Question Answering) 논문 (링크) 에서 기반한 방법이다.
DPR은 bi-encoder 아키텍처다.
$p_{\eta}(z | x) \propto exp( \textbf{d}(z)^{T} \textbf{q}(x) )$. $\textbf{d}(z) = \textbf{BERT}_d (z), \textbf{q}(z) = \textbf{BERT}_q (z),$
$\textbf{d}(z)$는 BERT base를 사용한 document에 대한 dense representation으로 document encoder다.
$\textbf{q}(z)$는 BERT base를 사용한 document에 대한 query representation으로 queryencoder다.
Top-k document를 계산하는 과정은 input $x$에 대한 가장 높은 확률을 가지는 $ p_{\eta}(z | x) $를 가지는 k개의 문서들이다. 이때 Maximum Inner Product Search (MIPS) 방법으로 찾는다. 말 그대로 유사도를 inner product 내적으로 사용하고 이 값이 최대가 되는 문서들을 k개 뽑는다는 말이다.
Generator: BART
Generator 성분 $p_{\theta}(y_i \, | \, x, z, y_{1:i - 1})$은 encoder-decoder 구조의 모델을 사용하는데 저자들은 BART-large와 pre-trained seq2seq transformer with 400M을 사용했다.
Decoding
Standard Beam Search를 사용한다.
Beam search는 이 블로그들 (링크1, 링크2, 링크3)를 참고했다.
- Exhaustive Search : 전체 조건부 확률을 곱해서 joint probability를 도출하고 이를 통해서 모든 경우를 찾는 Exhaustive Search
- Greedy Search : 그리고 가장 높은 확률의 토큰만 탐색하는 Greedy Search
- Beam Search : 위 둘을 절충하여 Top-K개의 토큰만을 탐색하는 방법이 바로 Beam Search다.
4. Results
REALM이라는 또 다른 Retrieval을 사용한 방법이 있고 앞서 언급했던 오리지널 DPR에 비해 대체로 RAG가 더 좋은 성능임을 알 수 있다.
References:
https://littlefoxdiary.tistory.com/4
https://velog.io/@bo-lim/Beam-Search
https://velog.io/@khs0415p/NLP-Beam-search
'NLP > RAG' 카테고리의 다른 글
TAG (2024) 논문 리뷰 (1) | 2025.04.27 |
---|---|
Self-RAG (2023) 논문 리뷰 (0) | 2025.04.17 |
Self-RAG, RAGAS 그리고 RAG Evaluation by LLM (0) | 2025.04.02 |
RAGAS의 metric별 required columns (0) | 2025.03.28 |
RAG에서의 평가 지표 (0) | 2025.03.26 |