RAG (Retrieval Augmented Generation) 이란
LLM 모델들은 많은 데이터를 통해 학습된 모델이지만 학습되지 않은 데이터들이 있을 수 있다.
예를들면 이제 막 생성된 정보 또는 프라이빗한 DB들은 LLM모델이 학습을 못하였을 것이다.
이러한 학습되지 않은 데이터를 LLM에 보내서 새로운 정보만을 탐색하게 하거나,
기존 갖고있는 데이터와 통합하여 탐색하게 하는것이 RAG이다.
더 정확하게는 LLM이 학습되지 않은 데이터에 실시간으로 접근하여 더 정확한 응답을 생성하는 것이다.
RAG에서 검색(Retrieval)은 어떻게 이루어 질까?
결론부터 보자면
1. Load(읽어오기)
2. Transform(전처리, 변환)
3. Embed(벡터화)
4. Store(벡터화 정보 저장)
5. Retrieve(검색)
순서로 검색이 이루어진다.
1. Load
개인 문서를 LLM에게 알려주려고 한다고 했을때,
당연히 처음에는 문서를 읽어와야 할것이다.
2. Transform
Transform 과정에서는 데이터 정제(노이즈 제거), 문서 분활, 텍스트 정규화, 중요 키워드 추출등의 과정이 이루어진다.
원본 데이터에는 필요없는 정보들이 포함되어 있을 수 있으며 문서를 일정한 크기로 나누면 검색 능력이 향상된다.
즉, LLM이 잘 읽을 수 있게 정제하는 과정이다.
3. Embed
Embed는 벡터화 과정이라고 부른다.
벡터화는 LLM이 글을 이해하기 위한 과정으로 나는 이해하였다.
많은 예시로써 아래와 같은 예를 든다.
고귀함(?) | 남성성 | 여성성 | |
왕족 | 1 | 0 | 0 |
왕비 | 1 | 0 | 1 |
왕 | 1 | 1 | 0 |
남성 | 0 | 1 | 0 |
여성 | 0 | 0 | 1 |
(0,1로만 간단하게 표현하였음. 실제로는 0.23, -0.12등 다양하게 표현되는것으로 알고있음)
이런식으로 단어들을 숫자로써 표현을 해놓으면 단어가 연산이 가능해진다.
왕족 = 왕비 - 여성
왕 = 왕족 + 남성
이렇게 새로운 문서를 LLM이 이해할 수 있게 만드는것이 Embed 과정이다.
실제 RAG에서는 문장 단위의 임베딩이 이루어진다고 한다.
4. Store
벡터화된 정보를 저장하는 과정이다.
벡터 데이터베이스에 저장한다. (Pinecone, FAISS 등이 있다.)
5. Retrieve
사용자가 입력한 정보 (쿼리)와 유사한 벡터를 앞에서 저장한 Vector DB에서 검색한다.
여기에서 Retrieve하는 과정은 사실 많은 방법이 있다고 한다.