주로 RAG로 불리는 모델을 제시한 논문입니다.
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
Abstract
LLM 의 지식은 파라미터 안에 들어있습니다. 하지만 새로운 지식에 접근하고 정확한 지식을 기반으로 답변하는 능력은 부족합니다. 이로 인해 정확한 정보가 필요한 태스크에 대해서는 단순한 태스크에 비해 성능이 낮습니다. 따라서 Pre-Trained 파라미터 기반 지식과 벡터 인덱스를 사용한 비-파라미터 기반 지식을 모두 사용한 RAG 모델을 만들었습니다. RAG의 구현 방식을 두 가지를 제시하며 하나는 검색하여 얻은 같은 글에 대해 모든 답변을 생성하는 것이고, 나머지는 답변의 각 토큰에 대해서 서로 다른 글을 사용합니다. fine-tune 하여 평가한 우리 모델이 세 가지 open-domain QA 태스크에 대해 SOTA를 달성하였으며 이 점수는 파라미터 기반 모델의 성능과 태스크에 특화된 검색 모델의 성능을 상회합니다.
Introduction
RAG model은 retriever 와 seq2seq model로 이루어져 있습니다. retriever는 query encoder와 document index로 이루어집니다. retriever는 MIPS라는 연산을 통해서 인코딩 된 query 벡터와 사전에 인코딩 된 document 벡터 간 내적값이 큰 top-k개의 ducument를 찾습니다. seq2seq model 은 답변을 생성하는 generator 로써 encoder-decoder 모델을 사용합니다. retriever에서 찾은 k개의 document와 query을 concat 한 벡터를 입력으로 받아 답변을 생성합니다.
Method
답변에 참고되는 지식인 document를 marginalizing, aggregating하기 위한 2가지 방법을 제시합니다.
각 passage를 가지고 생성한 답변 문장(Sequence)들 중에서 marginalizing하여 확률이 높은 문장(Sequence)들을 선택하는 RAG-Sequence와
각 passage를 가지고 생성한 토큰의 distribution으로 k개의 passage에 대한 토큰의 distribution을 계산한 뒤 marginalizing 하여 확률이 높은 토큰(token)을 선택하며 문장을 생성하는 RAG-Token입니다.
marginalize 추가 설명
marginalize = aggregation = 최종 확률을 구한다., 가중합 계산.
가중합을 계산하여 중요하지 않은 변수의 영향을 없앤다. $P(y|P,Q)P(P|Q) -> P(y|Q)$에서 가능한 모든 P의 경우의 수를 더해서 Q에 대한 확률만 남기는 것이다.
RAG-sequence
예를 들어 retriever에서 top-3의 passage를 가져올때
$A_1$은 하나의 답변 문장, $P_1, P_2, P_3$이 3개의 passages, $Q$가 query라고 하면
$p(A_1|Q) = p(A_1|P_1, Q) p(P_1|Q) + p(A_1|P_2, Q) p(P_2|Q) + p(A_1|P_3, Q) p(P_3|Q)$로 쿼리 $Q$에 대해서 답변 $A_1$이 나올 최종 확률을 계산하는 것을 의미한다.
가령 위와 같이 답변 문장에 대한 확률을 계산할 때 $P_3$과 $Q$를 concat 한 입력에 대한 generator의 답변에서 $A_1$이 등장하지 않을 수 있습니다. 이때 $p(A_1|P_3, Q)$ 계산을 위한 방법이 2가지 제시됩니다.
- generator에서 $A_1$을 구성하는 토큰을 선택하며 $A_1$을 만들어 확률을 계산하는 방법
- 단순히 0으로 치환하는 방법
1 방법의 경우 후처리에 드는 비용이 크다는 단점이 있어 RAG-sequence에서는 2 방법을 선택하였습니다.
RAG - sequence에서 궁금했던 점은 각 passage에 대해서 문장을 끝까지 생성을 하는데 그 각 문장에 대한 확률을 계산한 다음에 어떻게 최종 답변을 생성하는 것인지였습니다. 확률이 높은 N개의 답변을 출력하고 여기서 N은 beam search에서의 하이퍼 파라미터인 beam size입니다.
RAG-token
하나의 토큰 생성에 대해 모든 passage의 distribution을 가중합 합니다.
위의 RAG-Sequence와 마찬가지로 retriever에서 top-3의 passage를 가져올 때
$a_1$ 은 답변으로 사용될 첫 번째 토큰, $P_1, P_2, P_3$이 3개의 passages, $Q$가 query라고 하면
$p(a_1|Q) = p(a_1|P_1, Q) p(P_1|Q) + p(a_1|P_2, Q) p(P_2|Q) + p(a_1|P_3, Q) p(P_3|Q)$
여기서 나오는 $p(a_1|Q)$는 첫 번째 token에 대한 vocab distribution이며, beam search 방법을 그대로 사용하여 답변을 생성할 수 있습니다.
수식에서 파이는 각 토큰이 연속해서 나오면서 생성한 문장에 대한 확률을 계산할 때 사용됩니다.
Retriever
Bi-encoder 모델인 DPR을 사용하며 query와 document의 인코딩 벡터의 내적을 통해 유사도를 계산합니다.
query와 document encoder는 모두 BERT base 모델을 기본으로 하였습니다.
RAG 모델 학습을 하기 전에 기본적으로 모델은 사전학습된 DPR 모델을 사용하였고 이를 사용하여 document index를 만들었습니다. 해당 DPR 모델은 Trivia QA questions, Natural Question의 정답을 가진 document를 retrieve 하도록 학습된 모델입니다.
Generator
generator는 encoder-decoder 모델이 필요한데 RAG는 BART-large 모델을 사용했습니다. BART는 다양한 생성 태스크에서 최고 성능을 보이며, 비슷한 크기의 또 다른 생성 모델인 T5보다 성능이 우수합니다.
Training
retriever와 generator를 함께 학습시켰으며 query에 대해 어떤 문서를 참고해야 하는지에 대한 지시는 없었습니다. fine-tuning을 위한 input/output 쌍 $(x_j,y_j)$에 대해서 음의 log-likelihood을 최소화하도록 목적함수를 설정하였습니다. 그 목적함수는 $\sum_j{-log{p(y_j|x_j)}}$ 이며 Adam, 확률적 경사하강법을 사용하였습니다. document encoder인 BERT_d를 학습시키는 것은 드는 비용에 비해 성능향상이 크지 않아 document encoder는 그대로 두고 query encoder BERT_q와 BART generator만 파인튜닝 하였습니다.
Experiment
다방면의 knowledge-intensive task에 대해 실험을 진행하였습니다. 실험에서는 하나의 위키피디아 dump를 non-parametric knowledge source로 사용하였습니다. 문서들은 100개의 단어 단위로 쪼개어 각 청크를 인코더를 거쳐 vector index를 만들었습니다.
Open-domain Question Answering
ODQA는 knowledge intensive task의 test를 위한 주로 사용되는 방식입니다. 비교군으로는 extractive QA paradigm, 검색된 문서에서 답에 해당하는 span을 찾는 방법과, Closed-Book QA, RAG와 마찬가지로 생성은하지만 외부에서 검색하는 것이 아닌 오직 모델 파라미터의 지식만을 사용하는 방법을 두었습니다.
사용한 데이터셋에는 Natural Questions (NQ), TriviaQA (TQA), WebQuestions (WQ) and CuratedTrec (CT)이 있습니다.
Abstractive Question Answering
단순한 extractive QA에서 벗어나서 document의 텍스트를 읽고 문맥을 이해하여 답변을 생성해야 하는 QA입니다. 여기서는 MSMARCO NLG task v2.1 데이터 셋을 사용했는데 이는 질문, 답변이 들어있는 10개의 문서, 답변 이렇게 이루어져 있습니다. 하지만 RAG에서는 주어진 문서를 사용하지 않고 질문, 답변 세트만 사용해서 open-domain abstractive QA 태스크로 실험을 진행했습니다.(retrieve과정을 생략하지 않기 위함)
Jeopardy Question Generation
RAG의 답변 생성 성능을 non-QA 세팅에서 측정하기 위해 open-domain 질문 생성 태스크를 이용했습니다. 원래의 open-domain QA에서의 질문은 너무 짧고 간단해서 더 생성 능력이 많이 요구되는 Jeopardy question을 고안하게 되었습니다. 여기서 Jeopardy questions이란 단어가 제시되면 그 단어를 의미하는 문장을 의미합니다. 생성한 질문을 평가할 때 Q-BLEU-1 metric을 사용하는데 기존의 BLEU metric이 가지는 사람의 평가와 점수가 다른 문제를 해결하고 질문 생성에 특화시킨 평가 방법입니다. Q-BLEU 방법에서는 기존 지표에 질문이 올바르게 대답될 수 있는 모든 관련 정보를 포함하고 있는지 여부인 Answerability, 대답 가능성을 추가하여 평가지표를 향상했습니다.
Fact Verification
FEVER 데이터 셋에서 어떤 자연어 주장이 주어지고 이 주장을 위키피디아에 의해 지지되는지, 반박되는지, 결정하기에 정보가 부족한지 선택하는 태스크입니다. 또한 기존에는 이 태스크에 대해서 어떤 문서를 참고해야 하는지 알려준데 반해 RAG 의 경우 아무 정보가 주어지지 않았습니다. 이는 현실 세계에서 어떤 문서를 참고 해야하는지 제공되지 않기 때문이라고 하였습니다.
Result
실험을 진행한 대부분의 태스크에서 SOTA를 달성하였습니다. Open-DomainQA에서는 4가지 모든 데이터 셋에서 SOTA, Abstractive Question Answering, Fact Verification과 같이 어떤 문서를 참고해야하는지 알려주었던 기존에 실험에는 못 미치지만 그에 필적하는 성능을 보여주었습니다.
답변을 생성할 때 토큰 단위로 어떤 문서가 영향을 많이 줬는지 시각화를 통해서 보여주었습니다.
참고하는 문서의 양을 늘렸을 때의 실험 결과입니다.
직관적으로는 여러 문서를 참고한다면 계속해서 성능이 상승할 것이라 생각했지만 실험 결과 k=10 부근에서 성능상승이 미비하거나 오히려 낮아지는 모습도 보입니다.
'AI&ML > 학습 정리' 카테고리의 다른 글
[Paper-review]RAGAS: Automated Evaluation of Retrieval Augmented Generation (0) | 2024.07.02 |
---|---|
langchain quickstart 따라하기 (0) | 2024.05.03 |
핸즈온 머신러닝 리뷰 (1) | 2024.01.13 |
f1-score에 대해서 알아보자(2) (0) | 2023.12.07 |
f1-score에 대해서 알아보자(1) (0) | 2023.12.07 |