Paper Review

[Paper Review] Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks(2020)

cherie-ssom 2024. 11. 24. 15:10

 

이번 글에서는 RAG라는 용어가 처음 등장한 논문으로 Facebook AI Research에서 2020년에 발표한 논문을 살펴보고자 한다.

 

1. Introduction

기존의 Pre-trained language model은 downstream NLP task에 대해 fine-tuning을 수행할 때 좋은 결과를 얻지만 새로운 지식이나 정정보도와 같은 부분에 대한 답변은 여전히 제한이 있다. 

 

이러한 부분을 해결하기 위해서 Retriever(정보 검색기)와 Generator(생성기)를 결합한 모델을 제안한다.

조금 더 상세하게 말하자면 parametric memory (pre-trained model)과 non-parametric memory (retrieval-based)를 결합한 Retrieval-Augmented Generation(RAG) 구조를 제안한다. 

 

즉, parametric memory를 가진 학습된 모델을 fine-tuning 할 때, non-parametric memory를 활용한다. 

(한마디로 RAG를 fine-tuning의 한 방법으로 제시한 것이라고 생각하면 될 듯하다. 현재 우리가 알고 있는 RAG와는 조금 다르다.)

 

* parametric knowldeg : 모델이 학습한 정보

non-parametric knowledge : 문서를 가져오는 외부 정보

 

2. Methodology

2-1. 구성요소

 

먼저 구성요소와 그 역할에 대해서 조금 직관적으로 살펴보면 다음과 같다.

앞서 언급한 것처럼 RAG는 크게 2가지 model의 결합으로 구성되어 있다.

  1. Retriever: DPR(Dense Passage Retrieval)
    • DPR은 두 개의 독립적인 BERT 모델을 사용하여 질문(Question)과 문서(Passage)의 임베딩을 생성
    • 질문과 문서의 유사도를 계산하여 가장 관련성이 높은 문서를 검색
    • 문서 데이터베이스는 FAISS(빠른 유사도 검색 라이브러리)로 인덱싱 되어 효율적인 검색이 가능
  2. Generator: Seq2Seq 모델
    • Retriever가 반환한 상위 k개의 문서를 입력으로 받아 답변을 생성
    • Seq2Seq 구조를 활용하여 문맥과 입력된 정보를 바탕으로 유창한 텍스트를 생성

논문에 제시된 구조를 보고 설명을 해보자면,

 

Question x (qx)를 기반으로 유사한 document z를 retrieve 하는 모델이 Retriever

Retriever가 변환한 유사한 document z와 question x를 encoder에 넣고 decoder에서 answer y를 generate 하는 모델이 Generator이다. 

 

논문에서 Generator로는 Encoder-decoder 모델인 BART를 활용했다. (Generator는 굳이 BART를 쓰지 않아도 되고, encoder-decoder 모델이면 다 가능하다.)

 

이렇게, 모델의 구조까지 살펴보았다.

 

그런데 논문에서는 k개의 유사한 document를 가져와서 encoder에 넣고 이를 generate 하는데 이를 어떤 방식으로 concat 하는가에 대한 부분을 다음과 같은 두 가지로 제시했다. (즉, 답을 generate 하는 방법(?)을 두 가지 제시했다.)

 

 

2-2. RAG의 두 가지 모델

RAG의 두 가지 모델
RAG의 두 가지 모델의 Decoding 방법

  • RAG-Sequence Model 
    • 질문에 대해 한 번의 검색을 수행하고, 상위 검색 결과를 바탕으로 Generator가 target sequence를 생성한다.
    • 즉, 한 번 검색된 문서들이 전체 시퀀스 생성동안 공유됨
    • Decoding 과정
      • 기존의 beam-search를 그대로 사용 x : 하나의 질문 q에 대해서 여러 document zi를 검색했을 때, 문서별로 다른 시퀀스가 생성된다. 기존 beam-search는 단일 시퀀스에서만 작동하도록 설계되어 있어, 여러 document 에서 생성된 시퀀스를 marginalize 하기 어렵다.  
      • 따라서, 각 문서 z마다 beam search를 실행하여 p(yi|x, z, y1:i-1)을 점수를 매긴다. 
      • 이후에 공통된 beam을 만들기 위해 각 document zi에 등장한 시퀀스(beam)을 가져와 추가적인 forward pass를 수행해 각 시퀀스의 확률을 계산 후 이를 marginalize 해준다.
      • 다시 말해 question vector x와 유사한 document z를 뽑고 각 document 1개랑 question vector x를 concat 시켜서 총 k개의 forwarding을 진행한 후 이를 marginalize 하는 방식
  • Rag-Token Model
    • Generator가 출력할 각 토큰마다 Retriever가 새롭게 문서를 검색하여 입력으로 제공
    • 즉, 매 target token 마다 서로 다른 document를 retrieve 하면서 answer를 생성하는 방법 
    • 조금 더 자세히 살펴보자면 input sequence (query) x로 문서들 z를 얻고, x와 z를 사용해 target인 y를 생성한다. 이후 retriever는 query x에 대한 top k개의 문서들을 가져오고, generator는 이전 i-1개의 토큰들을 보고 새로운 토큰을 생성한다.
    • 이 방식은 Retriever와 Generator 간 상호작용이 더 긴밀하지만, 학습 비용이 매우 높다는 점이 있다.
    • Decoding 과정
      • Standard beam decoder를 사용해 디코딩한다. (기존의 beam-search를 그대로 활용해도 된다.)
      • 이미 이전 time-step까지 생성된 텍스트 시퀀스가 주어지므로, 기존의 beam-search의 틀을 변경할 필요가 없다. 즉, 단순히 입력 데이터에 문서를 더한 것일 뿐이라서 기존 beam search 알고리즘의 동작 방식에는 영향을 주지 않음     

