ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • RAG(Retrieval-Augmented Generation)이란 | Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
    카테고리 없음 2023. 11. 24. 18:40

    Why RAG?

    현재는 상당 부분 해소된 문제이지만, LLM이 등장했을 때만 해도 환각현상으로 인해 많은 사람들이 골머리를 앓곤했다.

    chatGPT-4를 넘어 chatGPTs까지 나온 지금에도, 3.5 버전에서 내놓았던 '세종대왕맥북던짐사건'은 종종 우스갯소리로 회자되곤 한다. 사전학습된 LLM은 언어를 이해하고 생성하는 것에 뛰어난 성능을 보이지만 이와 같은 환각현상과, 사전학습이 이루어진 이후 시점의 정보에 대해서는 알 수 없다는 문제점을 보여왔다. 이를 fine-tuning(미세조정: 사전학습에 비해 작은 데이터셋으로 모델을 추가적으로 학습하는 것)으로 해결할 수 있지만, 매번 새로운 데이터가 생길 때마다 fine-tuning을 하기란 다소 부담스러운 일이 될 것이다. 이에 RAG는 모델 외부의 데이터를 활용할 수 있는 방식을 제안한다.

    파인튜닝과 다른 점

    파인튜닝은 대량의 데이터로 사전학습된 모델을, 사용목적에 부합하는 작은 데이터로 추가학습시키는 것이다. 이에 모델의 가중치가 업데이트된다. 예를 들면 LLM을 소량의 금융 상담 데이터셋으로 학습시켜 은행 상담용 챗봇을 만들 수 있는 것이다. 파인튜닝을 이용하면 모델은 특정 downstream task에 좋은 성능을 보일 수 있다. OpenAI 역시도 API를 통해 파인튜닝 을 제공하고 있다. RAG는 pretrained LM에 저장된 parametric 정보 뿐만 아니라, 외부의 non-parametric 정보를 이용할 수 있다는 점에서 파인튜닝과는 차별점을 가진다.

     

    논문으로 알아보자 : Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

    RAG는 Meta AI의 논문에서 처음 소개되었는데, 이 논문의 내용을 읽으며 RAG가 어떻게 작동하는지 알아보자!

    링크 : Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

     

    1. Introduction

    Pretrained LLM은 parameter에 지식을 저장하여 downstream NLP tasks에서 좋은 성능을 보였다. 그러나 이 지식에 접근하고 정확하게 조작하는 능력은 제한적이므로, knowledge-intensive task에 취약하다. task-specific architecture보다 오히려 성능이 떨어지기도 한다. 이 논문에서는 언어 생성을 위해 pretrained model과 non-parametric memory(비 매개변수 메모리 : 모델의 파라미터(가중치) 내에 저장되지 않은 정보)를 결합한 RAG(Retrieval-Augmented Generation)를 제안한다. 이 non-parametric memory를 통해 모델은 매개변수 자체에 저장할 수 있는 것보다 더 많은 정보에 접근이 가능하며, 특히 모델이 내부적으로 저장할 수 없는 최신/광범위한 지식이 필요한 작업에 유용하다.

     

    이 논문에서는 parametric memory로 사전학습된 seq2seq transformer 모델, non-parametric memory로 pre-trained neural retirever (Dense Passage Retriever, DPR) 를 이용한 wikipedia의 dense vector index을 사용했다. DPR은 입력을 기반으로 문서를 검색하고, seq2seq transformer 모델은 이 문서들을 기반으로 출력을 생성하는 방식이다.

     

    * DPR이란 : 문서 검색을 위해 설계된 신경망으로, 문서와 쿼리의 dense vector 표현을 생성하고, 쿼리에 가장 관련이 높은 문서를 찾기 위해 Maximum Inner Product Search (MIPS)를 수행한다. DPR은 두 개의 BERT Based 인코더를 사용한다. MLPS는 벡터 간의 내적을 계산하여 가장 높은 값을 가지는 문서들을 검색하는 방식이다.

    간단히 말해, 검색 대상인 문서와 입력받은 쿼리를 벡터로 바꿔주어, 쿼리와 관련있는 문서들을 빠르게 탐색하는 역할인 것이다. 

     

    RAG 모델이 상위 k개의 문서를 기반으로 답변을 생성할 때 각 출력에 대해 두 가지 방식으로 처리할 수 있다고 한다.

    1. Per-output basis : target token이 동일한 문서에서 온 것으로 가정한다. 하나의 문서가 전체 답변을 생성하는데 사용되는 방식 (이후 설명될 RAG-Sequence 모델)
    2. Per-token basis : 서로 다른 문서들이 답변 내의 서로 다른 target token을 생성하는 데 사용된다. 즉, 답변의 각 부분이 다른 문서에서 올 수 있는 생성 방식이다. (이후 설명될 RAG-Token 모델)

    이러한 접근 방식은 T5, BART와 같은 seq2seq 모델과 유사하게 , RAG를 다양한 seq2seq 작업에 미세 조정할 수 있게 해주며, 이 과정에서 생성기와 검색기가 함께 학습된다. 생성기와 검색기 간의 상호작용을 통해 생성기가 보다 관련성 높고 정확한 응답을 생성할 수 있도록 하는 것이다.

     

     

    RAG의 간략한 구조는 위와 같다.

    1. Query Encoder: 사용자의 질문 x를 입력으로 받아들여 쿼리 벡터 q(x)로 변환한다.
    2. Retriever pn (검색기): 비매개변수(non-parametric) 검색 시스템으로, 쿼리 벡터와 가장 관련성이 높은 상위 K개의 문서 벡터 zi를 Maximum Inner Product Search (MIPS)를 통해 찾는다.
    3. Generator pθ (생성기): 매개변수(parametric) 기반의 seq2seq 모델로, 검색된 문서 벡터들과 입력 쿼리를 바탕으로 최종 예측 y를 생성한다. 생성기는 다양한 문서에 대한 seq2seq 예측을 marginalize(다양한 정보들을 결합)하여 최종 출력을 결정한다.

    2. Methods

    2.1 Models

    1. RAG-Sequence 방식 : 동일한 문서를 사용하여 전체 sequence를 생성한다. top-K approximation을 통해 seq2seq probability p(y|x)를 얻기 위해 검색된 문서를 marginalized single latent variable로 취급한다.
    2. RAG-Token 방식 : 각 target token에 대해 서로 다른 문서를 검색하여 그에 대응되게 marginalize한다. 이는 생성기로 하여금 여러 개의 문서들로부터 정보를 위하여 답변을 생성할 수 있도록 한다. 검색기(retriever)는 top-K개 문서를 검색하고, 생성기(generator)는 각 문서에 대해 다음 토큰의 확률 분포를 생성한다. 이 과정은 각 토큰에 대해 반복되며, 생성기는 marginalization을 통해 확률들을 종합하여 최종 출력 시퀀스를 생성한다.

    또한, target sequence의 길이를 1로 제한하여 classification에 이용할 수도 있다고 한다.

     

    2.2 Retriever: DPR

    DPR은 BERT 모델을 기반으로 한 두 개의 인코더를 사용한다.

    1. 문서 인코더 (d(z)): BERTBASE 문서 인코더를 사용하여 문서의 dense representation을 생성한다.
    2. 질문 인코더 (q(x)): BERTBASE 질문 인코더를 사용하여 질문의 dense representation을 생성한다.

    이 두 표현을 이용하여, 쿼리와 가장 관련성 높은 top-K개의 문서를 찾는 것은 MIPS(Maximum Inner Product Search) 문제로 귀결되며, 이는 sub-linear time( 알고리즘의 실행 시간이 입력 크기 에 비례하지 않고 그보다 더 작은 경우)내에 해결될 수 있다고 한다. DPR은 TriviaQA와 Natural Questions의 응답에 관련된 문서를 검색하도록 훈련되었으며, 문서 인덱스는 non-parametric memory로 간주된다.

     

    2.3 Generator: BART

    생성기 부분은 pretrained  seq2seq transformer인 BART-large를 사용한다. BART는 약 4억 개의 매개변수를 가진 모델로, 입력 와 검색된 문서 를 concatenate하여 결과를 생성한다. BART 생성기의 매개변수 매개변수 메모리(parametric memory)이다.

     

    2.4 Training

    어떤 문서들이 검색되어야(retrieve) 하는지 직접적으로 감독하지 않고, 검색기(retriever)와 생성기(generator)를 함께 훈련시킨다. 입력/출력 쌍 이 있는 파인튜닝 훈련 데이터를 사용하며, 각 타겟에 대한 negative marginal log-likelihood을 최소화하는 것을 목표로 한다. 문서 인코더 BERTd를 훈련 중에 업데이트하는 것은 비용이 많이 들기 때문에, RAG에서는 문서 인코더와 인덱스를 고정시키고, 질문 인코더 BERTq와 BART 생성기만 파인튜닝한다.

     

    2.5 Decoding

    1. RAG-Sequence 방식 : 전체 시퀀스의 확률 을 개별 토큰의 확률으로 분해할 수 없기 때문에, single beam search으로는 해결할 수 없다. 대신, 각 문서 에 대해 beam search을 수행하고, 각 가설에 대해 를 사용하여 점수를 매긴다. 이렇게 하여 생성된 가설 집합을 기반으로 추가적인 forward pass를 실행하여 각 가설의 확률을 추정한다. 이러한 방식을 "Thorough Decoding"이라고 한다. "Fast Decoding" 방식도 사용될 수 있는데, 이는 더 긴 시퀀스를 생성할 때 추가적인 forward pass를 실행하지 않아 효율을 높인다. 대신, 빔 검색 동안 생성되지 않은 가설에 대해서는 으로 가정한다.
    2. RAG-Token 방식 : standard autoregressive seq2seq 생성기로 볼 수 있으며, 각 토큰 에 대해 top-K개 문서의 확률을 합산하여 transition probability 을 계산한다. 이를 표준 beam 디코더에 적용하여 디코딩한다.

    3. Experiments

    non-parametric 소스로는 Wikipedia December 2018 dump를 사용했다고 한다. 학습과정에서 각 쿼리에 대해 top-k 문서들을 검색했고, k는 5~10 사이의 수로 설정했다. 다음의 4가지 knowledge intensive task에 대해 평가가 진행되었다.

     

    3.1 Open-domain Question Answering: Natural Questions, TriviaQA, WebQuestions, CuratedTrec 등의 데이터셋을 사용했다. 이는 질문과 답변을 텍스트 쌍으로 처리하며, extractive QA와 closed QA를 비교하여 RAG의 성능을 평가한다.

     

    3.2 Abstractive Question Answering: RAG는 MSMARCO NLG 작업을 사용하여 추상적 질문 응답 능력을 평가한다. 여기서는 제공된 텍스트 대신 자체 생성된 답변을 통해 질문에 응답하며, 일부 질문은 위키피디아만으로는 해결할 수 없었으므로 이때는 parametric 지식을 사용하여 답변을 생성할 수 있다.

     

    3.3 Jeopardy Question Generation: 제퍼디 형식의 질문 생성을 통해 RAG의 생성 능력을 평가힌다. 이는 표준 QA 작업보다 더 복잡하며, 정확하고 구체적인 질문을 생성하는 것을 목표로 한다.

     

    3.4 Fact Verification: FEVER 작업을 통해 RAG의 사실 검증 능력을 평가힌다. 이는 특정 주장에 대해 위키피디아에서 이를 뒷받침할 수 있는 증거를 찾아, 주장을 true/false/unverifiable로 분류하는 작업이다.

     

    4. Results

    전반적으로 우수한 성능을 보이는 것을 알 수 있다.

    테이블 2의 경우, SotA 모델은 정답을 생성할 때 사전에 검증된 정보가 제공되었다. 즉 모델이 독자적으로 정보를 찾아내고 추론하는 대신, 정답에 직결되는 콘텐츠에 접근할 수 있었다는 것을 뜻한다. 

     

    부정확한 정보를 제공하는 환각 현상도 감소했음을 보여주는 예시이다.

     

    Additional Results

    Generation Diversity: Jeopardy에서 BART 모델에 비해 사실적이고 다양한 질문들을 생성한다. 이때 RAG-S가 RAG-T에 비해 더 다양한 질문을 생성한다고 한다.

     

    Retrieval Ablations: 태스크 수행 시 관련 문서를 검색해오는 것이 key feature가 되는 만큼, 이 feature가 성능을 향상시켰음을 보이기 위해 학습 시 검색기를 freeze(가중치 업데이트를 하지 않음)하는 실험을 진행했다고 한다. 검색기가 freeze되었던 경우에도 성능이 향상되었다고 한다.

     

    Index hot-swapping: RAG 모델은 비매개변수 메모리를 교체함으로써 쉽게 지식을 업데이트할 수 있다. 2016년과 2018년의 지식 기반을 비교하여 RAG 모델이 새로운 정보에 얼마나 잘 적응하는지 확인하는 실험을 진행하였다.

     

    Effect of Retrieving more documents: RAG-Sequence는 더 많은 문서를 검색할수록 결과가 향상되는 반면, RAG-Token은 10개의 문서에서 최고의 성능을 보인다.

     

     


    RAG가 많은 사람들에게 매력적으로 다가오는 이유는, 다양한 지식 집약적 NLP 작업에서 검색을 통한 성능 향상을 불러올 수 있다는 점이다. 나 역시도 생성형 LM을 이용한 웹 어플리케이션 프로젝트를 위해 리서치를 하던 중 RAG에 대해 깊게 공부해보게 되었다. 계속해서 쌓이는 사용자 데이터를 실시간으로 모델에 반영해볼 수는 없을까 고민하던 중 알게된 방식이기에 "유레카!"를 외쳤다😆

    (물론 데이터 베이스의 크기나, 검색 속도, 생성 속도에 대해서는 아직 개발 전 단계인만큼 미지수인지라 꽤나 불안하다...)

     

    남은 반 년 동안 RAG를 기반으로 한 어플리케이션을 성공적으로 만들어 낼 수 있길🤞

Designed by Tistory.