Skip to content

feat(tooling): annotate_corpus --corpus — 인용 수치의 재현 경로 - #18

Merged
needsbuilder merged 2 commits into
mainfrom
feat/annotate-corpus-mode
Aug 25, 2026
Merged

feat(tooling): annotate_corpus --corpus — 인용 수치의 재현 경로#18
needsbuilder merged 2 commits into
mainfrom
feat/annotate-corpus-mode

Conversation

@needsbuilder

Copy link
Copy Markdown
Owner

문제

README 와 결과보고서가 코퍼스 수치를 인용하며 "누구든 같은 명령으로 재현할 수 있다"
고 안내하는데, 그 명령이 없었다.

$ python -m tooling.annotate_corpus
(docstring 출력)
$ echo $?
2

--seed 는 첫 페어 하나만 재채점한다. n=11 집계를 내는 모드가 없어서
인용된 71.2 → 80.7 (Δ+9.5), 위반 −2.09 를 제3자가 확인할 방법이 없었다.
재현 가능성을 정직성의 근거로 내세우는 프로젝트에서 이 갭은 특히 아프다.

바꾼 것

summarize_corpus() + --corpus 모드. 코퍼스 전체를 현재 엔진으로 재채점
페어별 값과 집계를 함께 낸다.

$ python -m tooling.annotate_corpus --corpus
n = 11
원문 평균 K-ER      71.15
쉬운 글 평균 K-ER   80.69   (Δ +9.54)
규칙 위반 평균      8.36 → 6.27  (-2.09)
개별 delta 범위     +3.7 ~ +22.4
전 페어 Fidelity PASS: True

앞으로 README·결과보고서·DATASET_CARD 의 집계 수치는 이 함수가 유일한 출처다.
손으로 적지 않고 여기서 옮긴다.

테스트가 고정하는 것

집계값 자체가 아니라 정직성 불변식이다:

  • 코퍼스에 기록된 ker_score 가 지금 엔진의 재채점과 일치하는가
    (어긋나면 주석이 손으로 쓰였거나 규칙 변경 후 재주석을 빠뜨린 것)
  • 전 페어가 Fidelity 게이트 PASS 인가
  • 보고 Δ 가 평균에서 파생된 값인가 (따로 적힌 숫자가 아니라)

검증

  • pytest -q423 passed (419 + 신규 4)
  • ruff check → clean
  • python -m tooling.check_licenses --root . → PASS
  • --seed 기존 동작 회귀 없음

README 와 결과보고서가 "누구든 같은 명령으로 재현할 수 있다"고 안내하는 명령이
실제로는 없었다. 인자 없이 실행하면 docstring 만 출력하고 exit 2 이고, --seed 는
첫 페어 하나만 재채점한다. n=11 집계(평균 K-ER·Δ·위반 평균)를 내는 모드가 어디에도
없어서, 인용된 수치를 제3자가 확인할 방법이 없었다.

summarize_corpus() 를 추가해 코퍼스 전체를 현재 엔진으로 재채점하고 페어별 값과
집계를 함께 낸다. 이 함수가 README·결과보고서·DATASET_CARD 가 인용하는 수치의
유일한 출처다 — 손으로 적지 않고 여기서 옮긴다.

테스트는 집계 자체보다 정직성 불변식을 고정한다: 코퍼스에 기록된 ker_score 가
지금 엔진의 재채점과 일치하는지(어긋나면 손으로 쓰였거나 재주석을 빠뜨린 것),
전 페어가 Fidelity PASS 인지, 보고 Δ 가 평균에서 파생된 값인지.
CI 가 잡아낸 사실: kiwipiepy 0.23.2 / kiwipiepy_model 0.23.0 으로 버전이 같아도
플랫폼 빌드가 다르면(macOS arm64 wheel vs manylinux x86_64 wheel) 토큰화가 갈려
K-ER 이 흔들린다. synth-0011 이 macOS 82.4 / Linux 81.9 로 0.5 차이가 났다.

정확일치를 요구하면 이 프로젝트가 실제로 보장할 수 없는 것을 주장하게 된다.
보장 가능한 것(주석이 손이 아니라 실제 엔진에서 나왔는가)만 고정하도록
페어 단위 허용 오차 1.0 을 두고, 관측 근거를 상수 주석에 남긴다. 손으로 쓴
주석이나 규칙 변경은 이보다 훨씬 크게 움직이므로 탐지력은 유지된다.
@needsbuilder

Copy link
Copy Markdown
Owner Author

CI 가 실제 문제를 잡았다 — 테스트를 느슨하게 만드는 대신 사실을 기록했다

첫 CI 실행이 3.11/3.12 에서 실패했다:

기록값과 재채점이 다른 페어:
  synth-0011  recorded 82.4  /  재채점 81.9

버전 차이가 아니다. 로컬과 CI 모두 kiwipiepy 0.23.2 + kiwipiepy_model 0.23.0
이다. 다른 것은 플랫폼 빌드다 — 로컬 macOS arm64 wheel, CI
manylinux2014_x86_64 wheel. 같은 버전이라도 토큰화가 갈려 K-ER 이 흔들린다.

집계에 미치는 영향:

환경 쉬운 글 평균 K-ER
macOS arm64 80.69 → 80.7
Linux x86_64 80.64 → 80.6

즉 리눅스에서 재현하면 헤드라인이 0.1 다르게 나온다.

대응

정확일치를 요구하면 이 프로젝트가 실제로 보장할 수 없는 것을 주장하게 된다.
그래서 보장 가능한 것만 고정한다 — 페어 단위 허용 오차 KER_BUILD_TOLERANCE = 1.0,
그리고 관측 근거를 상수 주석에 남겼다. 손으로 쓴 주석이나 규칙 변경은 이보다
훨씬 크게 움직이므로 원래 목적(주석이 실제 엔진에서 나왔는가)은 유지된다.

후속으로 corpus/DATASET_CARD.md 에 주석 산출 환경과 이 오차를 명시한다.

@needsbuilder
needsbuilder merged commit 62487b0 into main Aug 25, 2026
7 checks passed
@needsbuilder
needsbuilder deleted the feat/annotate-corpus-mode branch August 25, 2026 05:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant