RAG?

RAG(Retrieval Augmented Generation) 이란 NLP 분야에서 Language모델의 응답 생성을 향상 시키기 위해 고안된 구조이다. 간단하게 설명하면, 검색 기반 지식 증강이라고 볼 수 있다. gpt4나, 오픈소스 LLama3 모델 등 뛰어난 LLM모델이 등장하는 시기에 왜 이런 방식이 필요할까? 이는 등장 배경으로부터 알 수 있다.

등장배경

RAG의 필요성

RAG Structure

Untitled

Untitled

Retriever : 질문이 주어지면 관련 정보를 포함하는 문서나 데이터를 데이터베이스에서 검색한다. 이 과정에서는 BM25와 같은 전통적인 방법도 사용되긴 하지만, 최근에는 문서를 split하고 embedding하여 cosine similarity를 측정하는 방식으로 유사 정보를 검색한다.

RAG 모델에서의 검색 과정 :

RAG 모델에서의 검색 과정은 다음과 같이 구성된다:

  1. Query 인코딩: 사용자의 질의 x를 임베딩 벡터 𝑞로 변환한다.

  2. 문서 임베딩: 데이터베이스 내의 각 문서 𝐷𝑖는 미리 계산된 임베딩 𝑑𝑖를 가진다.

  3. 유사도 계산: 질의 벡터 𝑞와 각 문서 벡터 𝑑𝑖사이의 코사인 유사도를 계산한다.

    $$ \text{similarity}(\mathbf{q}, \mathbf{d}_i) = \frac{\mathbf{q} \cdot \mathbf{d}_i}{\|\mathbf{q}\| \|\mathbf{d}_i\|}

    $$

  4. 상위 문서 선택: 계산된 유사도를 기반으로 상위 𝑘개의 가장 관련 높은 문서를 선택한다. 이 과정에서, 각 문서들과의 cosine similarity를 계산하여 softmax를 통과시켜 상위 k개를 선정하게 된다.

    $$ p(z \mid x) = \frac{\exp(\text{similarity}(\mathbf{q}, \mathbf{d}z))}{\sum{i=1}^k \exp(\text{similarity}(\mathbf{q}, \mathbf{d}_i))}

    $$

Generator : 검색된 문서를 바탕으로, Transformer 기반의 생성 모델이 최종 응답을 생성한다.

마지막으로, 선택된 각 문서𝑧와 입력 질의𝑥를 사용하여 응답𝑦를 생성하는 확률 p(y|x,z)를 구한다.

$$ p(y \mid x, z) = \text{Generator}(x, z)

$$