모델 구성 재측정 + 하네스 기록(--record) — 판정에 쓸 수 있는 값으로
무엇을
dense · 리랭커 · 규칙+NER 구성을 현재 코드로 하네스에 다시 돌리고, --record 로 eval_run 에 남긴다.
같은 구성으로 STT 오류 내성 곡선(0~20%)도 다시 그린다.
왜
6주차 판정(w6-core-baseline-check)이 09-30 이다.
2026-09-21 재측정은 운영 구성(규칙 + BM25)만 쟀다 — 측정한 머신에 모델 파일이 없었고 기록 DB 도 없어 run_id 가 없다.
모델 구성의 0.979/0.919 와 「규칙+NER 누락 0/0/1/1/1」은 09-15 로컬 측정 그대로다.
§5 는 값 하나에 측정일·커밋·명령·표본 수 넷을 요구한다 — 지금 그 값은 넷 중 커밋이 낡았다.
완료 조건
scripts/run_eval.py --runs 3 --record— 모델 구성, 3회 중 최저치(절대 원칙 4)scripts/measure_error_tolerance.py— 같은 구성, 시드 3개NO_SAMPLES가 어디에 남는지 그대로 보고한다(F-2 는 0건이라 측정 불가 그대로일 것이다)- 결과를
STATE.md「실측값」에 운영 구성 옆에 나란히 적는다 — 「로컬 측정」 꼬리표를 떼지 않는다
2026-09-22 결과
골든셋 v1-150.1(279건 — decisions/212 로 발화 14건을 새로 썼다. 라벨은 그대로) · 지식베이스 98조항(ES 문서 100 = 98 doc_id) ·
ES 9.5.1 + nori · 로컬 PostgreSQL 17(callguard-postgres, 127.0.0.1:5434 — 5432 는 다른 프로젝트 컨테이너가 쓰고 있다) ·
커밋 121157e-dirty(추적 파일 변경 없음 — 미추적 .claude/worktrees/ 때문에 붙은 꼬리표) · CPU · 두 구성 다 3회 중 최저치.
# 운영 구성 — run_id=1 · 2026-09-22 11:02 KST
ELASTICSEARCH_URL=http://127.0.0.1:9200 DATABASE_URL=postgresql://callguard:…@127.0.0.1:5434/callguard \
.venv/bin/python scripts/run_eval.py --runs 3 --no-ner --retriever bm25 --record
# 모델 구성 — run_id=2 · 2026-09-22 11:03 KST
… scripts/run_eval.py --runs 3 --retriever rerank-dense --record # NER 은 기본값 models/koelectra-ner
| 섹션 | 운영(규칙 + BM25) · run_id 1 | 모델(dense + 리랭커 + 규칙+NER) · run_id 2 |
|---|---|---|
| 검색 Recall@5 (n 96) | 0.812 (78) | 0.969 (93) |
| 검색 MRR | 0.635 | 0.914 |
| C-5 누락 (n 28 · P1 4·P2 2·P3 3·P4 5·P5 4·P6 7·P7 3) | 0 — 패턴 오분류 0 · 과잉 0.0 | 0 — 패턴 오분류 0 · 과잉 0.0 |
| F-2 필요서류 판정 (n 99) | 정확도 1.0 | 정확도 1.0 |
| C-1~C-4 컴플라이언스 | 재현율 1.0 · 정밀도 1.0 · tp 14 | 같음 |
| C-6 콜 가드 (n 15) | 재현율 1.0 · 정밀도 1.0 · tp 9 | 같음 |
| B-6 정답 없음 (n 24) | 기권 0 | 기권 0 |
| trigger · domain_routing | 측정 불가 — 모듈 미구현 | 같음 |
| call_temperature | 측정 불가 — 골든셋에 채점 대상이 없다 | 같음 |
| asr | 측정 불가 — 하네스에 STT 포트가 없다 | 같음 |
| generation | 측정 불가 — 생성 포트를 꽂지 않았다 | 아래 별도 1회 |
- ⚠ F-2 는 「측정 불가」가 아니다 — 09-21 에 케이스 99건(
w5-f2-golden-cases)이 들어와 채점된다. 다만 기대값을 규칙표에서 정했으므로 「규칙표를 코드가 따르는가」의 상한이다(골든셋note_2026_09_21). - C-5 는 오류 없는 전사에서 일곱 패턴 모두 표본이 있고
NO_SAMPLES가 없다. 컴플라이언스·콜 가드 1.0 은 자기충족 상한이다(STATE 09-21 과 같은 단서). - 생성(1회, 모델 구성 +
--ollama-url http://localhost:11434 --generation-model kanana-1.5-2.1b-instruct:q4_k_m, 11:03~11:05): 문항 96 · 카드 480 · 출처 표시율 1.0 · 출하 환각 카드 0 · 금지 표현 카드 0. 원출력 환각은 「측정 불가 — 포트가 모델 원출력을 돌려주지 않는다」(scripts/eval_generation.py몫). 기록(--record)하지 않았다.
STT 오류 내성 곡선 — scripts/measure_error_tolerance.py(시드 20260914·15·16, 점마다 최저치) · 11:03~11:07 · 원본 data/processed/error-tolerance/2026-09-22-all.json
| 목표 | 실제 WER | BM25 R@5 / MRR | dense R@5 / MRR | rerank-dense R@5 / MRR | C-5 누락 규칙 (판정 24) | C-5 누락 규칙+NER |
|---|---|---|---|---|---|---|
| 0% | 0.000 | 0.812 (78) / 0.635 | 0.969 (93) / 0.868 | 0.969 (93) / 0.914 | 0 | 0 |
| 5% | 0.051~0.052 | 0.812 (78) / 0.637 | 0.969 / 0.868 | 0.969 / 0.914 | 1 — GS-037(P6) |
0 |
| 10% | 0.100~0.102 | 0.792 (76) / 0.620 | 0.969 / 0.864 | 0.969 / 0.903 | 2 — + GS-033(P7) |
0 |
| 15% | 0.150~0.151 | 0.802 (77) / 0.610 | 0.969 / 0.873 | 0.969 / 0.903 | 4 — + GS-414·GS-415(P7) |
2 — GS-414·GS-415(P7) |
| 20% | 0.200~0.201 | 0.792 (76) / 0.598 | 0.969 / 0.869 | 0.969 / 0.898 | 4 | 2 |
- 음성(가리면 안 되는) 과잉 마스킹은 전 구간 0/4.
- ⚠ 주입기는 실측 STT 오류의 46.9% 를 흉내 내지 못한다 — 곡선은 낙관 쪽이다.
이전 값과의 차이 — ⚠ 골든셋 판이 다르다(v1-150 → v1-150.1, 질의 14건 교체). 항목 단위 비교는 성립하지 않는다.
| 이전 | 2026-09-22 | 차이 | |
|---|---|---|---|
| 운영 R@5 / MRR | 0.833 / 0.666 (09-21, 261bce4-dirty, run_id 없음) | 0.812 / 0.635 | −0.021(−2건) / −0.031 |
| 운영 오류 10% R@5 | 0.812 | 0.792 | −0.021 |
| 모델 rerank-dense R@5 / MRR | 0.979 / 0.919 (09-15 로컬) | 0.969 / 0.914 | −0.010(−1건) / −0.005 |
| dense 단독 R@5 / MRR | 0.979 / 0.885 (09-15 로컬) | 0.969 / 0.868 (곡선 0%) | −0.010 / −0.017 |
| 규칙 C-5 누락 5/10/15/20% | 2 / 3 / 4 / 4 (09-21) | 1 / 2 / 4 / 4 | 주입 말뭉치(고객 발화)가 바뀌어 깨지는 자리가 달라졌다 |
| 규칙+NER C-5 누락 0/5/10/15/20% | 0/0/1/1/1 (09-15 로컬) | 0/0/0/2/2 | 같은 이유 |
- 판정선 대조: 두 구성 모두 Recall@5 ≥0.70(오류 없음) · ≥0.60(오류 10%)을 넘는다. 기준선 고정·CI 게이트는 이 티켓 범위가 아니다(
w2-baseline-gate). - 남은 것:
STATE.md「실측값」에 운영 구성 옆으로 옮겨 적기(류준) · 모델 구성은 여전히 로컬 측정이다(운영 GPU EC2 미기동,decisions/121).