오류 내성 곡선 — 검색 (성공 조건의 절반)
무엇을
주입기로 만든 오류 전사에서 오류율 0·5·10·15·20% 의 Recall@5·MRR 곡선을 낸다(4.2절).
왜 별도 티켓인가
주입기 티켓의 완료 조건에 곡선이 남아 있지만, 주입기는 끝났고 곡선은 모델 학습을 기다린다 —
같은 티켓에 두면 「진행 중」이 무엇을 기다리는지가 안 보인다.
8주 마일스톤이 5주차를 「핵심 주차」로 적은 이유가 이 곡선이고,
성공 조건은 F-2 가 아니라 STT 오류 내성 실험 + 검색 품질 개선 수치다(CLAUDE.md §1).
캘리브레이션은 이미 끝나 있다
골든셋 v1-150 고객 발화 136건 · 단어 815 · 시드 20260914 · 커밋 9970fba-dirty
목표 0.00 → 0.0000 0.05 → 0.0503 0.10 → 0.1018 0.15 → 0.1509 0.20 → 0.2000
주입한 오류율이 실제로 그 WER 인지 이미 검증됐다. 남은 것은 그 위에서 검색을 돌리는 일이다.
완료 조건
- 다섯 구간의 Recall@5·MRR 을 같은 시드·같은 커밋으로 낸다
- 검수 기준선과 대조: 오류 없음 ≥0.70 · 오류 10% ≥0.60(6.1절)
- 곡선 옆에 「흉내 내지 못하는 몫 46.9%」를 함께 적는다 — 주입기는 환청·의미 붕괴를 넣지 않으므로 같은 WER 에서 실제 STT 보다 덜 파괴적이다. 곡선은 낙관 쪽으로 기운다
- 수치에 측정일·커밋·명령·표본 수(§5)
주의
「오류에 강하다」를 목표로 두지 않는다. 10% 에서 0.60 을 못 넘기면 그대로 적고 원인 가설을 붙인다 (절대 원칙 2·8). 목표 수치를 코드에 하드코딩하지 않는다 — 그건 판정선이지 주입기가 맞출 값이 아니다.
2026-09-15 — 세 검색 모두 20% 까지 기준선 위. 단, 낙관적인 곡선이다
측정일 2026-09-15 · 커밋 38f2fc3-dirty · 골든셋 v1-150 · 시드 20260914·20260915·20260916 (점마다 최저치)
ELASTICSEARCH_URL=http://localhost:9200 .venv/bin/python scripts/measure_error_tolerance.py [--only retrieval --device mps | --only masking]
결과 data/processed/error-tolerance/2026-09-15-{retrieval,masking}.json · 로컬 Darwin arm64
B 항목 n96 · 오류를 넣은 문자열 = 하네스 검색 질의(맥락 + 고객 발화)
실제 WER → 0.000 0.051~0.052 0.100~0.102 0.151 0.200
bm25 R@5 0.833 (80) 0.823 (79) 0.812 (78) 0.812 (78) 0.792 (76)
MRR 0.659 0.651 0.648 0.638 0.614
dense R@5 0.979 (94) 0.979 (94) 0.979 (94) 0.979 (94) 0.969 (93)
MRR 0.885 0.878 0.878 0.869 0.873
rerank- R@5 0.979 (94) 0.979 (94) 0.979 (94) 0.979 (94) 0.969 (93)
dense MRR 0.919 0.914 0.908 0.910 0.898
- 검수 기준선: 오류 없음 ≥0.70 · 오류 10% ≥0.60 — 세 줄 모두 넘는다(10% 최저: bm25 0.812 · dense·rerank 0.979)
- 20% 에서 잃는 건수: bm25 4건, dense·rerank 1건. BM25 는 형태소가 깨지면 바로 떨어지고, 임베딩은 자모 한두 개 틀린 단어에 둔감하다
- 0% 점이
compare_retrievers.py값(0.833/0.659 · 0.979/0.885 · 0.979/0.919)과 같다 — 곡선 출발점이 거짓이 아니다 - x 축은 목표가 아니라 주입 후 잰 WER(시드 3개 범위)다
⚠ 이 곡선은 낙관 쪽으로 기운다. 주입기는 실측 편집 81건 중 46.9%(환청·의미 붕괴)를 흉내 내지 못한다 — 같은 WER 에서 실제 STT 보다 덜 파괴적이다. 「오류에 강하다」로 옮기지 않는다. 실제 전사로 잰 곡선이 아니다.
⚠ 모델 학습 전 값이다. 경로에 학습 대상 모델이 없어(주입기 · BM25 · 사전학습 KoE5 · bge-reranker · 사전학습 NER) 재었지만, 정성윤 님 학습 모델이 올라와 검색·마스킹 경로가 바뀌면 같은 명령으로 다시 잰다.
그래서 이 곡선으로 말할 수 있는 것은 «주입기가 흉내 내는 종류의 오류(띄어쓰기·어미 탈락·자모 혼동·숫자 읽기)에는 20% 까지
Recall@5 가 거의 안 떨어진다» 까지다. 환청이 섞인 실제 전사의 곡선은 배치 전사(w2-stt-batch)가 실제 API 로 돈 뒤에 잰다.