2-3. 훈련 및 추론 과정

  1. 훈련 (End-to-End 또는 모듈별):
    • retriever와 generator는 학습
    • 여기서, Document Encoder는 학습 대상에서 제외했는데 주기적으로 문서 인덱스를 업데이트해야 해 비용이 크고 성능에도 큰 영향을 주지 않기 때문이다.
  2. 추론 (Inference):
    • 질문이 주어지면 Retriever가 관련 문서를 반환
    • Generator는 반환된 문서를 기반으로 답변을 생성

여기서, Retriever와 Generator를 통합하는 방식으로 training 시 두 개 모두 동시에 학습을 하기 때문에 fine-tuning 방법 중 하나라고 할 수 있다(?).

3. Experiment & Evaluation

실험 대상 task는 4가지다.

ODQA의 경우 SOTA를 보였고, 나머지 실험에서도 준수한 결과를 얻었다.

 

open-domain Question Answering (ODQA)

  • question and answer쌍을 사용하여 RAG를 학습
  • SOTA를 보였다고 할 수 있다.

Table 1

 

Abstractive Question Answering

  • open domain 문제가 아니라 free form 형태의 QA로 RAG의 성능이 나올 수 있는지 측정하고자 함.  
  • 즉, RAG의 NLG(natural language generation)를 측정하기 위해 MSMARCO NLG task v2.1 사용
  • 해당 MSMARCO task는 question과 question을 검색 엔진에 검색했을 때, gold passage(검색엔진에서 가져온 질문과 관련된 passage) 10개와 해당 passage로부터 가져온 full sentence answer로 구성되어 있음
  • 하지만 저자들은 이 gold passage를 사용하지 않고 QA task로 MSMARCO를 사용
  • Tabel 2에서 RAG-Tok이 RAG-Seq보다 좋다는 것을 알 수 있다

Table 2

 

Jeopardy Question Generation

  • 마찬가지로 non-QA 문제에서 RAG의 성능을 확인하기 위해 실험을 진행 
  • Jeopardy Quesion Generation은 주어진 정답 entity를 가지고 그 정답에 상응하는 질문을 만드는 문제
  • 예를 들어, answer는 "The World Cup"이라는 답은 " In 1986 Mexico scored as the first country to host this international sports competition twice"이라는 질문에 대해 상응하는 질문이다. 이러한 Question을 생성해야 하는 문제다. 
  • 위의 그림인 Table 2에서 Jepardy Question Generation에서는 RAG-Tok이 RAG-Seq보다 좋다는 것을 알 수 있다
  • 또한, Table 4에서는 452쌍이 넘는 generation의 Human evaluation results를 보여준다.

Table 4

 

Fact Verification

  • FEVER라는 데이터 셋은 자연어 claim에서 위키피디아로부터 근거를 검색해서 해당 claim이 True인지 false인지 unverifiable인지 (원래 label은 supports, refutes, or not enough info으로 표현) 판단하는 문제이다.  
  • 위의 그림 중 Table 2에서 FEVER에 대한 결과를 볼 수 있다. RAG score는 SOTA(domain-specific architectures)와 4.3% 밖에 차이나지 않는 결과를 볼 수 있다.

4. Additional Results

저자들은 RAG의 성능에 어떤 요소가 영향을 미치는지 이해하기 위해 여러 가지 실험을 진행

 

또한 더 많은 document들을 retrieve 할수록 성능이 향상되지 않음을 보여주었다.

 

해당 논문은 RAG라는 것을 제시하며 NLP의 다양한 태스크에서 외부 지식을 효과적으로 활용할 수 있는 방식을 제시했다는 의의가 있다.