
RAG는 데이터로 모델을 학습(Fine-tuning)할 필요 없고, 기존 정보 변경 및 새로운 정보가 추가될 때에도 굳이 학습할 필요가 없어 리소스를 아끼고 정답 가능성도 높이는 방법 중 하나이다.
오늘은 다양한 RAG 중, Vectorless RAG에 대해 알아보자!
(Chunking)(Retrieve)(Use)물론 유사도를 기반으로 추출한 문서들은 애초에 전체 텍스트가 아닌, 일부 텍스트만 추출되기 때문에 할루시네이션 문제나 정답을 찾기 못하는 문제가 발생!
물론 보편화된 RAG를 사용해도 거의 잘 동작하지만,
모든 기술이 그렇듯, RAG도 정답으로 사용할 청크를 보다 정확하게 추출할지, 어떻게 더 경량화할지 등 발전 방법에 대해 모색한다.
Vectorless RAG오늘은 vectorless RAG와 대표적인 알고리즘인 PageIndex에 대해 알아보자
초창기 사용하던 RAG는 전체가 아닌 분리된 즉, 텍스트를 일정한 크기로 분할하여 DB에 저장하고 쿼리(질문)과 관련된 documents를 추출하기 때문에 앞서 언급한 한계점 존재
또한 벡터 DB 구성할 때 각 document는 텍스트와 이를 벡터로 변환한 임베딩도 함께 저장하는데, 임베딩 생성 비용과 저장 비용만 고려하여도 이는 상당히 많은 자원이 소모되는 문제 발생
Vectorless RAG는 자원 측면에서도 기존 RAG보다 훨씬 갸벼우며텍스트 구조화를 통해 맥락 손실을 방지
flat sequence. 즉, 전체 텍스트를 청크로 쪼갠 평면적 구성이라면,Tree형태로 구성하여 그래프 구조로 맥락을 유지하며 이를 Semantic skeleton tree라고 일컫는다.요약(summary) 등으로 구성{
"node_id": "0011",
"title": "Chapter 1. Deceptive Strength",
"summary": "Covers South Asia's growth outlook, inflation trends, financial vulnerabilities, climate risks, and policy challenges...",
"line_num": 621,
"nodes": [
{
"node_id": "0012",
"title": "Introduction",
"summary": "Summarizes the chapter's key themes including regional growth driven by India...",
"line_num": 625
},
...
]
}
# Chapter 1의 내용은 "nodes"로 하위에 존재하는 것을 볼 수 있음
인덱싱 과정을 수행한 뒤, 사용자의 질문(쿼리)가 들어오면 PageIndex는 전체 요약본 트리를 LLM에 건네고 어떤 노드에 정답이 포함되어 있는 지 질문하는 과정으로 검색을 수행
LLM은 전체 텍스트가 아닌 요약본(summaries)만 읽고 정답의 Node ID 리스트만 반환
얻은 Node ID를 기반으로 Raw data에 접근하여 원본 텍스트를 얻고, LLM에 입력하여 최종 답변 생성
💡 PageIndex 장점
- Node 기반 검색
- 답변에 잘리지 않은 텍스트 활용 가능
- 동일한 맥락 다루는 텍스트 전체를 입력하기 때문에
할루시네이션문제에 강건⚠️ PageIndex 단점
- 인덱싱, 검색에서 모두 LLM을 사용하기 때문에 지연시간(latency) 및 cost(비용)가 큰 문제
💡
Vectorless RAG는 청킹으로 인한 맥락 끊김, 임베딩 생성 및 저장 등 할루시네이션 방지와 자원 절약이라는 측면에서 기존 RAG보다 개선된 결과
- 당연하지만, 벡터 기반 검색, 키워트 매칭 검색, LLM 기반 검색 등 무턱대고 사용하기 보다 데이터가 어떤 도메인을 다루는지 파악한 뒤 사용하는 게 중요
- LLM 호출량이 많다는 점에서 과연 기존 RAG보다 효율적일까? 라는 의문이 들지만, 최근
SpecEdge처럼 로컬 환경을 동시에 사용하는 방법을 접목하거나점차 LLM의 처리 가능한 토큰 개수 증가 및 처리 시간 감소라는 점을 고려하면 충분히 매력적인 방법이 될 수 있을 것 같다.