### 프로젝트 한국은행, 가스공사 ### 사용자 관리자 ### 버그의 증상 Chunking 관련 bug report 를 포함. 메머드급 chunk 가 계속 생김 ### 버그의 증상 발생 빈도 조건에 해당되면 반드시 발생. deterministic ### 적용된 버전 혹은 실험한 위치 한국은행 클러스터 ### 전처리 입력 파일 _No response_ ### 증상을 확인할 수 있는 step <img width="540" height="720" alt="Image" src="https://github.com/user-attachments/assets/b0c41771-f2e9-4b3f-af3b-000748645986" /> **내용 ** * 배경 * 현재 v1.3.1 기준, facade 층의 `HybridChunker` 에서 chunking 로직 구현 * 실제 동작은 “hybrid max-token chunking” 이 아니라, hierarchical chunker 스러운 동작 -> 메머드급 chunk 발생 * 소제목(leaf 아님)만 chunk 로 남거나, 지나치게 큰 chunk 가 생성되는 문제 반복 발생 * 목표 * `HybridChunker` 로 구현된 기존 로직을 정리하고, `GenosBucketChunker` 로 명시적으로 재정의 * chunker 구현을 facade 에서 분리하여 doc_parser 내부 chunker 모듈로 이전 * facade 는 단순 “chunker 선택/위임” 역할만 수행하도록 단순화 * GenosBucketChunker 설계 개요 * 입력: HierarchicalChunker 가 생성한 leaf level item 리스트 사용 * leaf item = 실제 contents 를 가진 leaf node * section header 등 tree 중간 node 는 flatten 과정에서 bucket 단위 계량하는데에는 배제하고 정렬 * 전체 leaf item 을 **reading order 기준으로 정렬** * `max_token_length` 를 상한으로 하는 **container(bucket)** 단위로 greedy packing * container 에 leaf item 을 순차적으로 담되, * 새 item 추가 시 총 토큰 수가 `max_token_length` 를 초과하면 → 해당 item 은 다음 container 로 이동 * 초과하지 않으면 → 계속 다음 item 추가 (2개, 3개… 식으로 greedy하게 담음) * 기존 hybrid max-token chunker 처럼 텍스트를 중간에서 자르지 않고, **item 경계를 유지**한 채 container 단위로만 자름 * `max_token_length` 를 “매우 큰 값(실질적으로 무한대)”으로 설정한다면, hierarchical chunker 와 동일한 형태로 동작하도록 설계 * 예외 처리 (table 등 oversized item) * 단일 leaf item (예: table) 이 `max_token_length` 를 초과하더라도, * 해당 item 은 최소 1개는 반드시 하나의 container 에 포함 (oversized table, atomic text item 허용 정책) * 이 외 예외 규칙은 실제 이슈 문서로 테스트하면서 보완 * 구현/리팩토링 범위 * 기존 `HybridChunker` 구현 → doc_parser 내부의 `GenosBucketChunker` 로 이전 및 리팩토링 (필요하면 `HybridChunker` 는 deprecated 혹은 `GenosBucketChunker` alias 로 처리하여 혼동 최소화) * facade 에서 chunker 구현 삭제 * facade 는 chunker 타입 선택 및 호출만 담당 (설정 레벨의 역할로 축소) * 검증 항목 * 한국은행 프로젝트에서 문제 되었던 규정 파일과 가스공사 SOP 문서(공유된 Google Drive 파일)로 재현 테스트 * 메머드급 chunk 발생 여부 확인 * “소제목 (section header)만 있는 chunk” 생성 여부 확인 * 기존 hierarchical chunker 대비 chunk 수/토큰 분포 비교 * `max_token_length` extreme 값(작게/크게) 설정 시 동작 일관성 확인
프로젝트
한국은행, 가스공사
사용자
관리자
버그의 증상
Chunking 관련 bug report 를 포함. 메머드급 chunk 가 계속 생김
버그의 증상 발생 빈도
조건에 해당되면 반드시 발생. deterministic
적용된 버전 혹은 실험한 위치
한국은행 클러스터
전처리 입력 파일
No response
증상을 확인할 수 있는 step
배경
HybridChunker에서 chunking 로직 구현목표
HybridChunker로 구현된 기존 로직을 정리하고,GenosBucketChunker로 명시적으로 재정의GenosBucketChunker 설계 개요
입력: HierarchicalChunker 가 생성한 leaf level item 리스트 사용
전체 leaf item 을 reading order 기준으로 정렬
max_token_length를 상한으로 하는 container(bucket) 단위로 greedy packingcontainer 에 leaf item 을 순차적으로 담되,
max_token_length를 초과하면 → 해당 item 은 다음 container 로 이동기존 hybrid max-token chunker 처럼 텍스트를 중간에서 자르지 않고, item 경계를 유지한 채 container 단위로만 자름
max_token_length를 “매우 큰 값(실질적으로 무한대)”으로 설정한다면, hierarchical chunker 와 동일한 형태로 동작하도록 설계예외 처리 (table 등 oversized item)
단일 leaf item (예: table) 이
max_token_length를 초과하더라도,이 외 예외 규칙은 실제 이슈 문서로 테스트하면서 보완
구현/리팩토링 범위
기존
HybridChunker구현 → doc_parser 내부의GenosBucketChunker로 이전 및 리팩토링(필요하면
HybridChunker는 deprecated 혹은GenosBucketChunkeralias 로 처리하여 혼동 최소화)facade 에서 chunker 구현 삭제
검증 항목
한국은행 프로젝트에서 문제 되었던 규정 파일과 가스공사 SOP 문서(공유된 Google Drive 파일)로 재현 테스트
기존 hierarchical chunker 대비 chunk 수/토큰 분포 비교
max_token_lengthextreme 값(작게/크게) 설정 시 동작 일관성 확인