[20′ NeurIPS] Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks

This entry is part 9 of 13 in the series Language Model

1. 들어가며

자연어 처리(NLP) 분야는 지속적으로 발전하고 있으며, 최근의 연구들은 모델이 더 넓은 범위의 지식을 활용하여 복잡한 질문에 답변할 수 있도록 하는 방법에 초점을 맞추고 있습니다. 이러한 맥락에서 “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks” 논문은 특히 주목할 만한 연구입니다. 이 논문에서 소개된 RAG(Retrieval-Augmented Generation) 모델은 기존의 언어 모델의 한계를 극복하고, 외부 지식을 효과적으로 활용하여 답변을 생성하는 새로운 접근 방식을 제시합니다.

RAG 모델은 두 가지 핵심 컴포넌트, 즉 Retriever와 Generator를 중심으로 구성됩니다. Retriever는 BERT와 같은 강력한 언어 모델을 사용하여 질문(Query)과 문서(Document)를 벡터 공간에 임베딩하고, 이를 통해 질문과 관련성이 높은 정보를 검색합니다. 이어서, 검색된 정보는 Vector Concatenation을 통해 하나의 벡터로 합쳐지며, 이는 Generator의 입력으로 사용됩니다. Generator는 이 정보를 바탕으로 최종적인 답변을 생성합니다. 이 과정은 Supervised Loss를 통해 학습되며, RAG는 직접적인 문서 인덱스 지시 없이도 효과적으로 학습할 수 있음을 보여줍니다.

본 논문에서 수행된 다양한 실험들은 RAG가 기존의 대규모 언어 모델(Large Language Models, LLMs) 및 기타 Retrieval Based Model들과 비교하여 외부 데이터를 더 잘 활용하며, 보다 적절한 답변을 생성할 수 있음을 입증합니다. 이는 RAG 모델이 지식 집약적인 질문에 대해 더 정확하고 상세한 답변을 제공할 수 있는 능력을 가지고 있음을 시사합니다.

이 논문의 의의는 단순히 새로운 모델을 제시하는 것을 넘어서, NLP 모델이 외부 지식을 활용하는 방식을 혁신적으로 개선하고, 이를 통해 모델의 지식 기반 추론 능력을 크게 향상시킬 수 있는 가능성을 열어준다는 데 있습니다. RAG 모델의 개발은 NLP 분야에서 모델의 지식 활용 능력을 강화하고, 보다 복잡한 자연어 이해 및 생성 작업을 수행할 수 있는 새로운 길을 제시합니다.

2. RAG

이번 챕터에서는 RAG의 구조와 작동 방식, 학습 방법등에 대해 각각 자세히 알아보겠습니다. 이를 위해서는 먼저 RAG가 무엇을 하고자 하는지를 이해해야 하는데요. LLM에서 Retrieval (검색) 기능은 왜 필요할까요? 기업에서 사내 복지 책자 관련 대화를 하는 챗봇을 개발한다고 상상해보겠습니다. 직원들은 궁금한 사내 복지 정보를 직접 책자를 찾아보는게 아닌, 챗봇에게 질문하여 정보를 얻을 수 있는 시스템인거죠. 하지만 범용적으로 사용되는 Pretrained LLM은 사내 복지 관련 정보를 학습한 적이 없습니다. 사내 데이터는 보통 Public으로 공개되지 않기 때문이죠. 그럼 이 챗봇은 어떻게 사내 복지 관련된 내용에 대해 사용자와 대화할 수 있을까요?

이러한 챗봇을 구현할 수 있는 방법은 다양합니다. 그 중에서도 이렇게 외부 데이터를 쉽게 활용할 수 있는 방법이 Retrieval 인데요. 말 그대로 외부 데이터로부터 필요한 정보를 ‘검색’을 통해 찾아내어 대답하는 방법입니다. 이렇게 외부 데이터로부터 필요한 정보를 검색해서 대답을 하기 위해서는 당연히 ‘검색’ 기능이 필요하겠죠. 이 검색 기능에서는 수많은 외부 데이터 중에서 현재 질문과 가장 관련있는 정보를 찾아내는 기능이 필수적일겁니다. 그리고 이렇게 찾아낸 정보를 바탕으로 대답을 ‘생성’하는 기능이 필요할 겁니다. 그러기 위해서는 질문과 찾아낸 관련 정보를 같이 활용해주어야겠죠.

여기까지가 Retrieval Based LLM 동작 방식의 큰 그림에 해당합니다. RAG는 이러한 Retrieval Based Model의 조상격에 해당하는 논문인데요. RAG의 Architecture를 핵심만 요약하여 표현하면 다음과 같이 그릴 수 있습니다.

