논문 원본 : https://arxiv.org/abs/2005.11401
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks
Large pre-trained language models have been shown to store factual knowledge in their parameters, and achieve state-of-the-art results when fine-tuned on downstream NLP tasks. However, their ability to access and precisely manipulate knowledge is still lim
arxiv.org
1. Introduction
- 사전학습된 신경망 언어 모델은 데이터로부터 상당히 깊이 있는 지식을 학습할 수 있음을 입증
- 이러한 모델들은 외부 메모리에 접근하지 않고도, 매개변수화된 암묵적 지식 베이스로서 가능할 수 있음
- 하지만 해당 모델들은 다음과 같은 한계점을 가지고 있음
- 메모리를 손쉽게 확장하거나 수정할 수 없으며. (=새로운 지식을 배우려면 다시 학습시켜야 함)
- 예측에 대한 명확한 근거를 제공하기 어렵고,
- 종종 "환각(hallucination)" 현상을 일으킴
- 이러한 문제들을 해결하기 위해, 매개변수적(parametric) 메모리와 비매개변수적(non-parametric) 메모를 결합한 하이브리드 모델들이 제안되어 왔음
- 이러한 하이브리드 모델은 지식을 직접 수정하고 확장할 수 있으며, 검색된 정보를 사용자 입장에서 해석하고 점검할 수 있다는 장점을 가짐
- 본 논문에서는 이러한 하이브리드 메모리 구조를 Seq2Seq 모델에 확장하여 적용
- Retrieval-Augmented Generation (RAG) 이라는 일반적인 fine tuning 접근법을 통해, 사전학습된 매개변수적 생성 모델에 비매개변수적 메모리를 결합
- 매개변수적 메모리 : 사전학습된 seq2seq Transformer 모델
- 비매개변수적 메모리 : 위키피디아의 dense vector 인덱스이며, 사전학습된 신경 검색기 (DPR: Dense Passage Retriever)로 접근
- 이 구성요소들은 확률 모델로 결합되어, end-to-end 학습이 가능
- Retriever는 입력을 기반으로 관련 문서들을 latent 문서로 반한화며, seq2seq 모델 (BART) 은 이 문서들과 입력을 함께 조건으로 사용하여 출력을 생성
- 이때 문서 마진은 두 가지 방식으로 근사화
- 출력 단위로 동일한 문서에 기반한다고 가정하는 top-K 근사 방식
- 가정 : 답 전체는 한 문서에 기반해서 만들어질 것이다
- 토큰 단위로 서로 다른 문서에 기반한다고 가정하는 방
- 가정 : 문장 내 각 단어는 서로 다른 문서에서 정보를 얻을 수 있음
- 출력 단위로 동일한 문서에 기반한다고 가정하는 top-K 근사 방식
- RAG는 사전학습된 모델들을 조립해서 사용
- 생성기 : BART
- 검색기 : DPR
- 외부 지식 창고 : Wikipedia 벡터 인덱스
- -> 따로 다 처음부터 학습 안 해도 되고, 검색기도 이미 훈련되어 있으니 지식을 바로 가져다 쓸 수 있음
- RAG는 외부 문서 (Wikipedia 벡터 인덱스)만 교체하면, 최신 정보로 모델 지식을 업데이트 할 수 있음
2. Method
- 본 연구는 입력 시퀀스 x를 사용하여 텍스트 문서 z를 검색하고, 이를 추가 문맥으로 활용해 목표 시퀀스 y를 생성하는 RAG 모델 탐구
- 쉽게 말해서 질문이 들어오면, 관련 문서를 찾아와서 그걸 참고해서 답을 만들어보자
2.1 Models
- RAG-Sequence
- "가장 관련이 있는 문서 하나만 골라서 그걸로 전체 답변을 만들자"
- 예 : 답 전체가 위키 문서 하나에 있다고 가정
- 1) 입력 x에 대해 top-K개의 문서를 검색하고
- 2) 각 문서에 대해 시퀀스 생성 확률을 계산한 뒤,
- 3) 이들을 마진화하여 최종 확률을 계산
- RAG-Token
- "답의 각 단어마다, 가장 잘 맞는 문서를 골라서 만들자!"
- 예 : 첫 단어는 문서 A에서, 둘째 단어는 문서 B에서...
- 1) top-K 문서를 먼저 검색하고
- 2) 각 토큰마다 문서들에 대해 확률을 계산한 뒤,
- 3) 마진화 과정을 반복
- 참고 : RAG를 Classification에 사용할 경우, 정답 클래스 하나만 출력하면 되기 때문에, RAG-Squence와 RAG-Token은 동일하게 동작
2.2 Retriever : DPR
- Retriever는 Dense Passage Retriever에 기반
- DPR은 bi-encoder 구조를 따르며 다음과 같이 계산
- d(z) : 문서 z를 BERT로 인코딩한 벡터
- q(x) : query x를 BERT로 인코딩한 벡터
- 즉, query와 문서의 inner product을 기준으로 유사도를 계산 (최대 내적 검색(MIPS))
- 우리는 TriviaQA, Natural Questions 정답 문서를 찾도록 학습된 사전학습된 DPR을 사용
- 이 문서 인덱스가 비매개변수적 메모리 역할
2.3 Generator : BART
- 본 모델은 BART-large를 사용
- BART 파라미터 θ는 RAG에서 매개변수적 메모리로 사용
2.4 Training
- 어떤 문서를 검색해야 하는지에 대한 직접적인 supervision 없이, retriever와 generator를 공동 학습
- 각 target yj에 대해 마진화된 negative marginal log-likelihood -log p (yj | xj)를 Adam optimizer를 사용하여 SGD로 최소화
- 문서 encoder BERTd는 freeze
- 질문을 벡터로 바꾸는 BERTq와 생성 모델 BART만 fine-tuning
2.5 Decoding
- RAG-Token
- 토큰 하나 만들 때마다 여러 문서를 참고해서 확률 평균함
- Obama는 문서 A에서 0.6, B에서 0.9, C에서 0.5
- 평균 내서 최종 확률을 뽑음
- 이걸 Beam Search에 넣어서 문장 전체 생성
- 일반적인 생성기처럼 동자감 -> 빠르고 효율
- 토큰 하나 만들 때마다 여러 문서를 참고해서 확률 평균함
- RAG-Sequence
- 문서 A,B,C 각각 따로 문장을 만들어봄 (beam search 3번)
- 나온 후보 문장들을 모은 다음에, 각 문서에서 그 문장을 얼마나 잘 만들 수 있었는지를 확인
- 그리고 각 문서의 기여도를 확룰로 곱해서 최종 점수 계산
- 정밀 디코딩 (Thorough Decoding)
- 모든 문서 다 확인해서 정확히 계산 (느림)
- 빠른 디코딩 (Fast Decoding):
- “이 문장, 아예 생성되지 않았던 문서에선 기여도 0으로 치자!” → 추가 계산 생략 (빠름)