PDF 문서 RAG 처리 전략: 통합 vs 분할 방식 비교 >> RAPTOR 방식추천

  

300페이지의 긴 PDF 문서에 대한 RAG 기술 적용 시, 문서를 통합으로 처리할지 아니면 분할하여 처리할지는 매우 중요한 전략적 결정입니다[1]. LLM의 긴 문서 처리 특성과 RAG 시스템의 효율성을 종합적으로 고려하여 최적의 접근 방법을 제시하겠습니다.

LLM의 긴 문서 처리 한계

컨텍스트 윈도우의 제약

현재 LLM들은 컨텍스트 윈도우가 확장되고 있지만, 실제 성능은 기대에 못 미치는 경우가 많습니다[2]. 특히 긴 문서를 처리할 때 중간 내용이 누락되는 현상은 잘 알려진 문제입니다[3]. GPT-4나 Claude-3 같은 모델들이 최대 1백만 토큰까지 처리할 수 있다고 하지만, 실제로는 윈도우 크기를 늘리는 것만으로는 연산 비용이 급격히 증가하며 효율성이 떨어집니다[4].

긴 컨텍스트의 성능 저하

Transformer 모델의 구조상 입력 길이가 길어질수록 attention layer의 시간 및 공간 복잡도가 quadratic하게 증가합니다[2]. 이는 300페이지라는 대용량 문서에서 더욱 심각한 문제가 됩니다[3]. 특히 정작 거기에 정답이 없는 경우처럼 복잡한 상황에서는 더욱 문제가 많습니다[3].


RAG 기술 강화 방식

RAPTOR: 계층적 요약 접근법

긴 문서 처리를 위한 혁신적인 RAG 방법론으로 RAPTOR가 제안되었습니다[5]. RAPTOR는 텍스트를 계층적으로 요약하고 검색하는 트리 구조를 만들어 긴 문서와 Long Context를 효과적으로 처리합니다[6][7]. 이 방법은 문서를 100 토큰 단위로 분할하고, UMAP과 Gaussian Mixture Model을 통해 클러스터링한 후 GPT-3.5-turbo로 요약하는 과정을 거칩니다[5].

개선된 청킹 전략

RAG 성능을 높이기 위해서는 효과적인 청킹 전략이 필수적입니다[8]. 문서를 의미 있는 단위로 나누는 것이 마치 책을 읽기 쉬운 챕터로 나누는 것과 같습니다[8]. 특히 300토큰, 오버랩 100토큰이 가장 적합한 설정으로 연구에서 검증되었습니다[9].

문서 분할 방식

물리적 분할의 장점

10페이지씩 30개 파일로 분리하는 방식은 다음과 같은 장점이 있습니다[10][11]:

  • 처리 속도 향상: 작은 파일들을 병렬로 처리할 수 있어 전체적인 처리 속도가 빨라집니다[11]
  • 메모리 효율성: 각 파일을 독립적으로 처리하여 메모리 사용량을 줄일 수 있습니다[10]
  • 유지보수 용이성: 특정 섹션만 업데이트하거나 수정할 때 해당 파일만 다시 처리하면 됩니다[11]

분할 방식의 단점

그러나 문서를 물리적으로 분할할 경우 다음과 같은 문제점들이 발생할 수 있습니다[12]:

  • 문맥 손실: 페이지 경계에서 내용이 끊어져 전체적인 문맥이 손실될 수 있습니다[12]
  • 교차 참조 문제: 여러 섹션에 걸쳐 있는 정보를 통합하여 검색하기 어려울 수 있습니다[1]
  • 검색 일관성: 30개의 별도 인덱스에서 검색하면 결과의 일관성이 떨어질 수 있습니다[13]

성능 비교 분석

실험적 검증 결과

최근 연구에 따르면 sentence-window retrieval과 LLM rerank의 조합이 가장 뛰어난 성능을 보였습니다[13]. 특히 RAPTOR는 QuALITY 벤치마크에서 82.6% 정확도로 SOTA를 달성했으며, NarrativeQA에서도 우수한 성능을 보였습니다[5].

청킹 최적화 실험

다양한 청킹 크기에 대한 실험 결과, 300 토큰 크기와 100 토큰 오버랩이 한국어 문서에서 가장 효과적임이 입증되었습니다[9]. 이는 세부 정보와 문맥의 균형을 효과적으로 유지하며 검색 효율성을 극대화합니다[9].


권장 전략

1. 통합 문서 + 강화된 RAG 기술