그림1. RAG Architecture
그림1. RAG Architecture

위에서 설명한 Retrieval Based LLM에 반드시 필요한 기능인 ‘검색’과 ‘생성’ 기능에 초점을 맞춰, 하나씩 자세히 살펴보겠습니다.

2-1. Retriever

제일 먼저 살펴봐야할 기능은 단연 ‘검색’ 기능입니다. 다시 한번 동작 방법의 흐름을 떠올려볼게요. 우선 입력으로 들어온 질문 (Query)가 있을겁니다. 예를 들어 ‘대한민국의 수도는 어디야?’ 라는 질문이 Query로 들어왔다고 가정해보겠습니다. 이때 우리의 LLM은 이러한 정보를 학습한 적이 없다고 가정할게요. 즉 우리 LLM은 위 그림의 Document라고 표현되어 있는 ‘외부 데이터’로 부터 질문에 대답하기 위해 필요한 정보를 얻어야 합니다. 이를 위해서는 Document가 포함하고 있는 수많은 정보 중 어떤 것이 질문에 대답하기 위해 필요한 정보인지를 골라내야겠죠? 이를 위해 필요한 모듈이 바로 Retriever (검색) 기능입니다.

RAG에서는 DPR 방식을 Retriever로 사용합니다. 간단히 핵심만 짚어보면 Encoder Only 모델의 대표격인 BERT를 사용해 문장을 Vector Representation으로 표현해준다는 겁니다. 이때 Document와 Query를 Embedding 해주는 BERT는 각각 다른 파라미터를 사용합니다. 즉 Document용 BERT인 BERTd와 Query용 BERT인 BERTq가 존재하는거죠. 이제 Document는 적당히 크기로 분할하여 BERTd를 사용하여 Embedding해 줍니다. 이렇게 만들어진 Output이 d(x)에 해당합니다. 마찬가지로 Query는 BERTq에 의해 q(x)로 Embedding 됩니다.

이제 이 많은 Document Vector인 d(x)에서 Query Vector q(x)와 비슷한 Vector들을 찾아야 하는데요. 이때는 단순하게 Nearest Neighbor 방식을 사용합니다. N개의 Document Vector들과 Query Vector의 거리를 비교해서 가장 가까운 k개를 선택하는거죠. 이렇게 선택된 k개의 Document Vector들은 최종 대답을 위해 활용할겁니다.

2-2. Vector Concatenation

이제는 이렇게 찾은 k개의 Document Vector를 어떻게 활용할지 고민해봐야 하는데요. RAG에서는 단순히 합쳐(Concat) 해줍니다. 위 그림에서 보면 Document Vector와 Query Vector를 Concat하여 하나로 합쳐준 모습을 볼 수 있습니다. 이렇게 합쳐준 한 덩어리의 Vector는 최종적으로 Generator에 입력으로 들어가 원하는 대답을 생성해줄겁니다.

이때 Document Vector는 k개를 찾았잖아요. 그럼 최종 출력은 k+1개의 Vector를 Concat해 줄까요? 그렇지 않습니다. 각각의 Document Vector와 Query Vector를 Concat해 줄겁니다. 그럼 총 k덩어리의 Vector가 생기겠죠. 최종적으로는 이 k개의 Vector 덩어리들 중, 한개 덩어리만을 사용해야 하는데요. 그 한개는 어떻게 고를까요?

Loss를 계산해서 가장 Loss가 적게 나오는 덩어리를 고를겁니다. 생각해보면 일리가 있어요. 당장 계산을 해보니 Loss가 작다는 말은, 이 정보를 활용해서 대답했을 때 내가 원하는 대답에 가장 가깝다는 의미가 되니까요.

2-3. Generator

자, 이제 k개의 Vector 덩어리들 중에서 하나의 덩어리만 선택했습니다. 이 Vector 덩어리는 Query, 그리고 Query와 가장 관련있는 Document 조각이 포함된 정보죠. 이제 이 정보를 활용해서 우리가 원하는 대답을 해야 할 차례입니다. 아까 예시로 든 ‘대한민국의 수도는 어디야?’ 라는 질문에 ‘대한민국의 수도는 서울입니다.’ 라고 대답을 해야 하는거죠. 이렇게 대답을 하기 위해서는 Text를 입력으로 받아 Text로 답변을 해주는, LLM이 필요하겠죠. RAG에서는 이 LLM으로 Pretrained BART를 사용합니다.

