기존에 작성하였던 RAG 논문리뷰 포스트를 통해 RAG의 기본적인 지식 및 이해를 하였다. 그러나 2020년에 나온 논문이며, 발전된 모델에 대해서 공부하고, 모델의 구조에 대해 완벽하게 이해되었다고 생각하지 않아, 추가적으로 해당 Survey 논문을 읽어보게 되었다. 해당 논문을 통하여 기존에 공부하였던 Naive RAG에서 더 나아가, Advanced RAG, Modular RAG까지 공부하고자 한다.
Retrieval-Augmented Generation for Large Language Models: A Survey
1. Abstract
LLM(Large Laguage Model)은 많은 분야에서 뛰어난 성능을 보이고 있지만 다음과 같은 3가지 문제점을 가지고 있다.
- hallucination : 환각
- out-dated knowledge : 시간이 지나 의미없는 지식
- non-transparent : 전이 불가능
- untraceable reasoning : 근거 제시 불가능
따라서 RAG는 외부 지식과 결합하여 지식의 지속적인 업데이트를 가능하게 하고, domain-specific 데이터와의 결합을 가능하게 한다.
해당 논문에서는 RAG의 패러다임의 과정인 Naive RAG, Modular RAG, Advanced RAG 3가지 모델에 대해서 설명하고
또한 RAG의 중요 3가지 요소인 retrieval, generation, augmentation technique을 제시한다.
마지막으로 RAG가 직면하고 있는 문제와, multi-modalities, RAG infrastructure에 대한 의견을 피력한다.
2. Introduction
최근에 개발된 LLM 모델에 해당하는 GPT 시리즈(OpenAI), LLAMA(META), Gemini(Google) 가 NLP 분야에서 보이고 있는 성능은 매우 뛰어나다. 다양한 분야의 benchmark를 포함하는 Dataset인 Super-GLUE [Wang et al.,2019], MMLU [Hendrycks et al., 2020], BIG-bench [Srivastavaetal.,2022] 에서 매우 높은 성능을 보여주고 있다.
그러나 실제 모델에서 여전히 부정확한 정보 또는 hallucination 문제점을 직면하고 있다. 따라서 LLM이 세상의 정보를 제시하기 위해서는 여러가지 보호 장치가 필요하다. 이를 해결하기 위한 방법으로 RAG을 사용할 수 있다.
RAG 를 이용하여 question answering, generating하기 이전에 external dataset으로 부터 필요 정보(retrieved evidence)를 검색하여 답변의 정확성과 연관성을 높인다. 따라서 기존에 LLM이 가지고 있던 부정확한 정보 또는 hallucination을 해결할 수 있다. 이러한 기술은 챗봇 또는 더욱 발전된 LLM에 핵심적인 요소로 자리매김할 수 있다.
GPT4의 내부 구조가 알려지지 않았지만, 추측컨데 내부적으로 RAG기술이 이미 도입되어 prompt 과정에서 처리되고 있다고 생각한다.
ChatGPT개발 이전에 RAG의 발전속도는 지체되었으나, ChatGPT에 의해 LLM의 발전이 가속화되면서, 향상된 제어력을 얻음과 동시에 변화하는 요구사항에 대응하기 위해 RAG를 이용한 정보의 추론에 집중하였다. 특히 GPT-4가 개발되면서, RAG의 장점과, fine-tuing을 결합한 hybrid 접근법에 집중하였다.
RAG연구의 빠른 성장에도 불구하고, 체계적이고 추상화가 부족한 상태이다. 이를 해결하기 위하여 해당 논문에서는 세부 구조와, 추후 연구진행 방향에 대해 구체적으로 제공한다. 추가적으로 RAG의 장점과 단점에 대해서도 기술을 한다.
결론적으로 해당 논문의 point는 다음과 같다.
1. LLM 모델에 따른 RAG의 SOTA model 들에 대해 설명한다.
2. RAG process의 핵심요소인 Retrieval, Generator, Augmentation에 대해 설명한다.
3. 측정 지표에 따라 RAG가 다른 fine-tuning approach와 비교한다.
4. 현재 문제를 해결하기 위한 추후 RAG의 연구 방향성을 제시한다.
3. Definition
Figure 2는 RAG의 작동예시를 표현하고 있는 그림이다. $ChatGPT$는 사람들이 가장 많이 사용하는 LLM중 하나이지만, 최신 데이터에 대해서 학습이 되지 않았기에 한계점을 보이고 있다. 이를 해결하기 위해 RAG를 이용하여 최신 기사를 검색하고, 이를 Generation과정에 추가하여 사용자가 원하는 답변을 생성해주고 있다. 해당 그림을 통해 real-time information에 대한 답변도 가능하다는 것을 제시하고 있다.
RAG에 있어 중요한 질문 3가지가 있다.
1. What to retrieve
무엇을 검색할지에 대한 답변이다.
- simple token
- entity retrieval : 검색에 해당하는 document 전체
- chunk : complex structure인 해당 문장 덩어리
- knowledge graph : data structure 형태로 저장되어있는 형식
$Coarse\ Granularity$ (추상적 정보)의 경우 정확성은 떨어지지만, 더 많은 정보를 가져오며, $Struct Text$ 의 경우 효율적이진 않지만, 더욱 많은 정보를 가져온다.
2. When to retrieve
언제 검색해야하는지에 대한 답변이다.
- single
- adaptive
- multiple
더 자주 정보를 가져올 경우 (high frequency) 정보는 많지만, 효율성은 떨어진다. 더 적게 정보를 가져올 경우 (low frequency) 효율성은 좋지만, 정보가 적다.
3. How to use
검색한 데이터를 어떻게 사용해야할지에 대한 답변이다. 다양한 과정에서 사용되는 연구가 진행중이다.
- input
- intermediate
- output
$intermediate$ 와 $output$ 방식이 더욱 효과적이나, 학습이 필요하여 효율적이지 않다는 단점이 있다.
최근 RAG의 paradigm의 경우 knowledge base로 많이 넘어가고 있다. user의 prompt를 search algorithm을 이용하여 도움이되는 문장을 더욱 효과적으로 찾고, prompt에 결합되어 생성되는 과정에 영향을 준다.
RAG의 가장 큰 장점은 특정 task에 대한 답변을 내기 위해서 새롭게 retraing을 할 필요가 없다는 점이다. 오직 external knowledge repository를 추가하고, input에 해당 정보를 추가해주면 된다.
4. RAG Framework
Naive-RAG는 기존 LLM에 비해 더욱 성능이 뛰어나며, 비용이 절약되지만, 여러가지 단점을 가지고 있었기에, 이를 극복하기 위해 Advanced-RAG와 Modular-RAG 가 등장하였다.
4-1. Naive RAG
1) Indexing : 데이터를 처리하는 과정
PDF, HTML, Docx, 마크다운등을 standard text로 바꾸는 과정이다. 해당 과정에서 language model 에 맞추기 위해 chunk size에 맞추어 쪼갠다. 이후 embeding 과정을 통하여 vectorize 한다. 결과적으로는 문장 chunk 와 vector로 key-pair 형태로 index된다.
2) Retrieval : 검색 과정
사용자로 부터 입력 받은 Query를 document를 vectorizing 할때와 동일한 embeding 모델을 사용하여 비교한다. 이후 simmilarity score을 통하여 가장 유사한 top K 개의 chunk를 검색한다. 이는 사용자 질문과의 유사성을 대변한다.
낮은 정밀도로 인해 검색된 문장이 정렬되지 않거나, 중간중간 누락되는 정보가 발생할 수 있다. 또한 outdated 정보가 검색될 수도 있다.
3) Generation : 생성 과정
검색한 정보를 종합하여 답변을 생성한다. 상황에 따라 기존 pre-trained 된 지식을 사용하지 않고, retrieve된 정보만을 가지고 생성한다. mult-turn 의 지원을 위하여 이전 대화를 추가하기도 한다.
검색된 내용을 기준으로 만들어진 것이 아닌, hallucination 된 문장이 만들어질 수도 있다.
이외에도 augmentation 과정에서도 효율적으로 정보들을 결합해야하는 문제점에 직면한다. 특히나 중복되는 정보에 대해서 어떻게 처리를 해야하는지 중요하다. 여러 문서가 동일한 비슷한 정보를 가지고 있을 경우 어떻게 대처해야할지도 문제이다.
4-2. Advanced RAG
Advanced RAG는 기존 Naive-RAG의 Retrieval 에서 가지고 있었던 문제점을 해결하기 위해 Pre-Retrieval과 Post-Retrieval을 도입한다. indexing 하는 과정에서 sliding window, fine-grained segmentation, metadata 방법을 추가로 도입한다.
1) Pre-Retrieval
해당 process가 추가되는 이유는 검색되는 data 인 index의 quality를 높여주기 위함이다. 해당 과정에서 사용되는 방법으로 enhancing data granularity, optimizing structure, adding metadata, aligment optimization이 있다.
- $Enhancing\ data\ granularity$ : text standardization, consistency, factual 을 증가시켜주기 위함이다. 이를 위해 상관없는 문장을 제거하고, 문장의 모호성을 제거하고, 문장의 사실관계를 검토한다. 또한 가장 최신의 데이터로 update한다.
- $Optimizing\ index\ structure$ : 관련 문맥을 파악하기 쉽게 하기 위해 크기를 조정하고, graph structure을 통해 문맥의 정보를 파악한다.
2) Retrieval
RAG는 Document에서 검색을 하기 위해 Embedding된 document와 Query와 비교를 진행한다. 보다 효과적인 검색을 위해 다음과 같이 2가지 방법을 추가적으로 제안한다.
- $Fine-tuning\ Embedding$ : domain-specific context를 검색하기 위해 embedding model을 customizing한다. 기존 BERT embedding model을 사용하는 것이 아닌 BGE embedding model [BAAI, 2023]을 사용하며, fine-tuning하기 위한 Training Data로는 GPT3.5-turbo 와 같은 모델을 사용하여 document에 해당하는 chunk를 만들어낸다.
- $Dynamic\ Embedding$ : Static Embedding의 경우 각각의 단어에 대해 single vector을 사용한다. 하지만 Dynamic Embedding의 경우 BERT와 ChatGPT와 같이 동일한 단어임에도 불구하고 주변 문맥을 고려하여 해당 단어에 vector 값을 부여한다.
3) Post-Retrieval
만약 Retrieval 과정에서 유의미한 문서를 찾았다면, 해당 내용을 합치는 과정이 필수적이다. 왜냐하면 context window에 limit이 존재하기 (특정 단어를 처리하는 데 사용되는 문맥의 범위를 제한하는 데 사용되는 매개변수나 제약) 때문이다. 만약 그대로 집어넣는다면, context window를 초과할 것이고, 데이터의 noise가 증가할 것이며, 중요한 정보의 핵심을 가릴 것이다. 따라서 검색된 문서의 후처리는 필수적이다.
- $Re-Ranking$ : Query와 연관된 문서들을 다시한번 Re-Ranking하는 과정은 매우 중요하다고 한다. 이러한 기술들을은 Llamaindex, Langchain, HayStack에서 사용되었다.
- 예시1) Diversity Ranker에서는 document의 다양성에 따라 Ranking을 재정립하였다.
- 예시2) LostInTheMiddleRanker의 경우는 best document을 context window의 가장 앞과 뒤에 배치하였다.
- 예시3) cohereAI rerank, bge-rerank, LongLLMLingua 의 경우 검색되어있는 문서들 중 Query와 semantic similarity(의미적 비교) 을 기반으로 새롭게 비교 하였다.
- $Prompt\ Compression$ : 검색된 document의 noise는 RAG의 성능에 굉장히 많은 영향을 미친다. 따라서 불필요한 문맥은 지우고, 중심 문장은 강조하며, 전체적인 context의 길이는 압축시킨다.
4-3. Modular RAG
Modular RAG의 경우 기존 RAG에 비해 훨씬 다양하고, 다재다능하다. Modular RAG의 경우 search module을 추가적으로 적용하고, retrieval에 Advanced RAG와 같이 fine-tuning방법을 적용한다. Modular RAG의 경우 RAG의 표준이다.
다음은 3가지 RAG에 대한 설명이며, 각각 더 거대한 RAG 모델과의 상속 관계에 있다.
1) New Modules
- $Search\ Module$ : 기존의 유사도를 바탕으로 검색했던 search와 다르게, 구체적인 scenario를 검색하는 과정이다. 조금더 구체적으로 설명하면, 기존은 embedding vector을 바탕으로 유사성을 판단하였다면, Search Module은 검색 엔진, 지식 그래프, 테이블 데이터, 텍스트 데이터를 이용하여 직접 찾는 방식이다.
- $Memory\ Module$ : 기억 메모리를 사용하여 가장 유사한 질문 기억과 비교한다. 나왔던 답변을 같이 이용하여 반복적으로 학습을 진행한다. 결론적으로는 데이터의 분포와 유사하게 답변이 나오게 된다.
→이해하기 어려울 수 있겠지만, 기존에 했던 답변을 통하여 가장 올바른 문서를 검색할때까지 반복하여 학습하는 것 같다. - $Fusion$ : 기존 사용자의 Query를 LLM을 이용하여 Multi-Query로 만들어, 사용자 Query에서 더 많은 정보를 추출할 뿐만 아니라, 지식의 확장까지 진행한다.
기존 Original Query를 이용해서 document retrieve를 하여 Ranking을 매긴 다음, 두번째 Multi-Query를 이용하여 Re-Ranking을 진행한다. 이는 더 통찰력 있고, 관련성이 높은 문서를 선택할 수 있다. - $Routing$ : LLM이 Query를 분석하여 정확히 어떠한 형태의 data를 원하는지 선택한다. 예를들어 어떠한 답변에는 knowledge-graph 형태의 data가 답변에 가장 정확할 수 있으며, different domain, 언어, 포멧을 미리 결정한다. 이뿐만 아니라, 구체적인
→즉 Query로 index의 범위를 제한해주는 개념이라고 이해! -
$Predict$ : Predict Module에서는 retrieved content에서 불필요한 정보만 있을 때, LLM 이용하여 답변을 생성한다.
- $Task\ Adapter$ : down stream에 RAG를 적용하기 위한 과정이다.
2) New Patterns
Modular RAG은 기존에 보았던 Naive RAG와 Advanced RAG와 다르게, 특정한 문제를 해결하기 위해 modules들을 대체하거나 재조정하여 RAG의 성능을 최대화 한다. 조금더 구체적으로 설명하자면 Naive RAG 와 Advanced RAG는 fixed 된 Module 형태를 가진다. 예를들어 Advanced RAG의 경우 Retrieve, Re-Write, Re-Write, Read module이 있다. Modular RAG는 자유롭게 형태의 변경이 가능하며 이를 통하여 task에 대하여 범용성있으며 성능을 높일 수 있다.
자유롭게 형태를 변경하기 위해 다음과 같이 크게 2가지 연구가 대세다.
- adding or replacing modules
- adjusting the organizational flow between modules
module을 자유롭게 변경한 연구로는 Generate-Read [Yu et al., 2022] 연구가 있다. 해당 연구에서는 retrieval 모듈 자리에 검색 모듈이 대신한다. Recite-Read [Sun et al., 2022] 에서는 external retrieval 모델을 weight retrieval로 변경한다. 이는 LLM이 task-specific 정보를 가지고 있는 상태에서 knowledge-intensive natural language processing task를 생성한다.
다음과 같이 모듈을 바꾸는 이유는 무엇일까? 물론 위에 범용성 있으며, 성능을 높일 수 있다고 작성하였다. 하지만 보다 자세하게 설명하자면, 효율성을 증진시키고 information의 quality를 높이기 위함이다.
다음과 같은 목표를 달성하기 위해서는, retrieval step을 정의하고, 과거에 발생하였던 오류에 대해 수정하고, 유연한 quey strategies와, embedding similarity를 극대화 해야한다.
다음과 같은 목적을 달생하기 방식들로는 다음과 같다.
- $Hybrid\ Search\ Exploration$ : keyword-based search, semantic(의미적) search, vector-search를 모두 포함한다. 다음과 같은 요소들을 결합하여 검색 내용을 풍부하게 한다.
- $Recursive\ Retrival\ and\ Query\ Engine$ : 의미를 더욱 상세히 파악하기 위해 작은 단위로 재귀적으로 검색을 진행한 이후, LLM을 이용하여 더 큰단위로 검색을 진행한다.
- $StepBack-prompt$ : 의 경우 세부적인 것에 집중하지 않고, 더 넓은 범위에서 검색을 진행한다. [Zheng et al., 2023] 역방향 프롬프트를 사용하여 비약적인 성능 향상을 이끌어 냈다. 이를 통하여 question-answering process 와 generating response 또한 늘렸다.
→역방향 프롬프트란? 일반적인 프롬프트는 질문-응답이지만 역방향 프롬프트의 경우 해당 답변을 하도록 질문을 생성하는 방식이다. - $Hypotheical\ Document\ Embeddings$ : HyDE [Gao et al., 2022] 에서는 직접적인 질문을 가진 document를 찾는 대신 모든답변과 유사한 문서들을 찾아 정보를 종합하여 최종적인 답변을 만들어낸다. 이를 하기 위해 모든 document를 벡터공간에 매핑한다. 하지만 우리가 실제로 원하는 성능의 답변은 나오지 않을 수 있다.
5. Retrieval
RAG은 document로 부터 정보를 검색하여 사용자에게 정보를 제공하기에 효율적인 retrieval은 매우 중요하다.
Retrieval에서 고려되는 가장 큰 3가지 질문은 다음과 같다.
- 정확한 의미를 어떻게 파악할 것인가?
- document와 query의 의미 공간을 구성하기 위해 어떠한 방법을 사용할 것인가?
→여기서 말하는 의미 공간이란, 의미의 비교를 위해 vector공간과 같이 비교할 수 있는 embedding 값으로 치환하는 과정을 얘기한다. - 검색된 요소들이 LLM의 input에 효율적으로 들어가기 위해 어떠한 형태여야 하는가?
5-1. Enhancing Semantic Representation
의미론적 표현이 중요한 이유는 각 chunk의 검색을 하기 위해서는 의미론적 표현이 중요하기 때문이다.
가장 먼저 해야할 일은 Chunk의 사이즈를 어느 정도로 해야할지 결정하는 것이다!
1) Chunk Optimization
externel dataset에 존재하는 chunk를 작은 단위로 쪼개야 한다. 작고 균일한 정보로 되어있어야, 의미를 보다 섬세하고 균일하게 이해할 수 있기 떄문이다 (해당 논문에서는 fine-grained로 표현한다). 그렇다고 너무 작아서도 안되고, 너무 커서도 안된다. 각 embedding model에 맞는 크기를 사용하거나, 사용자의 질문 의도, content의 형식에 맞게 크기를 맞추어야 한다.
특정 content에 best한 chunk size는 존재하지 않는다. 각 모델이나 목적에 맞게 크기가 다르다.
chunk optimization을 위해 다양한 연구가 진행되고 있다. 다음과 같은 방식들이 있다.
- $Sliding\ Window\ Technology$ : window size 단위로 검색을 진행하여 검색한 정보를 merge 하여 검색 성능을 높이는 과정이다.
- $Small2Big$ : 말 그대로 작은 단어 먼저 검색후 큰거 검색하는 방법이다.
- $Abstract\ Embedding$ : 글 전체를 이해한 내용을 바탕으로 검색을 진행하는 방식이다.
- $Meta\ Data\ Filtering$ : metadata를 이용하여 검색을 진행하는 방식이다.
- $Graph\ Index\ Technique$ : node 간의 연결관계를 바탕으로 검색하는 방식이다.
다음과 같은 결과는 retrieval 에서 큰폭의 발전을 가져왔다.
이제 어느정도로 Chunk의 사이즈로 해야할지 결정했다면 이러한 Chunk를 Embedding해야 한다!
2) Fine-Tuned Embedding Models
embedding이 중요한 이유는 chunk를 모델이 이해할 수 있게 하는 과정이기 때문이다.
AngLE, Voyage, BGE [Li and Li, 2023, VoyageAI, 2023, BAAI, 2023] 의 연구들은 pre-trained embedding 모델로써 범용성은 가지고 있으나, specific domain에 대해서는 제한된다.
따라서 Task Specific을 만족시키기 위해 embedding model 에 대하여 fine-tuning은 필수적이다.
- $Domain\ Knowledge\ Fine-Tuning$ : 해당 방법에서는 domain-specific dataset을 이용하여 모델을 학습시킨다. 평범한 fine-tuning과는 다르게, query, corpus, relevant document로 학습시킨다. 따라서 모델은 query에 존재하는 corpus를 이용하여 relevant document를 찾아내도록 학습한다.
LlamaIndex [Liu, 2023] 은 embedding model fine-tuning을 이용한 대표적인 모델이다. - $Fine-tuning\ For\ Downstream\ Tasks$ : 해당 방법은 LLM을 이용하여 embedding model을 fine-tuning한다.
PROMPTAGATOR [Dai et al., 2022] 에서는 LLM을 이용하여 few shot query generator을 만들고, task-speicif generator을 만든다. 이러한 방법은 특히 데이터가 부족한 domain에서 효과적이다.
LLM-Embedder [Zhang et al., 2023a] 에서는 두개의 singal을 통해 fine-tuning을 진행하는데, data label로 부터 hard reward와, LLM으로 부터 soft reward를 받는다.
이러한 방식은 retrieval을 획기적으로 성능을 향상시켜주지만, 모든 LLM과 최적의 성능을 보이지 않는다. 따라서 LLM 피드백을 통하여 Fine-tuning을 진행하는 것도 또하나의 방법이다.
5-2. Aligning Queries and Documents
embedding은 사용자의 query와 document에 대해서 둘다 진행한다. 각각을 embedding하는 과정에서 동일한 model을 사용할 수도 있고, 서로 다른 embedding 모델을 사용할 수도 있다.
사용자의 입력 query는 검색을 하기에 내용이 불충분하거나, 의미가 불분명할 수 있다. 따라서 사용자의 입력 query를 그대로 사용해서는 안된다.
1) $Query\ Rewriting$ : query 와 document의 의미를 재정렬하는 방법이다.
- Query2Doc [Wang et al.,2023c], ITER_RETGEN [Shao et al., 2023]의 모델은 LLM이 Query에 대해 추가적인 guidance를 제공하도록 한다.
- HyDE [Gao et al., 2022] 의 경우 query vector을 생성하여 document의 핵심 pattern을 찾을 수 있도록 한다.
- RRR [Ma et al.,2023a] 의 경우 query의 re-writing을 통해 기존 retrieval과, reading 방법을 바꾸었다.
- STEP-BACKPROMPTING [Zheng et al.,2023] 은 LLM을 이용하여 추상적인 개념과, 하위의 구체적인 개념을 이해하고 이를 바탕으로 검색성능을 향상 시키는 방법이다. 또한 Multi-query로 나누어 동시에 검색할 수 있도록 한다.
2) $Embedding\ Transformation$ : Query를 rewriting하는 것이 아닌, embedding값 자체를 더욱 정확하게 제시하는 방법론이다.
- SANTA [Li et al., 2023d] 에서는 두가지 방법을 이용하여 embedding의 섬세함을 증가시킨다. structured data와 un-structed data를 이용하여 pre-traing을 진행하여 query를 structured data에 맞추어 structured data에 대한 검색 성능을 증가시킨다. 두번째 방법으로는 Masked Entity Prediction을 이용하여 BERT처럼 문장 전체에 대한 이해도를 높인다.
5-3. Aligning Retrival and LLM
RAG의 검색하는 과정에서는 hit-rate(document의 수) 보다 LLM의 specific requirement에 부합하는 정보를 찾는 것이 중요하다.
1) $Fine-Tuning Retrieval$
- ARR [Yu et al., 2023b] 연구에서는 retrieval을 encoder와 decoder을 이용하여 구현한다. 해당 과정에서는 FiD Cross Attention Score을 기준으로 LM에서 필요한 정보를 판단한다. 또한 retrieval에 대한 fine-tuning또한 가능하다.
다만 정보가 가장 많은 것을 찾는 것 보다는 읽을 수 있는 정보에 집중하는 경항이 있다고 한다. - REPLUG [shi et al., 2023] 연구에서는 retrieved document의 distribution에 대하여 KL Divergence를 사용하여 필요 정보를 판단한다. 따라서 cross-attention mechanism을 더이상 사용하지 않아도 되었다.
- UPRISE [cheng et al., 2023a] 연구에서는 LLM과 retrieval에 prompt-input 쌍을 입력받은다음, 점수를 바탕으로 fine-tuning을 진행한다.
2) $Adapter$
retrieval을 API를 이용해서 사용하거나, fine-tuning하기에 computing power가 부족할 수 있기에 Adapter을 사용한다.
- PRCA [Yang et al., 2023b] 연구에서는 token-base autoregressive strategy를 이용한다.
- The token filtering approach [Berchansky et al.,2023] 에서는 token의 cross attention score중 가장 높은 값만을 고려하여 선택한다.
- RECOMP [Xu et al., 2023a] 은 요약생성기를 제시한다.
- PKG [Luo et al., 2023] 에서는 generating하는 과정에 가장 유사한 document를 선별한다.
6. Generator
generator은 input 데이터(query, retrieval documents)를 바탕으로 사용자에게 제공하기에 RAG에서 매우 중요한 부분을 담당한다.
해당 부분에서는 post-retrieval 부분과, fine-tuning부분에 대해서 자세히 다룬다.
6-1. Post-retrieval with frozen LLM
최근의 많은 연구들은 GPT4같이 성능이 좋고, 내부 지식이 잘 정리되어있는 LLM 모델을 사용하여 진행되고 있다. 하지만 여전히 한계점이 존재한다.
- context length의 한계가 존재한다.
- 반복되는 단어에 취약성을 보인다.
다음과 같은 문제점을 해결하기 위해 post-retrieval 을 진행한다. 해당 과정에서는 검색한 document 들의 후처리로써, quality를 향상시킨다. 주된 작업으로는 information compression와, result reranking이 존재한다.
1) Information Compression
검색을 통해 얻어진 document 정보를 관리하는 것은 굉장히 어려운 과정이다. 많은 LLM 연구에서 input의 context length를 증가시키기 위해 많은 연구를 하고 있지만, 아직 한계점에 봉착하고 있다. 이에 따라 검색한 문서들에서 꼭 필요한 정보만을 정리한다. 주로 noise를 감소시키고, context length limitation을 만족시키고, 생성 effect를 증가시킨다.
- PRCA [Yang et al., 2023b] 에서는 정보 추출기를 제시한다. $S_{input}$ 에 대하여 가장 최적의 $C_{extracted}$ 를 예측한다.
- RECOMP [Xu et al., 2023a] 에서는 contrastive learning(대조학습)을 통하여 정보 추출기를 제시한다.
- Filter Reranker [Ma et al., 2023b] 에서는 SLM 이용하여 검색된 document의 수를 줄인다. 이를 reordering과정이라 설명한다.
2) ReRanking
Reranking 기법은 검색된 document들을 다룰때 최고의 방법이다. 가끔씩 추가 정보가 많이 들어올때 오히려 성능 저하가 발생되는 경우가 있는데, 이때 해당 기법이 효과적이다. 이는 context window문제를 해결하고, 검색 효율성과, 응답성을 향상시킨다.
예시 연구로는 [Zhuang et al.,2023] 이 있다.
6-2. Fine-Tuning LLM for RAG
LLM model 을 fine-tuning하는 이유는 자연스럽고, 사용자의 query에 맞게 검색된 문서를 효과적으로 제시하기 위함이다.
기존에 LLM은 사용자의 query 만 model의 input으로 들어갔지만, RAG에서는 retrieved document도 같이 input으로 들어간다.
Fine-Tuning을 해야하는 이유를 조금 더 깊게 생각해보면, input에 여러가지 정보가 동시에 들어가기 때문에 smaller model에 유용하며, target에 보다 근접하게 접근하기 위해서는 fine-tuning이 필수적이며 동시에 매우 효과적일 것이다.
1) General Optimization Process
General Optimization Process는 말그래도 일반적으로 fine-tuning을 하는 방식과 동일하다. input-output pair을 training dataset으로 하여 input $x$ 가 주어졌을때 documents $z$ 를 찾은 이후, output $z$ 를 출력하도록 학습한다.
Self-Mem [Cheng et al.,2023b] 에서 fine-tuning을 위해 2가지 방법인 Joint-Encoder와 Dual-Encoder이다.
- $Joint\ Encoder$ : input에 대해서 Encoding한 결과를 Decoding 과정에서 autoregressive manner 방식으로 진행한다.
여기서 autoregressive manner란, 자기회귀방식으로 이전에 생성된 자신의 토큰을 바탕으로 다음의 토큰을 예측하는 방식이다. - $Dual\ Encoder$ : 두개의 독립적인 encoder을 배치하고, input(query, context)와 document를 각각 encoding한다. output은 bidirectional cross-attention을 진행한다.
2) Utilizing Contrastive Learning
Fine-Tuning을 하기 위해서는 input-output pair을 만들어야 하는데, 이러한 과정 속에서 $Exposure\ Bias$ 가 발생할 수 있다. Exposure Bias(노출편향)은 자연어 처리에서 많이 발생하는 문제점이며, 이전 Token을 기반으로 다음 Token을 예측하는 과정에서 train data에 과하게 집중되어, 일반화의 문제점이 생기는 과정을 얘기한다.
이러한 문제점을 해결하기 위해 SURGE [Kang et al.,2023] 에서는 graph-text contrasive learning을 통해 over-fitting되는 문제점을 해결하였다.
7. Augmentation in RAG
7.1. RAG in Augmentation Stage
RAG의 성능을 높이기 위해 pre-training, fine-tuning 단계, language model training의 inference 단계에서 다양한 노력들이 있다.
1) Pre-training Stage
Pre-training 단계에서 QA model의 성능을 강화시키기 위해 다양한 모델들을 개발하였다.
Pre-training 단계에 RAG가 사용되었다는 것은 retrieved된 문서가 pre-training에 도움이 되었다는 얘기인것인가?
- $REALM$ [Arora et al., 2023] : pre-training 단계에서는 knowledge embedding을 위해 structured, interpretable method를 사용한다. fine-tuning 단계에서는 MLM(masked language model)을 사용하여 retrieve-then-predict의 성능을 향상시킨다.
REALM을 RAG의 보완된 후속 모델이라고 소개하는 사람들도 있는데, 오히려 RAG의 각 요소를 조금 개선한 수준이지, 새로운 아이디어를 접목한 것은 아닌 것 같다. - $RETRO$ [Borgeaud et al., 2022] : GPT에 비해 적은 parameter을 사용함에도 불구하고 비슷한 성능을 낼 수 있도록 하는 방법이다. External Dataset에 접근하여 필요한 정보를 덧붙임으로써 parameter가 25배나 차이나는 모델에 대해서도 동일한 성능을 도출하였다.
- $Atlas$ [Izarcard et al., 2022] : Atlas는 T5 model에 Retrieval을 추가하여 성능향상을 하였다.
- $COG$ [Lan et al.,2022] : COG는 pre-existing text로 부터 유사한 문장을 만들어내는 모델이다. 잘 찾아진 document가 존재한다면 효과적인 방법이다.
다음과 같은 연구들을 LLM에 retrieval mechanism이 pre-training할 때 큰 도움이 되며, 값비싼 LLM 모델에 정교한 retrieve 모델을 결합하였을 때 정확하고, 효율적인 모델을 만들 수 있다는 것을 시사한다. 기존 GPT 모델보다 task-specific performance가 뛰어나며, 적은 parameter로 성능을 낼 수 있으며, quality또한 높아진다.
이러한 방법을 적용시기키 위해서는 광범위한 데이터셋(Extensive Dataset) 이 필요하지만, 많은 연구들이 끊임없이 진행되고있다.
2)Fine-Tuning Stage
Fine-Tuning을 한다는 것은 retrieval이 정교하고 필요한 document를 찾음으로써 더 좋은 output을 만들어 낼 수 있도록 하며, Generation이 원하는 답변을 생성하여 만족스러운 output을 만들 수 있도록 한다. 두가지 요소를 증가시킴으로써, 모델의 전체적인 시너지가 날 수 있도록 할 수 있다.
Retrieval 을 fine-tuning하는 방법으로 [Liu et al., 2023]에서는 직접적으로 Embedding model을 fine-tuning하며, [Yu et al.,2023b] [Izacard et al.,2022] [Yang et al.,2023b]에서는 LLM으로 부터 feedback signal을 받는 과정을 통해서 fine-tuning한다.
Generator을 fine-tuning함으로써, 다양한 input data 형식에 맞추어 원하는 답변을 생성할 수 있다.
두가지 요소를 fine-tuning함으로써, over-fitting 또한 피할 수 있으나, 데이터가 많이 필요하다. $RA-DIT$ [Lin et al.,2023] 에서는 retrieval 와 generator 를 모두 효과적으로 fine-tuning하여 모든 LLM에 적용할 수 있는 방법을 제시한다.
3)Inference Stage
Inference Stage는 LLM에 정보를 제공하는 과정이기에 중요하다. 기본적인 Naive-RAG의 성능을 향상시키기 위해 다양한 연구가 진행되고있다.
- $DSP\ Framework$ [Khattab et al.,2022] : generation하는 과정을 향상시킴으로써, 성능 향상을 도모한다.
- $PKG$ [Luo et al.,2023] : LM의 parameter을 수정하지 않고, knowledge-guide module을 도입함으로써, 복잡한 task execution이 가능하다.
- $CREAICL$ [Li et al.,2023b] : 답변의 성능을 높이기 위해, corss-lingual knowledge를 사용한다.
inference stage는 추가적인 학습이 필요하지 않고 pre-training model의 성능을 향상시킬 수 있다.
7.2 Augmentation Source
서로 다른 knowledge와, 차원을 가진 데이터는 서로 다르게 augmented 되어야 한다. 가장 크게는 unstructed data, structed data그리고 LLM에 의해 생성된 data로 나눌 수 있다. 그림을 보면, 초기에는 plain text와 같은 unstructed data의 augmentation을 연구했다면, 최근에는 LLM에 의해 생성된 data를 검색하거나, augmentation과정에 적용하는 연구를 진행한다.
1)Augmented with Unstructed Data
여기서 얘기하는 unstructured data는 large model로 부터 생성된 corpus, corss-lingual data, token 그리고 phrases까지 다양하다. 더욱 균일한(finer granularities) 데이터는 검색하는 과정이 복잡하다는 단점이 있는 반면, 높은 성능을 제공한다.
- $FLARE$ [Jiang et al.,2023b] : LM으로 부터 생성된 데이터 중 가장 유사한 data를 검색하고, 이를 바탕으로 재생성하여 제공한다.
- $RETRO$ : 가장 유사한 정보를 검색하기 위해 이전 chunk를 사용한다.
2)Augmented with Structed Data
Struct Data는 Knowledge Graph(KG)를 이용한 방법론이다.
- $RET\ LLM$ [Modarressi et al.,2023] : knowledge graph memory를 도입하여 future freference를 위해 이전 dialogue를 활용한다.
- $SURGE$ [Kang et al.,2023] : 관련된 KG를 찾기 위해 GNN을 도입한다. multi-modal 대조 학습을 이용하여 텍스트를 생성한다.
- $KnowledGPT$ [Wang et al.,2023d] : KB search qurey를 만든다음에, 이를 저장한다.
3)LLM-Generated Content in RAG
LLM으로 부터된 생성된 Content의 경우 외부 데이터에 제한이 있을 경우 효과적이다.
- $SKR$ [Wang et al.,2023e] : question에 대해 아는지 모르는지 먼저 판단한다.
- $GenRead$ [Yu et al.,2022] : retrieval을 LLM generator가 대신한다.
7.3 Augmentation Process
한번의 검색을 바탕으로 생성을 진행하는 singular retrieval은 한계를 가지고 있다. lost in the middle이라는 문제점을 발생할 수 있는데, 이는 중복되는 내용이 검색되거나, 상반되는 내용이 들어와 불충분한 정보를 제공한다. [Liu et al.,2023a] [Yoran et al.,2023]
이러한 문제를 해결하기 위해 강화된 retrieval process를 연구한다.
1) Iterative Retrieval
검색 프로세스를 initial query뿐만 아닌, 추후에 생성된 문장을 포함하여 같이 검색을 진행하여 검색의 정확도를 높인다. [Borgeaud et al.,2022] [Arora et al.,2023] 이러한 접근 방식은 답변의 견고성을 증가시킬 수 있으나, 연속적이지 않은 검색을 통해 무관한 정보가 찾아질 수 있다.
이러한 문제점을 해결하기위한 효과적 방법으로 Multi-Hop Retrieval방식이 있다. [Li et al.,2023c]에서는 계층적인 검색 방식을 통하여 접근한다. 가장 먼저 해당 document 또는 일부분의 PDF를 summarization되어있는 형태로 검색을 진행한 이후, 자세한 내용을 검색한다. Multi-Hop Retrieval은 graph-structure 형태의 데이터의 검색에 용이하다.
- ITER-RETGEN[Shao et al.,2023] 에서는 "retrieval enhanced generation", "generation enhanced retrieval"을 사용하여 검색의 성능을 높인다.
2) Recursive Retrieval
Recursive Retrieval을 통해 더욱 깊이있는 정보의 검색을 위해서 사용된다. 이전에 검색된 내용을 바탕으로 이후의 검색을 진행한다. 이는 feedback loop을 이용하여 검색 성능을 높인다.
- $IRCOT$ [Trivedi et al..,2022] : CoT를 이용하여 검색 성능을 높였다.
- $ToC$ [Kim et al.,2023] : Clarification tree를 이용하여 질문의 모호한 부분을 최적화한다. 이러한 방식은 query가 복잡하여 사용자의 의도를 파악하기 어려울때 효과적이다.
3) Adaptable Retrieval
검색하는 시점과 검색해야할 content를 결정하여 RAG의 성능을 높인다. 이러한 방법론은 LLM이 판단하여 연산과정을 운용한다. 예시 모델들로는 AutoGPT [Yang et al.,2023c], Toolformer[Schick et al.,2023] Graph-Toolformer[Zhang et al.,2023] 가 있다.
- $Graph-Toolformer$의 경우 Self-Asking Technique가 있으며, few-shot 프롬프트를 통하여 검색을 진행한다. LLM이 스스로 판단하여 검색 시점을 정한다.
- $WebGPT$ [Nakano et al.,2021]은 GPT3의 성능을 향상시키기 위해 special search engine을 통해 special token을 제공하도록 하였다.
- $Flare$ [Jiang et al.,2023b]는 스스로 검색 시점을 판단할 수 있도록 하였다. generated term의 확률이 기준치 아래로 내려갈 경우 검색하여 정보를 습득하도록 하였다.
- $Self-RAG$ [Asai et al.,2023]는 output을 판단하기 위해 reflection token을 제시한다. retrieve 와 critic라는 두가지 변수를 도입한다. 이는 스스로 언제 검색을 진행해야할지 탐색하며, Critic Score을 통하여 해당 부분의 점수를 제공한다. 해당 점수를 통하여 추론 단게에서 얼마나 가중치를 둘지 결정한다. 따라서 해당 모델을 사용하기 위해서는 NLI 모델 또한 사용해야한다.
성능을 높이기 위해 Fine-Tuning(FT), Prompt Engineering, RAG의 방법이 존재하며, 각각의 특성은 다르다.
Table 1에서는 RAG 와 Fine-Tuning의 차이점에 대해서 기술을 하고 있다. 해당 논문에서는 RAG의 장점에 대해서 더욱 부각하고 있다.
7.4 RAG vs Fine-Tuning
RAG는 text book을 전달해주는 것과 유사한 방법이며, FT는 학생 내부의 지식을 전달해주는 방식과 유사하다. 따라서 구체적인 정보의 structure을 전달해주거나, style, format을 바꿀 수 있다. 하지만 새로운 지식을 전달해주거나, 빠르게 변경하기 위해서는 RAG가 더 낫다.
두가지 방법은 상호 배제적이지 않으며 두가지 방법을 동시에 사용하여 더욱 성능을 높일 수 있다.
다음 그림은 RAG, Fine-Tuning, RAG의 External Knowledge 와, Model Adaptation 측면에 대한 그림이다.
8. RAG Evaluation
해당 단원에서는 RAG의 발전에 따라서 LLM 모델의 성능향상에 얼마나 기여했는지 지표에 대한 설명을 한다.
초기에는 RAG의 목표가 downstream task를 향상시기키 위한 기능이었기에, EM 또는 F1 score을 많이 사용하였다.
$RALLE$ [Hoshi et al.,2023]는 RAG의 specific task에 대한 성능을 측정할 수 있게 한다. 그럼에도 불구하고 추가적인 측정 지표 연구가 많이 진행되고 있다.
8.1 Evaluation Target
RAG에서 주로 주요한 역할을 수행하는 Retrieval와 Generation 요소에 대해서 측정을 진행한다.
1) Retrieval Quality
검색된 document의 quality는 매우 중요하다. RAG retrieval module의 성능을 측정하기 위해 search engine, recommendation system, information retrieval system에서 사용하는 Hit Rate, MRR, NDCG [Liu 2023] [Nguyen 2023] 을 사용한다.
2) Generation Quality
해당 부분을 평가 하기 위해서는 retrieved된 문서와 얼마나 유사한 문장을 생성했는지, 질문에 대해서 올바른 답변이 나왔는지를 측정해야한다. Genration Quality는 labeled 와 unlabeled content로 나눌 수 있다. unlabel context는 답변에 대해 신뢰성과, 연관성에 대해 측정하고, labeled context에 대해서는 정확성에 대해 평가한다.
8.2 Evaluation Aspects
RAG을 평가하기 위해 3가지 primary quality socres과 4가지 essential abilities를 설명한다. 이를 통해 RAG의 성능을 잘 대변한다.
1) Quality Score
$Context\ Relevance$, $Answer\ Faith-fulness$, $Answer\ Relevance$는 RAG의 Retrieval과 Generation을 포함한 전체적인 성능을 대변하기에 좋은 지표들이다. [Es et al.,2023] [Saad-Falcon et al.,2023] [Jarvis and Allard, 2023]
$Context\ Relevance$는 retrieved content의 연관성과, process cost에 대한 내용을 반영한다.
$Answer\ Faith-fulness$는 생성된 내용이 retrieved content의 진실을 담고 있는지, 모순되지 않았는지를 판단한다.
$Answer\ Relevance$는 요청 내용에 대해서 효과적으로 답변을 했는지 판단한다.
2) Required Ability
$Noise\ Robustness$, $Negative\ Rejection$, $Information\ Integration$, $Counter-fact\ Robustness$는 RAG의 적응성과 효율성을 나타낸다. 이를 통해 다양한 어려움에 대한 능력, 복잡한 시나리오에 대해서 평가한다.
$Noise\ Robustness$는 document noise의 영향력에 대한 지표이다.
$Negative\ Rejection$는 retrieved document의 핵심 내용이 포함되어있는지에 대한 지표이다.
$Information\ Integration$는 multiple document을 잘 종합했는지에 대한 평가지표이다.
$Counter-fact\ Robustness$는 문서 내부의 부정확 정보에 대한 무시 능력 평가 지표이다.
다음과 같은 내용을 포함한 측정지표에 대한 설명이다.
9. Future Prospects
해당 단원에서는 RAG의 future challenge, modality expansion, RAG ecosystem에 대해 얘기한다.
9.1 Future Challenges of RAG
RAG의 성능이 많이 좋아졌으나, 해결해야할 문제는 여전히 남아있다.
$Context\ Length$
RAG의 성능은 LLM의 context window size에 영향을 받는다. context window의 size가 너무 작을경우, 충분한 document가 입력되지 못하며, 너무 길 경우, information dilution(희석)이 발생할 수 있다.
$Robustness$
contradictory information또는 noise는 오히려 정보가 없는것보다도 더욱 질 낮은 답변을 제공할 수 있다. 따라서 해당 능력은 RAG에 중요하다.
$Hybrid\ Approach$
RAG와 Fine-tuning을 결합하는 전략은 가장 최근에 진행되고 있으며, 매우 효과적이다. sequential, alternating, end-to-end joint training을 통해 parameterize와, non-parameterized 장점을 모두 가져간다.
$Expanding\ LLM\ Roles$
생성뿐만 아닌 검색과정과정에서도 LLM을 사용한다.
$Scaling\ Laws$
[Wang et al.,2023b] [Kalpan et al.,2020] 처럼 적은 parameter을 가지고도 좋은 성능을 낼 수 있도록 하는 연구이다.
$Production-Ready\ RAG$
해당 부분에 대해서는 RAG가 상용화에 적합하게 만들어야 한다는 점이다. document를 LLM에 전달하기에 Security와 같은 후속 연구가 필요하다.
9.2 Modality Extension of RAG
기존의 QA를 넘어서서, 여러가지 domain 에 대해서 multi-modal을 지원한다.
Image에서는 RA-CM3 [Yasunaga et al.,2023]에서 retrieval, Generation 단계에서 모두 Image와 Text 형태를 지원한다. BLIP-2 [Li et al.,2023a]에서는 image encoder을 도입하여 zero-shot image to text를 지원한다.
Image이외에도, Audio & Video [Zhao et al.,2022] [Chan et al.,2023], Code [Nashid et al.,2023] 등이 존재한다.
9.3 Ecosystem of RAG
1) Downstream Task and Evaluation
RAG를 이용하면 더 다양하고, 깊이있는 답변 제공이 가능하다. 더욱 다양한 task에 적용할 수 있도록 후속 연구가 필요하다. 특히 의학, 교육, 법쪽에 적용할 경우 기존 fine-tuning 방법에 비해 비용 절감이 가능하고, 성능을 높일 수 있다.
또한 기존에는 제공하지 못하였던 근거 제시에 대해서도 능력을 높일 수 있을 것이다.
2) Technical Stack
LlamaIndex와 Langchain와 같이 RAG를 활용하여 사용자가 편하게 사용할 수 있도록 한다. 이제는 AI-provider뿐만 아닌, cloud service와 같은 기업들도 제공한다.
RAG ecosystem에 대한 정리이다.
10. Conclusion
RAG는 기존 parameterize 되어있는 정보에 non-parameterized 정보를 추가하여 효율성과 정확성을 향상시킨다. Naive RAG 부터 시작하여 Advanced RAG에서는 re-ranking, query re-writing과 같은 많은 구조를 추가하였다. 최근에는 Multi-modal에 대한 연구도 많이 이루어지고있다. 이러한 흐름은 AI분야에 큰 역할을 수행할 것이며, 학문적 분야 뿐만 아닌 산업 분야에도 중대한 영향을 미칠것으로 예상된다.
11. 개인적인 의견
RAG는 LMM이 가지고 있는 단점인 Hallucination, outdated knowledge를 효율적으로 해결할 수 있다고 생각한다. 최근 LLM 모델이 너무 커지면서 여러가지 단점이 부각되고 있는데, RAG를 활용할 경우 크기는 훨씬 작음에도 비슷한 성능을 낼 수 있다. 또한 바로 사용이 가능하기에 저자가 마지막에 작성하였던 학분적 분야 뿐만 아닌 산업 분야에 즉각적으로 중대한 영향을 미칠 것 같다. 이미 Langchain와 LlamaIndex만 보더라도 LLM 적용의 필수 요소 중 하나로 자리잡았다.
추가적으로 RAG는 retrieval, generator를 포함하여 여러 모듈로 구성되어있다. 따라서 연구할 수 있는 분야도 많으며, 아직 성장할 수 있는 부분이 무궁무진해보인다. 해당 paper을 통하여 RAG의 전체적인 연구 방향성을 잡을 수 있었다.