언어 모델의 환각 현상을 줄이기 위해 검색 결과를 기반으로 답변을 생성하는 대표적인 방법이 바로 RAG입니다. RAG는 Retrieval-Augmented Generation, 우리말로 ‘검색 증강 생성’ 기법을 의미하는데요. 언어 모델이 질문에 대한 답변을 생성하는 과정에서 검색된 결과를 언어 모델의 입력값으로 활용합니다. 마치 궁금한 내용을 포털 사이트에서 검색해보는 것처럼요.
RAG를 위해서는 질문과 관련된 적절한 문서를 찾는 것이 중요합니다. 이미 잘 갖춰진 검색 엔진을 활용하는 방법도 있지만, 항상 검색 엔진을 활용할 수 있는 것은 아닙니다. 기업이 보유한 데이터나 전문성이 높은 정보 같은 경우 검색 결과에서 찾을 수 없겠죠. 이런 경우에는 별도의 데이터베이스를 구축하고, 질의(Query)와 관련된 문서의 정보만을 필터링해야 합니다.
그렇다면 어떻게 유사한 정보를 필터링할 수 있을까요? 먼저, 검색어와 데이터베이스 내의 문서 간의 유사도를 계산해야 합니다. 유사도를 계산하기 위해서는 각 문서를 벡터화해야 하는데요. 이렇게 문서를 벡터화하는 과정을 **임베딩(Embedding)**이라 합니다.
문서의 임베딩 과정도 언어 모델로 이뤄지는데요. 임베딩을 위한 언어 모델은 답변을 생성하는 언어 모델(e.g. GPT)과는 다릅니다. 임베딩 모델은 문맥을 이해하는 데, 생성형 언어 모델은 다음 단어를 예측하는 데 특화되어 있습니다. 둘 다 언어 모델이지만 각자가 잘하는 역할이 다르다 보니, 같은 질문도 각각 입력돼야 합니다. 당연히 계산 또한 두 번 이뤄져야 하고요. 어딘가 비효율적이지요?
그래서 두 언어 모델을 통합하려는 시도가 이어지고 있습니다. 즉, 검색을 위한 임베딩과 답변 생성을 모두 해내는 올인원 언어 모델이라고 할 수 있죠. 이번 뉴스레터에서는 처음으로 생성과 임베딩을 통합하고자 한 언어 모델 GRIT을 알아보도록 하겠습니다.
위의 그림에서 알 수 있듯이, 임베딩 태스크에서는 마지막 은닉층(Hidden State)의 가중치 값을 평균을 내고(Mean Pooling), 생성 태스크에서는 마지막 은닉층에서 다음 토큰을 예측하도록 합니다. 여기서 Instruction에 특수한 토큰을 추가해 어떤 태스크로 학습할지 결정합니다. 이 과정을 그림으로 나타내면 아래와 같습니다.
GRIT 모델에 동일한 형태로 Instruction이 입력되지만 출력하는 결과는 다른 것을 볼 수 있는데요. 여기서 좋은 임베딩 결과를 얻기 위해, 표현을 위한 Instruction Tuning의 학습 데이터는 분야(Domain), 의도(Intent), **텍스트의 단위(Unit)**을 명시적으로 추가합니다. 가장 위의 예시에서는 과학(Scientific) 분야에 대해, 논문의 초록(Abstract) 단위에서 검색(Retrieve)하고자 하는 의도를 반영해 지시한 것을 볼 수 있습니다.
Instruction Tuning을 위해서는 기반 모델(Base Model)이 필요합니다. GRIT 모델은 Mistral 7B 모델을 기반으로 하여 추가적인 Instruction을 학습시켰습니다. 임베딩과 생성이라는 두 가지 목표를 모두 달성하기 위해 더 많은 학습 횟수가 필요했지만 최종적으로는 두 능력에서 모두 준수한 성능을 보유하게 됐습니다(🔗 GritLM GitHub 링크).
RAG에 활용할 수 있을까?
기존 방식의 RAG는 질의문을 ‘임베딩 모델’에 입력하고, 검색된 결과와 함께 질의문을 다시 ‘생성 모델’에 입력해야 했습니다. 하지만 하나의 언어 모델에 이 두 가지 기능을 통합함으로써 비효율성을 줄일 수 있었는데요. 이미 한 번 계산한 정보에 대해 *캐시(Cache)에 저장하여 검색 속도를 비약적으로 줄인 것입니다.
GRIT의 Query-Doc Caching 방법을 살펴보겠습니다. 먼저 GRIT 모델(GritLM)은 입력된 질문에 대해 벡터 연산을 진행합니다. 이 벡터는 문서 검색을 위한 목적과 생성을 위한 조건(Condition) 목적으로 모두 활용이 가능합니다. 따라서 두 번 연산하지 않고, 1차 캐시(1st Cache)에 저장해두죠. 검색된 문서에 대해서도 동일하게 적용이 가능한데요. 검색된 문서 벡터 역시 GritLM으로 구한 만큼 생성에 활용할 수 있습니다. 이 정보는 2차 캐시(2nd Cache)에 저장됩니다. 이렇게 두 가지 정보를 모두 GritLM의 입력값으로 활용해 원하는 답변을 생성해내는 것이 Query-Doc Caching의 원리입니다..
하지만 아직 실제 RAG에 활용하기에는 성능이 그리 좋진 않습니다. RAG를 사용한 결과가 RAG를 사용하지 않은 결과와 큰 차이가 없는 것으로 나타났는데요. 이에 대해 연구진은 GRIT 모델이 해당 방식에 대해 파인튜닝되지 않았기 때문이라고 설명합니다.
GRIT은 Mistral 7B를 기반으로 했지만, 학습 구조의 특성상 어떤 모델에도 이와 같은 시스템을 구현할 수 있습니다. 잠재적으로 다른 모델에 대해서도 연구할 만한 여지가 많다는 의미지요. 현재 가장 뛰어난 성능을 보이는 GPT-4나 Gemini Pro 같은 모델에 대해서도 적용한다면 훨씬 적은 비용으로 RAG를 구현할 수 있다는 희망을 보여주기도 합니다. 물론, 더 많은 연구가 필요하겠지만요.
: 단백질의 3차원 구조를 예측하는 AI 모델 AlphaFold 3가 공개됐습니다. AlphaFold 2가 공개된 지 4년만입니다. AlphaFold 3는 이전 모델의 Evoformer 모듈을 더욱 개선한 Pairformer를 구조를 선보였는데요. 새로운 학습 구조 덕분에 분자 간 상호작용 예측 능력이 크게 개선됐습니다.
: Apple은 7개월만에 AI 칩 ‘M4’를 선보였습니다. 이번에 발표된 M4는 새롭게 출시되는 아이패드 11세대에 반영될 예정입니다. M4 칩은 M2와 비교해 최대 1.5배 향상된 속도의 CPU를 제공하며, AI 기계 학습을 가속하기 위한 뉴럴 엔진 성능은 현존 최고라고 합니다.
: OpenAI가 공개한 새로운 멀티모달 모델 GPT-4o는 특히 오디오 성능이 비약적으로 개선됐는데요. 사람의 반응 속도와 유사하게 오디오 응답을 결과를 반환합니다. 이번 모델의 경우 비영어권 모델에 대한 성능도 훨씬 개선됐으며, GPT-4 Turbo보다 속도는 2배, 비용은 0.5배 라고 합니다.