정리를 해 보면요, Generator 역할을 하는 친구는 Pretrained BART입니다. 그리고 이 BART는 Query, 그리고 이 Query랑 가장 관련있는 Document 조각을 입력으로 받습니다. 그리고 출력은 우리가 원하는 대답, 즉 Ground Truth를 출력으로 내어야 합니다.

2-4. Training

이렇게 원하는 대답을 출력하도록 만들기 위해서는 어쨌든 누군가는 학습을 통해 파라미터를 수정해줘야 하는데요. RAG에서는 Query BERT인 BERTq와 Generator인 BART만 Fine Tuning 해줍니다. 이때 우리는 모델이 무엇을 학습해야 하는지에 대한 Ground Truth, 즉 원하는 대답을 정답지로 주었습니다. 하지만 이러한 대답을 하기 위해서 어떤 ‘Document 조각’을 참고해야 하는지에 대한 정보는 주지 않았습니다. 즉 Direct Supervision 없이 학습했다는 말이죠. RAG의 모델들은 이렇게 Document의 어느 부분을 참고해야 하는지에 대한 직접적인 Ground Truth 없이, 그저 어떠한 입력이 들어왔을때 주어진 외부 데이터를 참고해서 어떻게 대답해야 하는지만 학습합니다.

이때 저자들은 크게 두가지의 Loss 구성 방법을 제안합니다.
첫 번째는 RAG-Token 방식입니다. 이는 일반적인 Autoregressive 방식과 동일하다고 보시면 됩니다. 주어진 입력 정보에 대해 원하는 대답을 Token 단위로 Loss를 계산해줍니다. 수식으로는 이렇게 표현됩니다.

그림2. RAG-Token Loss
그림2. RAG-Token Loss

모든 i에 대해 Loss를 구해서 더해주는 모습을 볼 수 있죠.
두 번째는 RAG-Sequence 방식입니다. 이는 RAG-Token 방식과 달리 Token별로 Loss를 계산하지 않고, 그저 주어진 입력 정보에 대해 내가 원하는 Sequence의 문장을 내도록 Loss를 계산해줍니다. 수식으로는 이렇게 표현됩니다.

그림3. RAG-Sequence Loss
그림3. RAG-Sequence Loss

RAG-Token 방식과 달리 y가 나올 확률을 구하는 모습을 볼 수 있습니다.

여기까지 RAG의 작동 방식에 대해 정리해보겠습니다. 우선 RAG는 Retrieval Based Model입니다. 외부 데이터를 활용하기 위해 ‘검색’ 이라는 아이디어를 도입한 방식이죠. 우선 입력 Query와 비슷한 정보를 Document로부터 찾아내야 하는데요. 이러한 기능을 수행하는 모듈을 Retriever라고 불렀습니다. 그리고 이를 위해 Query와 Document는 각각의 BERT 모델로 Embedding해 주었죠. 이렇게 나온 Embedding들은 Nearest Neighbor 방식으로 가장 유사한 Vector들을 찾아냈습니다. 이렇게 찾아낸 Document Vector 조각들은 Query Vector들과 합쳐주었어요. 그리고 이렇게 합쳐진 Vector 덩어리를 Generator가 입력으로 받아 최종 답변을 생성해냈죠. 이때의 Generator 모델로는 BART를 사용했습니다. 이렇게 원하는 대답을 하도록 Supervised Loss로 학습해주었고, 학습은 Query BERT와 Generator만 진행해주었습니다.

3. Experiments

이렇게 구현한 RAG는 외부 데이터를 얼마나 잘 활용해서 대답할까요? 이번 챕터에서는 RAG를 사용한 실험 결과를 살펴보겠습니다.

3-1. Open Domain Question Answering

먼저 Open Domain Question Answering 실험 결과를 살펴보겠습니다. 이번 실험에서는 네 가지 데이터셋을 사용할건데요. NA(Natural Questions), TQA(TriviaQA), WQ(Web Questions), CT(CuratedTrec)입니다. 실험 결과는 다음과 같습니다.

그림4. Open Domain Question Answering 실험 결과
그림4. Open Domain Question Answering 실험 결과

위 표는 네 가지 데이터셋에 대한 다양한 방법들의 성능을 비교해주고 있습니다. 먼저 Closed Book 방식은 외부 데이터를 활용하지 않고 기존 LLM으로 대답을 했을때의 성능을 보여주고 있습니다. 당연히 외부 데이터를 활용하지 않으니 가장 성능이 안좋을 것이구요, Baseline 성능이라고 볼 수 있습니다. 다음으로 REALM, DPR 등 기존 Retrieval Based Model들의 Open Book 성능을 보여주고 있는데요. 이들 모델은 RAG랑 비교 대상이라고 할 수 있습니다. 결과를 보면 RAG가 대부분의 데이터셋에서 REALM, DPR 등 기존 Retrieval Based Model들보다 좋은 성능을 보여주고 있습니다.

