Skip to content

기존 HybridChunker -> GenosBucketChunker 로 refactoring #134

@yspaik

Description

@yspaik

프로젝트

한국은행, 가스공사

사용자

관리자

버그의 증상

Chunking 관련 bug report 를 포함. 메머드급 chunk 가 계속 생김

버그의 증상 발생 빈도

조건에 해당되면 반드시 발생. deterministic

적용된 버전 혹은 실험한 위치

한국은행 클러스터

전처리 입력 파일

No response

증상을 확인할 수 있는 step

Image **내용 **
  • 배경

    • 현재 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 값(작게/크게) 설정 시 동작 일관성 확인

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingenhancementNew feature or request

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions