일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Mean squared error
- 이상탐지
- 합성곱 신경망
- Non-Maximum Suppression
- anomaly detection
- rrf
- 딥러닝
- Time Series
- nlp
- 퍼셉트론
- LLM
- leetcode
- LLaVA
- 활성화함수
- 활성화 함수
- rag parsing
- deep learning
- segmentation
- Cross Entropy Error
- pdf parsing
- E
- multi-query
- 손실함수
- 오차역전파
- rag-fusion
- visual instruction tuning
- 컴퓨터비전
- computer vision
- 데이터 파싱
- 시계열
- Today
- Total
굴러가는 분석가의 일상
[논문리뷰] RAPTOR (장문의 문서에 적합한 RAG) 본문
RAPTOR: Recursive Abstractive Processing for Tree-Organized Retrieval
Paper | GitHub | Overview
💡 Naive RAG의 문제점
위의 그림은 Naive RAG의 전반적인 흐름을 나타낸다. 즉, 사용자가 질문을 하게 되면, 질문과 비슷한 상위 k개의 정보들을 추출하여, 답변을 생성하는 것이다. 만약 K 값이 5라고 가정해보자. 그럼 과연 추출된 5 가지의 단락(정보)을 가지고 문서의 전체적인 컨텍스트를 이해할 수 있을까? 조금 더 직관적인 예시를 통해 알아보도록 하겠다.
만약 신데렐라의 동화에서 "신데렐라가 어떻게 행복한 결말을 맞이했는가"? 라는 질문을 던졌을 때, 사용자가 원하는 보편적인 답변은 전체적으로 신데렐라가 어떠한 과정을 거쳐서 궁극적으로 행복한 결말을 맞이 했을까 일 것 이다. 하지만 Naive RAG를 사용하게 될 경우, 스토리 내에 있는 몇가지 문장들을 가지고 오는 것말으로는 전체적인 내용에 대해 알 수 없다는 것이다.
현재 간단한 프로젝트를 진행하고 있는데, 전체적인 토큰의 수를 알아보니 거의 500백만개 이다... 500백만 개의 토큰을 GPT에게 넘긴다면, 성능 자체 또한 안 좋을뿐만 아니라 비용이 기하급수적으로 상승하게 될 것이다.
Naive RAG의 전반적인 문제점이며, 이러한 문제점을 해결하기 위해 본 논문의 저자들은 RAPTOR 라는 방법론을 제시하였다.
💡 RAPTOR RAG 방법론(Overview)
논문을 읽어보면서 아이디어가 되게 신박하다는 생각이 들었다. 앞서 논문의 제목에서 알 수 있듯이 tree 구조를 사용하게 된다. 이와 같은 tree 구조를 만들 때, 하위단에 Leaf Layer가 존재하고 상위단에는 Root Layer가 존재하도록 구성하게 된다.기존의 Naive RAG 방식과 같이 문서를 엄청 작은 단위로 쪼개는 것 부터 시작하게 된다. 본 논문에서는 100 토큰 단위로 짜르는 것을 추천하며, 문장이 끊어지지 않도록 주의해야한다는 것이 핵심이다. 그럼 이에 대해 조금 더 자세히 알아보도록 하자.
1번~5번 노드들은 문서의 문장들을 100 토큰 단위로 쪼갠 것을 뜻한다. 이러한 노드들은 Leaf Layer이라고 칭하며, Clustering 기법을 통해 비슷한 문장끼리 묶어 요약을 진행하게 된다. 이렇게 요약된 내용들이 6번~8번 노드처럼 생성이 되는 것이다.
조금 더 직관적인 예시를 위 그림의 가운데 " Formation of one tree layer"를 통해 알아보도록 하겠다. 6번 노드를 살펴보면, 3번과 5번 노드와 연결 되어있는 것을 볼 수 있다. 이말은 즉슨 3번과 5번은 유사한 임베딩이기 때문에 두 개의 노드가 하나의 클러스터링으로 요약되었다고 설명할 수 있다. 여기에서 중요한 것은 모든 노드들은 개별노드로 생성이 되어 벡터 인덱스에 포함이 된다는 점이다. 쉽게 말해 모든 노드들이 retreival에 대상이 된다는 것이다.
모든 노드들이 retrieval에 대상이 된다는 것은 여러 개의 노드들로 구성된 TREE 구조를 통해 디테일한 정보와 추상적인 정보를 알아 낼 수 있다는 뜻이다.
- 디테일한 정보: 1번부터 5번까지 100 토큰 단위로 문서를 쪼개였기 때문에, 굉장히 디테일한 정보를 뽑아낼 수 있다. 이는 굉장히 Naive RAG와 비슷하다.
- 추상적인 정보: 6번부터 8번까지의 노드들은 비슷한 청크들끼리 클러스터링을 통해 요약되었기 때문에, 디테일한 정보 보다는 추상화된 정보를 알아 낼 수 있다. 이는 9번과 10번 노드에도 해당이 된다.
이러한 노드들을 가지고 문서의 전체적인 컨텍스트를 파악할 수 있게 되는 것이 RAPTOR RAG의 핵심적인 내용이다.
💡 RAPTOR RAG 방법론(Advanced)
여태 노드들이 비슷한 것끼리 묶여 클러스터링, 요약 혹은 정보 추출(Retrieve)을 진행한다고 하였습니다. 그럼 이번에는 각각의 기법들이 어떠한 방식을 통해 적용이 되는지 알아보고자 한다.
✅ Clustering
100 개의 토큰을 기준으로 문장이 끊어지지 않도록 청킹을 하게 된다. 이러한 문장들은 embedding을 거쳐 dense embedding로 변환되게 된다. 그래서 이렇게 임베딩된 문장들은 각각의 고유한 의미를 담고 있게 된다. 근데 긴 문서를 임베딩 시키게 되면, 대부분 몇 천개의 차원으로 이루어져 있다. 그렇기 때문에 이 모든 것을 클러스터링 알고리즘에 태우는 것이 사실상 불가능하다. 따라서 어느정도 의미 있는 차원만 남겨 소수의 임베딩만 남도록 차원 축소하는 것이 필요하기에 본 논문에서는 UMAP를 제안하였다.
더불어 UMAP를 통해 차원 축소 후, GMM (Gaussian Mixture Model)을 통해 클러스터링을 수행하게 된다. GMM은 데이터의 분포가 여러 개의 가우시안 분포의 조합으로 이루어져 있다고 가정하고 이를 통해 데이터의 밀도 분포를 추정하는 확률 모델이다. 이러한 성질을 가진 GMM은 청크를 유사한 주제의 클러스터로 구성하는데 도움을 주며, 각 텍스트 세그먼트가 여러 클러스터에 속할 수 있도록 'Soft Clustering" 방식을 채택한다.
전체 텍스트를 대상으로 클러스터링을 한번 진행한 후, 몇 개의 클러스타가 적절한지 글로벌 단위로 측정하고 각 클러스터 내에서 한번 더 진행하게 된다. 그럼 매번 이렇게 수동적으로 n번씩 최적의 클러스터 개수를 지정해야 하는걸까? 이는 BIC (Bayesian Information Criterion)을 통해 최적의 클러스터 수를 결정할 수 있게 된다.
적절한 클러스터로 나뉜 후, 각 클러스터의 노드들은 gpt-3.5-turbo 통해 Summary를 생성하게 된다.
✅ Retrieving
이제 요약을 생성한 것을 기반으로 최종 구조의 Tree를 만들게 되었는데, 과연 어떻게 Retrieve 해야할까? 본 논문의 저자들은 위의 사진처럼 두 가지의 방식을 제안한다.
(1) Tree Traversal Retrieval
트리 탐색 방식은 무조건 최상위 루트 노드에서 시작해 단계적으로 최하단 노드까지 내려가며 필요한 정보를 찾는 방법이다. 예를 들어, "신데렐라는 어떻게 행복한 결말을 맞이 했는가?" 라는 질문이 주어진다면, 상위 레벨에서는 질문의 전반적인 주제 혹은 추상적인 내용을 포함하는 노드를 선택하고, 점차 구체적인 내용들을 담고 있는 하위 노드로 내려가면서 이야기의 결말과 관련된 세부 내용에 접근할 수 있게 된다. 즉, 이와 같은 방식은 추상적인 것과 구체적인 것에 대한 답변을 얻을 수 있다는 장점이 있다.
하지만, 정보 손실이라는 단점이 존재한다. 만약에 상위 레벨 노드가 요약이 잘되지 않았거나 혹은 질문이 너무 구체적일 경우 상위 레벨의 특정 노드가 선택되지 않을 가능성이 높다. 이에 전반적으로 트리가 어떻게 만들어 지느냐 혹은 검색 하느냐에 따라 성능이 좌지우지 된다.
(2) Collapsed Tree Retrieval
병합 트리 방식은 트리의 계층을 완전히 무시하고 모든 노드를 flattened(평면화)하여 한 번에 비교하는 방식이다. 여기에서 중요한 점은 상위 노드 혹은 하위 노드의 개념이 아예 없고, 모든 노드가 동일한 레벨에 있는 것처럼 간주한다. 이에 각 노드와 질문 간의 유사도를 계산하여 상위 노드들을 차례대로 선택한다. 그럼 똑같이 "신데렐라는 어떻게 행복한 결말을 맞이했는가?"을 병합 방식으로 처리할 때는 트리의 모든 노드를 한 번에 비교해 신데렐라의 결말과 직접적으로 연관된 내용들을 담고 있는 노드를 우선적으로 선택하게 된다. 이때 선택된 노드들의 토큰 수가 모델의 입력 한도에 도달할 때 까지 계속해서 노드를 추가해주는 방식으로 지갑을 SAVE(!)하게 해주는 방식을 제안했다...ㅎ
본 논문을 생각보다 재밌게 읽었다. 우연히 이 글을 읽게 되셨다면, 논문도 한번 읽어보시는 걸 추천드립니다!!!
'논문리뷰' 카테고리의 다른 글
[논문리뷰] Enhanced Transformer with Rotary Position Embedding(RoFormer) (0) | 2024.04.30 |
---|---|
[논문리뷰] Visual Instruction Tuning (LLaVA) (1) | 2024.04.28 |
[논문리뷰] SA(Segment Anything) (0) | 2024.04.06 |
[논문리뷰] Unsupervised Deep Anomaly Detection for Multi-Sensor Time-Series Signals (0) | 2023.10.22 |