3-2. Generation and Classification Test

다음은 Generation과 Classification 성능을 살펴보겠습니다. 이번에는 세 가지 데이터셋에 대해 실험을 진행했습니다. 먼저 Jeopardy 데이터셋은 Jeopardy라는 tv 퀴즈쇼에서 파생된 질문과 답변들로 구성되어 있습니다. 두 번째로 MSMARCO 데이터셋은 실제 Bing 검색 엔진의 사용자 쿼리와 이에 대한 답변들로 구성되어 있습니다. 세 번째로 FVR 데이터셋은 Fact Verification 데이터셋으로 입력 받은 내용의 진위 여부를 Classification 하는 문제입니다. 이들 데이터셋에 대한 실험 결과는 다음과 같습니다.

그림5. Generation and Classification 실험 결과
그림5. Generation and Classification 실험 결과

비교 모델로는 각 데이터셋 별 SOTA 모델들이 있습니다. 그리고 외부 데이터를 활용하지 않은 방식인 BART가 있습니다. 결과를 보면 각 데이터셋별 기존 최고 성능 모델들인 SOTA에는 못미치고, 외부 데이터를 활용하지 못하는 BART보다는 좋은 성능을 보여줍니다.

4. 의의

지금까지 RAG 논문의 주요 내용을 살펴봤습니다. RAG가 어떻게 동작하는지 방법을 모듈별로 자세히 살펴봤구요. 실험 결과를 통해 기존 LLM들 뿐만 아니라 Retrieval Based Model들과의 성능 비교를 통해 외부 데이터를 잘 활용한다는 점을 밝혔습니다. 이러한 내용을 바탕으로 RAG의 의의를 정리해보면 다음과 같습니다.

첫 번째 의의는 지식 기반 질문에 대한 새로운 접근 방식 제시했다는 점입니다. RAG는 외부 지식을 검색하고 이를 생성 과정에 직접적으로 통합하는 새로운 방식을 제시합니다. 이 접근 방식은 모델이 주어진 질문에 대해 더 정확하고 상세한 답변을 생성할 수 있도록 하며, 지식 집약적인 질문에 대한 답변 생성에서 기존 모델을 뛰어넘는 성능을 보여줍니다.

두 번째 의의는 검색과 생성의 통합을 통한 성능 향상했다는 점입니다. RAG는 검색과 생성을 긴밀하게 통합하여, 검색된 문서의 정보를 답변 생성에 직접적으로 활용합니다. 이러한 통합은 모델이 질문과 관련된 외부 지식을 효과적으로 활용하고, 이를 바탕으로 보다 정보에 기반한 답변을 생성할 수 있게 합니다. 이는 지식 집약적인 NLP 작업에서 모델의 성능을 향상시키는 중요한 요소입니다.

세 번째 의의는 NLP 작업에 대한 새로운 가능성 개척했다는 점입니다. RAG 모델은 지식 집약적인 자연어 처리 작업뿐만 아니라, 다양한 NLP 작업에 적용될 수 있는 새로운 가능성을 제시합니다. 예를 들어, 질의응답(QA), 요약, 팩트 검증 등의 작업에서 RAG 모델을 활용하여 모델의 성능을 향상시킬 수 있습니다. 이는 NLP 분야에서 모델의 활용 범위를 넓히고, 보다 복잡한 문제를 해결할 수 있는 새로운 방법론을 제공합니다.

네 번째 의의는 NLP 모델의 지식 활용 능력을 강화했다는 점입니다. RAG는 모델이 외부 지식을 검색하고, 이를 답변 생성에 활용하는 방식을 통해, 모델의 지식 활용 능력을 강화합니다. 이는 모델이 기존에 학습한 데이터에서만 습득한 지식을 넘어서, 실시간으로 업데이트되는 외부 지식을 활용할 수 있게 하여, 모델의 유용성과 실용성을 높입니다.

다섯 번째 의의는 Hallucination 문제에 대한 해결 방안을 제공했다는 점입니다. RAG 모델은 검색된 문서의 정보를 기반으로 답변을 생성함으로써, 생성된 답변에서의 사실과 다른 정보의 생성(Hallucination) 문제를 줄일 수 있는 잠재력을 가집니다. 이는 NLP 모델의 정확성과 신뢰성을 높이는 데 기여할 수 있습니다.