300페이지 문서의 경우 통합 문서에 강화된 RAG 기술을 적용하는 것이 더 효과적입니다[1][5]. 다음과 같은 이유들 때문입니다:

  • RAPTOR 기법 활용: 계층적 요약을 통해 긴 문서의 전체적인 맥락을 유지하면서도 효율적인 검색이 가능합니다[5][6]
  • 문맥 보존: 문서 전체의 일관성과 교차 참조 관계를 유지할 수 있습니다[1]
  • 검색 품질: 하나의 통합된 벡터 데이터베이스에서 일관된 검색 결과를 얻을 수 있습니다[13]

2. 최적화된 청킹 전략

통합 문서 처리 시 다음과 같은 청킹 전략을 권장합니다[14][8]:

  • 청크 크기: 300-500 토큰
  • 오버랩: 50-100 토큰
  • 분할 방식: 문장 경계 기반 분할로 의미 단위 보존
  • 클러스터링: UMAP + GMM을 활용한 계층적 구조 생성

3. 하이브리드 검색 시스템

최적의 성능을 위해 다음 기술들을 조합하여 사용하는 것을 권장합니다[15][13]:

  • Dense + Sparse 검색: FAISS와 BM25를 결합한 앙상블 검색
  • LLM Rerank: 검색된 결과를 LLM으로 재순위화
  • Multi-level Retrieval: RAPTOR의 트리 구조를 활용한 다단계 검색

구현 권장사항

기술 스택

  • 문서 처리: PDFPlumber 또는 PyMuPDF for 한글 PDF 최적화[16]
  • 임베딩: OpenAI text-embedding-3-large 또는 한국어 특화 모델[17]
  • 벡터 DB: FAISS 또는 Pinecone for 확장성[15]
  • RAG 프레임워크: LangChain + RAPTOR 구현[5]

성능 최적화

  • 배치 처리: 청크 임베딩을 배치로 처리하여 속도 향상[14]
  • 캐싱: 자주 검색되는 결과를 캐싱하여 응답 속도 개선[18]
  • 인덱스 최적화: 정기적인 인덱스 리빌딩으로 검색 품질 유지[13]


결론

300페이지 PDF 문서의 경우, 문서를 분할하기보다는 통합된 상태에서 RAPTOR와 같은 강화된 RAG 기술을 적용하는 것이 더 효과적입니다[1][5]. 이 방식은 문서의 전체적인 맥락을 보존하면서도 LLM의 긴 문서 처리 한계를 극복할 수 있습니다[6]. 특히 계층적 요약과 최적화된 청킹 전략을 결합하면 검색 정확도와 응답 품질을 모두 향상시킬 수 있습니다[9][13].

단, 구현 복잡도가 높고 더 많은 컴퓨팅 리소스가 필요할 수 있으므로, 프로젝트의 요구사항과 리소스를 고려하여 최종 결정을 내리시기 바랍니다[5].

[1] https://velog.io/@js03210/%ED%85%8C%EB%94%94%EB%85%B8%ED%8A%B8-%EA%B8%B4%EB%AC%B8%EC%84%9C%EC%97%90-%EB%8C%80%ED%95%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9D%B4%EA%B2%8C-RAG%ED%95%A0%EA%B9%8C
[2] https://julie-tech.tistory.com/147
[3] https://smartest-suri.tistory.com/62
[4] https://42morrow.tistory.com/entry/Infinite-Retrieval-%EB%AC%B4%ED%95%9C-%EA%B8%B8%EC%9D%B4-%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC-%EC%B2%98%EB%A6%AC%ED%95%98%EB%8A%94-%EC%83%88%EB%A1%9C%EC%9A%B4-LLM-%EB%B0%A9%EB%B2%95
[5] https://only-advance.tistory.com/entry/RAPTOR-%EA%B8%B4%EA%B8%80Long-Context%EC%9D%84-%EC%9C%84%ED%95%9C-%EC%B5%9C%EC%A0%81%EC%9D%98-RAG-%EA%B2%80%EC%83%89-%EC%A0%84%EB%9E%B5
[6] https://velog.io/@mmodestaa/%EB%AC%B8%EC%84%9C%EB%A5%BC-%EA%B3%84%EC%B8%B5%EC%A0%81%EC%9C%BC%EB%A1%9C-%EC%9A%94%EC%95%BD%ED%95%B4-%EA%B8%B4-%EB%AC%B8%EB%A7%A5%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%A0-%EC%88%98-%EC%9E%88%EB%8A%94-RAPTOR-Rag-%EB%85%BC%EB%AC%B8-%EC%A0%95%EB%A6%AC
[7] https://chloe-everything.tistory.com/15
[8] https://memoryhub.tistory.com/entry/%ED%9A%A8%EA%B3%BC%EC%A0%81%EC%9D%B8-RAG-%EA%B5%AC%ED%98%84-%EC%B5%9C%EC%8B%A0-%EB%B0%A9%EB%B2%95%EB%A1%A0-%EA%B2%80%EC%83%89%EB%B6%80%ED%84%B0-%EC%83%9D%EC%84%B1%EA%B9%8C%EC%A7%80-%F0%9F%98%8E
[9] https://velog.io/@zedy_dev/AI-%EC%B5%9C%EC%A0%81%ED%99%94%ED%95%98%EA%B8%B0
[10] https://www.tenorshare.kr/merge-and-split/how-to-split-pdf-into-multiple-files.html
[11] https://fliphtml5.com/learning-center/ko/best-pdf-split-tools/
[12] https://learn.microsoft.com/ko-kr/azure/architecture/ai-ml/guide/rag/rag-chunking-phase
[13] https://sp-datalab.com/entry/RAG-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90-%EA%B2%80%EC%83%89-%EC%A0%95%ED%99%95%EB%8F%84%EC%99%80-%EC%9D%91%EB%8B%B5-%EC%9C%A0%EC%82%AC%EC%84%B1-%EC%B5%9C%EC%A0%81%ED%99%94
[14] https://velog.io/@woodyalmond/Rag%EB%8A%94-%EA%B3%BC%ED%95%99%EC%9D%B4%EB%8B%A4.-%EC%82%AC%EC%9D%B4%EC%96%B8%EC%8A%A4-%EC%B2%AD%ED%82%B9-%EC%82%AC%EC%9D%B4%EB%8B%A4-%EC%A0%84%EB%9E%B5
[15] https://teddylee777.github.io/langchain/rag-tutorial/
[16] https://mz-moonzoo.tistory.com/73
[17] https://velog.io/@judy_choi/RAG-%EC%8B%9C%EB%A6%AC%EC%A6%88-%EC%9E%84%EB%B2%A0%EB%94%A9-%EB%AA%A8%EB%8D%B8%EB%B3%84-RAG-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90
[18] https://blog.sionic.ai/naive-rag
[19] https://velog.io/@dutch-tulip/rag
[20] https://blog.naver.com/htk1019/223470091070
[21] https://teddylee777.github.io/langchain/langchain-tutorial-07/
[22] https://www.youtube.com/watch?v=o8h8KtN2CoA
[23] https://www.koreadeep.com/blog/document-parser
[24] https://jahvo.tistory.com/entry/%EC%B1%97-GPT-%EB%AA%A8%EB%8D%B8%EC%9D%98-%EC%84%B1%EB%8A%A5-%ED%96%A5%EC%83%81%EC%9D%84-%EC%9C%84%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-Chunking-%EC%A0%84%EB%9E%B5
[25] https://www.youtube.com/watch?v=gcdkISrpMCA
[26] https://www.kci.go.kr/kciportal/ci/sereArticleSearch/ciSereArtiView.kci?sereArticleSearchBean.artiId=ART003200663
[27] https://whiseung.tistory.com/entry/%F0%9F%93%9A-RAG-%EA%B8%B0%EC%88%A0%EC%9D%B4-%EB%AC%B8%EC%84%9C-%EC%9A%94%EC%95%BD%EC%9D%84-%ED%98%81%EC%8B%A0%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95
[28] https://aiheroes.ai/community/255
[29] https://teddylee777.github.io/langchain/summarize-chain/
[30] https://velog.io/@dutch-tulip/rag-survey-2024
[31] https://www.toolify.ai/ko/ai-news-kr/ai-pdf-rag-gpt4-3402354
[32] https://kr.linkedin.com/posts/teddy-lee_%EA%B8%B4-%EB%AC%B8%EC%84%9Clong-context-%EC%97%90-%EB%8C%80%ED%95%9C-%EC%B0%B8%EC%8B%A0%ED%95%9C-rag-%EB%B0%A9%EB%B2%95%EB%A1%A0-raptor-activity-7172181187799531520-Y_Kw
[33] https://g3lu.tistory.com/43
[34] https://www.dbpia.co.kr/journal/articleDetail?nodeId=NODE11906479
[35] https://www.manuscriptlink.com/society/kips/conference/ack2024/file/downloadSoConfManuscript/abs/KIPS_C2024B0257
[36] https://journal.kace.re.kr/xml/44058/44058.pdf

댓글