LevelRAG: 다중 홉 논리 계획을 통한 재작성 증강 검색기 기반의 검색 증강 생성 향상
요약
LevelRAG는 다중 홉 논리 계획과 하이브리드 검색을 결합한 RAG 프레임워크입니다. 이 시스템은 사용자의 복잡한 질의를 원자적 하위 질의로 분해하고, 각 하위 질의에 대해 여러 저수준 검색기를 활용하여 정확성과 완전성을 높여 답변을 생성합니다.
핵심 포인트
- 다중 홉 논리 계획으로 RAG의 정확성 및 완전성 향상
- 질의를 원자적 하위 질의로 분해하는 고수준 검색기 사용
- Dense, Elastic, Web 등 다양한 리트리버와 LLM을 활용한 구조
- FlexRAG 기반이며 Qwen2-7B 등의 생성기 배포가 필요함
LevelRAG: Multi-hop Logic Planning over Rewriting Augmented Searchers를 활용한 검색 증강 생성(RAG) 개선
논문 LevelRAG: Enhancing Retrieval-Augmented Generation with Multi-hop Logic Planning over Rewriting Augmented Searchers의 소스 코드입니다.
LevelRAG는 다중 홉 논리 계획(multi-hop logic planning)과 하이브리드 검색(hybrid retrieval)을 통합하여 검색 과정의 완전성(completeness)과 정확성을 모두 향상시키는 2단계 검색 증강 생성(RAG) 프레임워크입니다. 첫 번째 단계에서는 사용자의 질의를 원자적(atomic) 하위 질의로 분해하는 고수준 검색기(high-level searcher)가 작동합니다. 두 번째 단계에서는 각 하위 질의에 대해 가장 관련성 높은 문서를 검색하기 위해 여러 개의 저수준 검색기(low-level searchers)를 활용하며, 이 문서들을 사용하여 최종 답변을 생성합니다. 각 저수준 검색기 내에서는 대규모 언어 모델(LLMs)이 사용되어 원자적 질의를 해당 리트리버에 더 잘 맞도록 정제합니다.
저희 코드는 FlexRAG 프로젝트를 기반으로 합니다. FlexRAG 설치 지침을 따라주세요:
pip install flexrag==0.2.0
이 프로젝트의 소스 코드를 다운로드하세요:
git clone https://github.com/ictnlp/LevelRAG
팁
LevelRAG를 더 간단한 방식으로 실행하고 싶다면, 'Running the Simple LevelRAG' 섹션을 참조해 주세요.
LevelRAG를 실행하기 전에 리트리버(retriever) 준비가 필요합니다. LevelRAG는 총 세 가지 종류의 리트리버인 DenseRetriever, ElasticRetriever, 그리고 WebRetriever를 사용합니다. WebRetriever는 인덱스 구축이 필요하지 않지만, DenseRetriever와 ElasticRetriever 모두 먼저 인덱스를 준비해야 합니다. 저희 실험에서는 Atlas가 제공하는 wikipedia 코퍼스를 사용합니다. 다음 명령을 실행하여 코퍼스를 다운로드할 수 있습니다:
wget https://dl.fbaipublicfiles.com/atlas/corpora/wiki/enwiki-dec2021/text-list-100-sec.jsonl
wget https://dl.fbaipublicfiles.com/atlas/corpora/wiki/enwiki-dec2021/infobox.jsonl
코퍼스를 다운로드한 후, 다음 명령을 실행하여 DenseRetriever를 구축할 수 있습니다:
마찬가지로, 다음 명령을 실행하여 ElasticRetriever를 구축할 수 있습니다:
python -m flexrag.entrypoints.prepare_index \
retriever_type=elastic \
file_paths=[text-list-100-sec.jsonl,infobox.jsonl] \
...
참고: ElasticRetriever를 구축하기 전에 elasticsearch 서버를 설정해야 합니다. 여기에서 elasticsearch 서버 설치 지침을 따르십시오.
WebRetriever는 인덱스 구축이 필요하지 않습니다. 다만, 사전에 Bing Search API_KEY를 준비해야 합니다. Bing Search API 웹사이트를 방문하여 API_KEY를 얻을 수 있습니다.
LevelRAG는 생성기(generator)로 Qwen2-7B-Instruct를 사용합니다. 다음 명령을 실행하여 vllm을 통해 생성기를 배포할 수 있습니다:
python -m vllm.entrypoints.openai.api_server \
--model Qwen2-7B-Instruct \
--gpu-memory-utilization 0.95 \
...
이 명령은 4개의 GPU를 사용하여 Qwen2-7B-Instruct를 배포합니다. --tensor-parallel-size와 --gpu-memory-utilization는 사용자의 GPU 구성에 따라 조정할 수 있습니다.
리트리버(retriever) 준비가 완료되면, scripts 폴더의 스크립트를 실행하여 LevelRAG를 실행할 수 있습니다. 스크립트를 실행하기 전에, 스크립트에 있는 플레이스홀더 변수들을 올바른 값으로 대체했는지 확인하십시오.
- LEVELRAG_PATH: LevelRAG 저장소의 경로입니다.
- DENSE_PATH:
DenseRetriever의 경로입니다. - BING_KEY: Bing Search API_KEY입니다.
또한 LevelRAG용 GUI 데모도 제공합니다. scripts 폴더에서 run_highlevel_gui.sh 스크립트를 실행하여 GUI 데모를 실행할 수 있습니다. GUI에서는 쿼리를 입력하고 LevelRAG의 출력을 확인할 수 있습니다.
리트리버 구축이 너무 복잡하다고 생각되면, scripts 폴더에서 run_simple.sh 스크립트를 실행하여 LevelRAG의 간단한 버전을 실행할 수 있습니다. LevelRAG의 간단한 버전은 DenseRetriever만 사용하며 WebRetriever는 필요하지 않습니다.
그리고 ElasticRetriever입니다.
뛰어난 다중 홉(multi-hop) 문제 분해와 서브쿼리 적응성 최적화 덕분에, LevelRAG는 단일 리트리버만으로도 좋은 성능을 달성할 수 있으며 실행 속도가 더 빠릅니다. 또한 run_simple_gui.sh 스크립트를 실행하여 LevelRAG의 간단한 버전 GUI 애플리케이션을 시작할 수도 있습니다.
참고
run_simple.sh 스크립트에서 API_KEY를 사용자의 OpenAI API_KEY로 변경했는지 확인하십시오.
저희는 여러 단일 홉(single-hop) 및 다중 홉(multi-hop) 지식 집약형 질의응답 데이터셋으로 실험을 수행했습니다. 실험 결과에 따르면, LevelRAG는 베이스라인 방법과 비교하여 상당한 성능 향상을 달성합니다. 실험 결과는 아래 표를 참조하십시오.
본 프로젝트는 MIT 라이선스 하에 배포되며, 자세한 내용은 LICENSE 파일을 참고하십시오.
저희의 작업이 유용하다고 생각되시면, 논문 인용을 고려해 주십시오:
@misc{zhang2025levelragenhancingretrievalaugmentedgeneration,
title={LevelRAG: Enhancing Retrieval-Augmented Generation with Multi-hop Logic Planning over Rewriting Augmented Searchers},
author={Zhuocheng Zhang and Yang Feng and Min Zhang},
...
질문이 있으시면 GitHub에 이슈를 생성하거나 이메일(zhangzhuocheng20z@ict.acn.cn)로 연락 주십시오.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기