결론적으로, RAG 논문은 NLP 분야에서 모델의 지식 활용 능력을 향상시키고, 보다 정확하고 상세한 답변을 생성할 수 있는 새로운 방법론을 제시함으로써, 지식 기반의 자연어 처리 작업에 대한 새로운 가능성을 열어주었습니다.

5. 마치며

RAG(Retrieval-Augmented Generation) 모델에 대한 논의를 마무리하며, 이 연구가 자연어 처리(NLP) 분야에 미친 영향과 그 의미를 다시 한번 되새겨 보고자 합니다. RAG 모델은 기존의 언어 모델이 직면한 중요한 도전 과제 중 하나인 외부 지식의 활용 문제에 대한 혁신적인 해결책을 제시했습니다. 이 모델은 검색 기반의 정보 통합을 통해, 모델이 보다 광범위한 지식을 활용하여 복잡한 질문에 답변할 수 있도록 합니다. 이러한 접근 방식은 지식 집약적인 질문에 대해 더 정확하고 상세한 답변을 생성하는 데 기여하며, NLP 모델의 이해력과 생성 능력을 크게 향상시킵니다.

본 논문에서 수행된 실험들은 RAG 모델이 기존의 대규모 언어 모델들과 비교하여 외부 데이터를 더 효과적으로 활용하며, 적절한 대답을 생성할 수 있음을 입증했습니다. 이는 RAG 모델이 지식 기반의 추론과 답변 생성에서 새로운 기준을 설정했음을 의미합니다. 또한, RAG 모델은 Hallucination 문제를 줄이는 데에도 기여할 수 있는 잠재력을 가지고 있으며, 이는 모델의 신뢰성과 정확성을 높이는 데 중요한 요소입니다.

RAG 모델의 개발은 NLP 분야에서 모델의 지식 활용 능력을 강화하고, 보다 복잡한 자연어 이해 및 생성 작업을 수행할 수 있는 새로운 방향을 제시합니다. 이 연구는 향후 지식 기반의 NLP 작업에 대한 연구와 개발에 중요한 영감을 제공할 것이며, 모델의 지식 통합 방식을 개선하고자 하는 다양한 시도에 기초가 될 것입니다.

결론적으로, “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks” 논문은 NLP 분야에 있어 중요한 이정표로, 모델이 외부 지식을 활용하는 방식을 혁신적으로 개선함으로써, 지식 기반의 자연어 처리 작업의 가능성을 크게 확장했습니다. RAG 모델의 개발은 앞으로도 계속되는 연구와 개선을 통해, NLP 모델의 이해력과 생성 능력을 더욱 발전시킬 것으로 기대됩니다.

6. 참고 자료

  1. RAG 논문
  2. GPT-1 논문 리뷰
  3. BERT 논문 리뷰
Series Navigation<< [22′ NeurIPS] Chain-of-Thought Prompting Elicits Reasoning in Large Language Models[23′ ICLR] Self Consistence : SELF-CONSISTENCY IMPROVES CHAIN OF THOUGHT REASONING IN LANGUAGE MODELS >>
5 3 votes
Article Rating
Subscribe
Notify of
guest
4 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
WJH
WJH
21 days ago

깔끔한 글이네요. 정말 잘 읽었습니다!
이런 좋은 글에 코멘트 하나 없는게 아쉽네요..

추가로 질문하나 있습니다. LangChain을 활용한 RAG 구현을 알아보던 중에 이 글을 읽게되었는데요. 설명하신 바로는 RAG는 Question Query가 사전에 준비되어있어야하고 이를 학습해여야되는 것으로 보입니다.

  1. Document에서 Embedding하는 BERT는 Frozen되어 있으면 Question에 의한 BERT weight만 업데이트 진행한다는 것이 좋은가?에 대한 의문입니다. 가장 Loss가 적은 Embedding을 선정하여 질문에 응답하는 방식인데, 모든 Document Embedding Token의 Loss의 합이 제일 작은 질문을 잘만들게되어 전체적인 성능이 떨어지지 않을까 싶습니다. 이에 의견을 듣고 싶습니다.
  2. LangChain을 활용하려는데 말씀하신 과정이 보이지 않아서 혼란입니다. RAG-prompt를 받게끔 동작은 하지만 학습을 진행하는 과정이 보이지 않는데 혹시 이부분에 대해서 알고 계신게 있을까요?

좋은 글 잘 읽었습니다! 감사합니다.

binance
binance
13 days ago

Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.

4
0
Would love your thoughts, please comment.x
()
x
Scroll to Top