[논문 원본]
https://arxiv.org/pdf/2412.15605
Abstract
본 연구에서는 기존의 실시간 검색(RAG) 기반 시스템을 개선한 $\text{CAG (Context-Aware Generation)}$ 시스템을 제안합니다. CAG는 대규모 문서 집합을 미리 Key-Value $\text{(KV)}$ 캐시 형식으로 인코딩하여 저장하고, 이를 이용해 실시간 검색 없이 질의에 대한 답변을 생성하는 방식입니다. 이를 통해, 검색 지연을 없애고, 검색 오류를 줄이며, 시스템 복잡도를 최소화하는 장점이 있습니다. 이 방식은 특히 제한된 지식 기반에 대해 효율적이고 간소화된 대안을 제공할 수 있습니다.
Introduction
RAG$\text{(Retrieval-Augmented Generation)}$는 외부 지식 출처를 통합하여 대규모 언어 모델의 성능을 향상시킬 수 있는 강력한 접근법으로 주목받고 있다. 그러나 실시간 검색이 필요하며, 이는 검색 지연과 문서 선택 오류를 초래할 수 있다. 이에 대한 대안으로, 본 논문은 $\text{CAG (Context-Aware Generation)}$ 방법을 제안한다. CAG는 문서를 미리 로드하고 KV 캐시를 계산하여 저장함으로써, 실시간 검색을 생략하고 검색 지연을 제거한다. 이 방법은 특히 지식 기반이 제한적이고 관리 가능한 크기일 때 유용하다.
Methodology
CAG는 LLM의 확장된 컨텍스트 기능을 활용하여 외부 지식 출처를 사전 로드하고, 이를 KV 캐시로 인코딩하여 저장한다. CAG의 작업 흐름은 다음 세 가지 단계로 나뉜다:
- $\text{External Knowledge Preloading (외부 지식 미리 로딩)}$: 관련 문서를 LLM의 확장된 컨텍스트 윈도우에 맞게 전처리하고 KV 캐시로 인코딩하여 저장한다.
- $\text{Inference (추론)}$: 사전 계산된 KV 캐시와 사용자 쿼리를 함께 로드하여 추론을 수행한다. 실시간 검색이 필요 없어 검색 지연을 없애고, 문서 선택 오류를 줄인다.
- $\text{Cache Reset (캐시 초기화)}$: 여러 추론 세션을 지원하기 위해, KV 캐시는 효율적으로 초기화되어야 한다. 이를 통해 성능을 유지하며, 새로운 정보를 빠르게 반영할 수 있다.
3.1 Experimental Setup
본 실험에서는 SQuAD 1.0과 HotPotQA 두 개의 대표적인 질문 응답 데이터셋을 사용하여 성능을 평가했습니다. 실험에서는 문서 수와 참고 텍스트의 길이가 시스템 성능에 미치는 영향을 분석했습니다. 각 실험은 CAG와 두 가지 $\text{RAG 시스템(Sparse Retrieval (BM25)와 Dense Retrieval(OpenAI Indexes))}$ 간의 성능 비교를 기반으로 진행되었습니다.
사용된 모델:
- 실험에서는 Llama 3.1 8B Instruction 모델을 기반으로 CAG와 RAG 시스템을 모두 평가했습니다. 이 모델은 최대 128k 토큰까지 처리할 수 있는 능력을 가진 대형 언어 모델로, 문서의 대용량 텍스트를 효과적으로 처리하며 성능을 발휘합니다. 실험은 Tesla V100 32GB × 8 GPUs 환경에서 수행되었습니다.
모델 작업 방식:
- 본 시스템에서 생성된 응답은 사전 계산된 키-값 캐시 $\text{(Key-Value Cache)}$ 를 사용하여 처리됩니다. 즉, 각 데이터셋의 문서들이 KV 인코딩되어 Offline에 저장된 후, 추론 시 불러와서 실시간 검색을 하지 않고도 응답을 생성합니다.
$$CKV = KV-Encode(D)$$
위 수식에서 CKV는 문서 D의 키-값 캐시입니다. 이 캐시는 문서 D의 텍스트가 KV-Encode 함수에 의해 사전 계산되어 저장된 값입니다. 이후 이 값들을 사용하여 질문에 대한 답을 생성하는데, 이는 모델의 빠른 응답 생성에 기여합니다.
SQuAD 1.0
목표: 주어진 문서에서 질문에 대한 정확한 답을 찾는 것. (단일 문서 기반의 질문 응답 시스템을 평가하는데 사용)
구성: 각 질문은 하나의 문서에 대한 질문으로, 그 문서 내에서 답이 존재
데이터:
- 문서: 536개의 Wikipedia 문서
- 질문: 각 질문에 대한 단일 문장으로 이루어진 정답이 존재
특징: 문제는 일반적으로 “where”, “who”, “what”과 같은 정보에 대한 질문이 포함
HotPotQA
목표: 다중 문서에서의 추론을 요구하는 질문 응답 시스템을 평가하는 데이터셋. 주어진 질문에 대해 여러 문서에서 관련 정보를 결합해 답을 도출 (multi-hop reasoning, 다단계 추론을 필요로함)
구상: 하나의 질문에 대해 두 개 이상의 문서에서 정보를 종합해야하는 경우가 많음
데이터:
- 문서: 약 113,000개의 질문-답 세트가 포함된 데이터셋으로, 질문마다 2개 이상의 문서가 필요
특징:
- Multi-hop reasoining: 여러 문서에 걸쳐서 정보를 연결해 답을 유도하는 문제로, 기존의 SQuAD와는 다르게 여러 단계의 추론이 필요
3.2 Baseline Systems
- Sparse Retrieval System (BM25): BM25는 전통적인 텍스트 검색 알고리즘으로, 질의와 문서 간의 단어 빈도와 문서 길이를 기반으로 순위를 매깁니다. 질의와 문서 간의 일치도를 계산하고, 이를 바탕으로 적합한 문서를 검색합니다. 질의 $q$에 대해 BM25는 다음과 같이 문서 $D$를 평가합니다.
$$ \text{BM25}(q, D) = \sum_{t \in q} \text{IDF}(t) \cdot \frac{f(t, D) \cdot (k_1 + 1)}{f(t, D) + k_1 \cdot \left(1 - b + b \cdot \frac{|D|}{avgDL}\right)}$$
여기서 $f(t, D)$는 문서 $D$에서 용어 $t$의 빈도, $|D|$는 문서의 길이, $avgDL$은 문서들의 평균 길이, $k_1$과 $b$는 하이퍼파라미터입니다.
- Dense Retrieval System $\text{(OpenAI Indexes)}$: OpenAI Indexes는 dense embedding을 사용하여 문서와 질의를 공유된 의미 공간$\text{(shared semantic space)}$에서 처리합니다. Dense retrieval은 문서와 질의 간의 의미적 유사성을 계산하여 관련 문서를 찾습니다. 이는 다음과 같은 방식으로 계산됩니다:
$$\text{similarity}(q, D) = \mathbf{q}^T \mathbf{D}$$
여기서 $q$와 $D$는 각각 질의와 문서의 임베딩 벡터입니다. 이 벡터들은 고차원 공간에서의 유사성을 기반으로 계산되며, 단어의 의미적 관계를 반영합니다.
3.3 Results
Dataset Size | System | Top-1 BERTScore | Top-3 BERTScore | Top-5 BERTScore | Top-10 BERTScore |
---|---|---|---|---|---|
HotPotQA Small | Sparse RAG | 0.0673 | 0.0673 | 0.7549 | 0.7461 |
Dense RAG | 0.7079 | 0.7509 | 0.7414 | 0.7516 | |
CAG (Ours) | 0.7759 | 0.7999 | 0.8022 | 0.8191 | |
SQuAD Small | Sparse RAG | 0.7469 | 0.7999 | 0.8022 | 0.8191 |
Dense RAG | 0.6445 | 0.7304 | 0.7583 | 0.8035 | |
CAG (Ours) | 0.8265 | 0.8424 | 0.8491 | 0.8605 | |
표 설명: 위 표는 BERTScore를 기반으로 한 CAG와 RAG 시스템의 성능 비교를 나타냅니다. CAG 시스템은 대부분의 실험에서 상위 점수를 기록하며, 특히 Top-1 BERTScore에서 월등히 높은 성과를 보였습니다.
3.4 Generation Time (생성 시간)
Dataset Size | System | Generation Time (s) |
---|---|---|
HotPotQA Small | CAG | 0.85292 |
w/o CAG | 9.24734 | |
HotPotQA Medium | CAG | 1.66132 |
w/o CAG | 28.81642 | |
표 설명: CAG 시스템은 생성 시간 면에서도 크게 향상된 결과를 보여줍니다. 기존의 RAG 시스템에 비해 생성 시간이 현저히 빠름을 확인할 수 있습니다.
Conclusion
긴 컨텍스트를 처리할 수 있는 LLM의 발전을 바탕으로, CAG는 기존 RAG 시스템을 대체할 수 있는 가능성을 제시한다. 특히, 지식 기반이 상대적으로 제한적이고 관리 가능한 경우 CAG가 효율적이고 간단한 해결책을 제공할 수 있다. 또한, 향후 LLM의 발전에 따라, CAG는 더 많은 복잡한 작업에도 적용될 수 있을 것이다. 하이브리드 접근법으로는, 사전 로딩된 컨텍스트와 선택적인 검색을 결합하여 유연성을 높일 수 있다.
생각한 한계점 (예상)
- 실시간 문서 처리 불가능: CAG 방식은 문서를 미리 KV 캐시로 로드하여 사용하므로, 새로운 문서를 실시간으로 처리하고 반영하는 데 한계가 있을 수 있다. 실시간 문서 업로드 후 즉시 질문을 처리하는 것은 불가능하다.
- 메모리 한계: 문서가 많을 경우, 모든 정보를 RAM에 저장해야 하므로 메모리의 용량이 제한적일 수 있다. 메모리 용량을 초과할 경우, 캐시를 초기화하거나 일부 데이터를 제외하는 방법을 사용할 수 있지만, 이는 실시간 반영의 유연성을 떨어뜨릴 수 있다.
- 스케일링 문제: CAG가 효과적으로 작동하기 위해서는 전체 문서가 모델의 컨텍스트 윈도우에 맞는 크기로 전처리되어야 한다. 하지만 대규모 데이터셋에서는 이 방법이 비효율적일 수 있다. 특히 문서가 방대할 경우, 모든 데이터를 사전 로딩하는 데 시간이 많이 소요될 수 있다.
'LLM' 카테고리의 다른 글
#MCP 그래서 어떻게 사용하는건데? (3) | 2025.04.23 |
---|---|
[RAG] RAG기법 총정리 (1) | 2025.01.03 |
[테디노트] 피드백으로 원하는 형식의 답변을 학습하는 GPT (4) | 2024.11.21 |
지식 편집(KNOWLEDGE EDITING)이란 무엇인가? (2) | 2024.10.31 |
[LLM] RAG 성능 높이는 방법 - Reranker (1) | 2024.10.07 |