Skip to content

Configuration

dnjsgkfka edited this page Aug 23, 2026 · 3 revisions

Evidence Chunker가 노출하는 튜닝 파라미터와, 각 기본값이 어떻게 결정됐는지 정리한다.

스윕 실험 세부사항은 Experiments §04를 참고.

요약

파라미터 기본값 결정 근거
bbox_threshold 300.0 (pt) 100~1000pt 스윕, 통계적으로 300pt보다 늘릴 근거 부족
sim_threshold 0.0 0.00~0.60 스윕, 낮출수록 전 유형 EM 단조 증가
DEFAULT_TOKEN_LIMIT 512 EU 분할 기준 토큰 수

bbox_threshold

표 위/아래로 설명 단락을 수집할 거리 범위(pt).

  • 캡션 탐색 범위(caption.pyCAPTION_SEARCH_PT = 200.0)와는 다른 값이다.
    캡션은 표에 훨씬 바짝 붙어 있는 게 보통이라 더 좁은 반경을 사용한다(서로 다른 용도로 분리).
  • 100~1000pt로 스윕한 결과, 400pt 이상에서 context_dependent EM이 0.250으로 포화되지만 300pt(0.222) 대비 차이가 95% CI(±11.55pp, n=72)보다 작아 통계적으로 유의미하지 않았다.
  • 결론: dev20 표본만으로는 300pt보다 더 늘릴 근거가 부족해 기본값 300pt를 유지한다.
chunker = EvidenceChunker(bbox_threshold=300.0)  # 기본값

sim_threshold

문맥 단락을 채택할 코사인 유사도 임계값.

  • 0.00~0.60(0.05 간격)으로 스윕한 결과, 임계값을 낮출수록 cell_value/table_about/context_dependent 세 유형 EM이 전 구간에서 단조 증가하거나 유지되었다.
    특히 context_dependent는 0.40(구 기본값)에서 0.194, 0.00에서 0.319로 +12.5pp 차이.
  • 결론: sim_threshold 기본값을 0.0으로 낮춘다.
    다만 완전히 없애지 않고, 사용자가 필요에 따라 활성화할 수 있는 옵션으로 남겨둔다.
  • 부수 효과: sim_threshold <= 0이면 _embedding_filter()model.encode() 호출 자체를 건너뛰므로, 기본 설정으로 쓰면 sentence-transformers/torch 없이도 청킹이 동작한다.
    0보다 큰 값을 명시적으로 넘기는 사용자만 pip install evidence-chunker[similarity]가 필요하다.
chunker = EvidenceChunker(sim_threshold=0.0)   # 기본값 (bbox 거리만으로 문맥 수집, 임베더 불필요)
chunker = EvidenceChunker(sim_threshold=0.4)   # 코사인 필터 활성화 (sentence-transformers 필요)

DEFAULT_TOKEN_LIMIT (evidence_chunker.tokens, 기본 512)

EU 하나(eu.text 기준)가 넘지 않아야 할 토큰 수. 초과 시 split.split_eu()가 행 단위로 분할한다.

flowchart LR
    T["EU 토큰 수"] --> Q1{"≤ 512?"}
    Q1 -->|"예"| S1["single<br/>원본 그대로 통과"]
    Q1 -->|"아니오"| Q2{"≤ 3072?<br/>(512 × 6)"}
    Q2 -->|"예"| S2["row_split<br/>캡션·헤더·문맥 유지한 채<br/>행 단위 분할"]
    Q2 -->|"아니오"| S3["llm_summary<br/>분할 포기, 원본 통과"]

    style T fill:#D8DEE9,stroke:#4C566A,stroke-width:1.5px,color:#2E3440
    style Q1 fill:#E5E9F0,stroke:#8FBCBB,stroke-width:1.5px,color:#3B4252
    style Q2 fill:#E5E9F0,stroke:#8FBCBB,stroke-width:1.5px,color:#3B4252
    style S1 fill:#88C0D0,stroke:#5E81AC,stroke-width:2px,color:#2E3440
    style S2 fill:#A3BE8C,stroke:#4C566A,stroke-width:1.5px,color:#2E3440
    style S3 fill:#EBCB8B,stroke:#D08770,stroke-width:1.5px,color:#2E3440
Loading
전략 조건 동작
single 한도 이내 원본 그대로 통과
row_split 한도 초과, LLM_SUMMARY_LIMIT(한도의 6배) 이내 캡션/헤더/문맥을 유지한 채 행 단위로 분할
llm_summary 행 하나만으로도 한도를 넘거나 LLM_SUMMARY_LIMIT 초과 기계적 분할을 포기하고 원본 EU 통과
요약이 필요하다는 신호로만 사용(실제 요약은 수행하지 않음)

EvidenceRetrieverk / fetch_k

export.langchain.EvidenceRetriever(vectorstore, k=5, fetch_k=None, dedupe=True)

  • fetch_k 기본값: max(k * 4, 20)
    • EU 하나가 retrieval_units로 여러 벡터를 만들 수 있으므로, dedupe 후에도 k개가 채워지도록 넉넉하게 가져온다.
  • dedupe=False로 끄면 max-pool 없이 기존 유닛 단위 flat 랭킹으로 되돌아간다.
  • max-pool을 사용하면 Recall@5(+1.4pp)에서는 baseline을 이기지만, Recall@10(-1.9pp)에서는 근소하게 진다.
    자세한 원인은 Limitations & Roadmap 참고.

Clone this wiki locally