Dify 심화 (3): MinerU를 사용하여 표가 있는 문서 RAG 구현
MinerU는 오픈소스 기반의 고성능 데이터 추출 도구입니다. 대규모 언어 모델(LLM)을 위해 설계가 되었으며, 복잡한 PDF 문서, 웹 페이지 등 다양한 포맷에서 콘텐츠를 고정밀로 효율적으로 추출하는 것을 목표로 합니다.
기존의 단순한 텍스트 파싱 방식으로는 처리하기 어려웠던 복잡한 문서 요소들을 정확하게 인식하고 LLM이 이해하기 쉬운 구조화된 형식으로 변환하여 추출합니다.
다중 포맷 지원: PDF, 웹 페이지, 이미지 등 다양한 포맷의 데이터를 유연하게 추출할 수 있습니다.
표 인식 기능: MinerU의 가장 강력한 기능 중 하나로, 복잡한 표를 정확히 인식하고 CSV 또는 JSON, 마크다운 형태로 데이터를 추출할 수 있습니다.
이를 통해 표 데이터가 일반 텍스트가 아닌 구조화된 마크다운 테이블 형식으로 변환되어 RAG 시스템의 청크로 입력될 때, LLM이 표의 구조, 행-열 관계, 내용을 훨씬 더 잘 이해하고 정확하게 답변할 수 있도록 LLM 친화적인 데이터 구조를 제공합니다.
다국어 OCR 지원: 한국어, 영어, 중국어를 포함하여 84개의 언어의 OCR 인식을 지원하며, 스캔 된 PDF도 처리할 수 있습니다.
이번 실습에서는 셀이 병합되어 있는 복잡한 표가 포함된 pdf 문서를 준비하여, Dify 자체 파싱 기능과 MinerU를 사용하여 각각 RAG 지식을 생성하고 그 성능을 비교해 보겠습니다.
먼저 dify에 pdf 문서를 그대로 등록해서 자체 파싱 기능을 사용합니다.
나누어진 청크를 살펴보면 복잡한 표가 그냥 일반 text로 나열되어 사람이 보아도 맥락을 이해하기 어려운 형태로 파싱된 것을 확인할 수 있습니다.
이 지식을 기반으로 RAG 채팅플로우를 구축하고 LLM에 질문을 던졌을 때, 정확하지 않은 답변이 돌아옵니다.
질문 예시: “1일 차, 2일 차, 3일 차의 비용은 얼마인가요?”
실제 정답: 120,000원, 150,000원, 115,000원
LLM 오답: 240,000원, 300,000원, 240,000원 (표의 구조를 오해하여 데이터를 잘못 조합한 결과)
다음은 MinerU를 사용해서 같은 pdf 문서를 파싱해보도록 하겠습니다.
로컬에 있는 pdf 파일을 업로드 할 것이기 때문에 데이터 소스는 파일로 설정합니다.
MinerU 도구를 지식 파이프라인에 연결합니다.
이전 실습에서 Google Drive를 지식 파이프라인을 통해 등록한 것처럼 General Chunker 노드를 통해 청크를 설정하고 기술 자료에서 인덱스 모드, 임베딩 모델, 검색 설정 등을 완료합니다.
(청크 설정은 dify 자체 파싱 기능을 사용할 때와 동일하게 설정하겠습니다.)
여행 경비표 PDF 파일을 업로드한 후 프리뷰 청크를 확인해 봅니다.
Dify 자체 파싱과 달리, 표 데이터가 마크다운 형식의 테이블로 깔끔하게 구조화되어 나타나는 것을 확인할 수 있습니다. 이 마크다운 테이블 형식은 LLM에게 명확한 구조적 단서를 제공합니다.
나누어진 청크를 보면 마크다운 형식의 테이블 형태로 표가 보입니다.
MinerU를 사용해 등록한 지식으로 변경해서 LLM에게 같은 질문을 해보겠습니다.
질문 예시: “1일 차, 2일 차, 3일 차의 비용은 얼마인가요?”
실제 정답: 120,000원, 150,000원, 115,000원
LLM 정답: 120,000원, 150,000원, 115,000원
이번에는 LLM이 1일 차, 2일 차, 3일 차 비용을 모두 정확하게 답변했으며, 답변 속도 또한 훨씬 빨라지는 효과를 얻을 수 있었습니다.
본 실습을 통해, MinerU가 복잡한 PDF 문서 내의 표 데이터를 얼마나 효과적으로 구조화하는지 확인할 수 있었습니다. 단순 파싱은 표의 맥락을 잃게 만들어 LLM의 RAG 성능을 저해하지만, MinerU를 사용하면 LLM 친화적인 마크다운 테이블 형태로 지식을 구축하여 정보 추출의 정확도를 획기적으로 높일 수 있습니다.
RAG 시스템의 성능을 최적화하고 싶다면, MinerU와 같은 고성능 데이터 추출 도구를 활용하여 원본 문서의 구조적 정보를 최대한 보존하고 구조화하는 것이 필수적입니다.
오픈네트웍시스템 이승헌