RAPTOR(Recursive Abstractive Processing for Tree-oranized Retrieval)
구조화된 트리 검색을 위한 재귀척 추상화 처리
기존 RAG 단점
- 전반적인 주제, 흐름, 요약에 어려움이 있음
- 검색된 chunk에서만 답변을 생성 (누락되는 정보가 큼)
RAPTOR는 재귀적 임베딩, 클러스터링을, 요약을 통해 기존 RAG가 가지고 있는 문제점을 극복 할 수 있음
노드 트리에서의 검색을 통해 긴 문서의 정보 파악에 유리하다.
방식
- 특정 토큰 크기(주로 100)로 문서를 split
- 문장이 끊어지지 않도록 하며 긴 문장은 다음 chunk로 지정한다.
- chunk내 텍스트의 맥락적, 의미적 일관성을 유지한다.
- 비슷한 chunk끼리 clustering으로 그룹화
- cluster의 요약 node를 생성한다.
- 이러한 작업을 clustering이 불가할 때 까지 재귀적으로 진행한다.
- 생성된 모든 node는 전체적인 tree 구조를 가지고 있다.
모델 성능이 발전해 가면서 LLM에 전달할 수 있는 토큰 수가 확장되어가고 있는데 split된 문서의 chunk에서 검색하여 LLM에 전달해야 하는가? (더 많은 chunk를 포함해서 보내도 되지 않은가?)
-> 긴 컨택스트를 사용하게 되면 비용, 시간, 성능면에서 좋은 퍼포먼스를 보여줄 수 없음
기존 재귀적 추상 요약 모델
- 광범위한 테마를 파악하는데 효과적 (재귀적 요약을 통해)
- 세부적인 내용은 소멸됨
- LlamaIndex는 인접한 chunk를 요약 (clustering 방식이 아님), 먼 상호 의존성을 무시하게 됨
기존 재귀적 추상 요약 모델과 달리 RAPTOR는 clustering을 통해 chunk 그룹의 요약하여 인접한 chunk가 아니라도 상호 의존성을 보여 줄 수 있고 요약된 정보를 통해 광범위한 테마를 파악하는데 효과적이면서 문서 원본의 chunk를 통해 세부적인 내용에 대한 답변이 가능하다.
쿼리 전략
- Tree Traversal Retrieval
- 트리 순회 검색
- 트리의 루트로부터 코사인 유사성을 기반으로 상위 k개 문서를 검색
- 트리의 상위노드에서 부터 차례로 연관성이 높은 노드를 채택
- 해당 노드의 자식 노드를 확인 계속 하위 계층으로 확인 해 나가며 연관성이 높은 노드를 검색한다.
- 계층의 깊이와 선택할 노드 수를 조정 가능
- 트리의 최상위에 있는 요약된 전박적인 맥락부터 하위의 세밀한 정보까지 컨택스트로 사용 가능
- Collapsed Tree Retrieval
- 축소된 트리 검색
- 모든 트리를 단일 레이어로 축소 (트리를 한 레이어로 펼침)
- LLM의 최대 토큰 수에 도달 할 때까지 노드를 추가 (특정 K개를 선발하는 방식 x)
- Tree traversal 대비 성능이 좋음 (default 검색 방식)
개인적 의견
- 긴 컨택스트를 사용하게 되면 비용, 시간 성능적에서 좋지 않다는데 Collapsed Tree Retrieval에서 LLM의 최대 토큰 수에 도달할 때 까지 노드를 검색하는 방식이 맞는 것인가?, 단순히 쓸모없는 chunk까지 포함하여 보내지 말고 검색을 통한 결과값이 더 좋은 출력물이라 말하는것이라고 생각하면 이해됨
- 요약한 내용을 통해 전반적인 주제를 파악 할 수 있다는 건 기존 RAG방식에서의 문제를 잘 해결한 방식이라고 생각함
- 트리 순회 검색을 통해 연관성이 있는 노드쪽으로 검색을 진행하는건 좋은 방식이라고 생각하는데 축소된 트리 검색 방식이 더 좋은 퍼포먼스를 낸다는 것이 신기?하다 생각함. 많은 케이스를 봐야 알겠지만 특수한 질문에 대해서는 그렇게 될 수 있다 생각함.