STT 오류 주입기 — 성공 조건의 나머지 절반

무엇을

전사 텍스트에 합성 STT 오류를 주입해 오류율 0~20% 구간에서 검색 품질 곡선을 낸다. 4.2절 STT 오류 내성 실험.

왜 — 티켓조차 없던 것을 만든다

_project/STATE.md 「지금 막혀 있는 것」이 「오류 주입기가 없다 · 미배정 · 성공 조건의 절반인데 티켓조차 없다」로 적어 둔 항목이다. 성공 조건은 F-2 가 아니라 STT 오류 내성 실험 + 검색 품질 개선 수치인데(CLAUDE.md §1) 그 절반이 착수조차 안 돼 있었다.

텍스트 레벨이라 STT 실물 없이 만들 수 있다 — data/README.md 도 “4.2절 실험은 이 데이터를 쓰지 않는다 — 텍스트 레벨 합성 오류 주입” 이라고 적고 있다. 막을 것이 없다.

어떻게 — 오류를 지어내지 않는다

⚠ 주입할 오류의 종류를 실측에서 가져온다. 아무 글자나 바꾸면 그건 STT 오류가 아니라 오타이고, 그 위에서 낸 곡선은 아무것도 말하지 않는다(절대 원칙 10).

근거로 쓸 수 있는 것 —

완료 조건

2026-09-14 — 주입기까지 만들었다. 곡선은 아직 안 냈다

프로파일 — 손으로 고르지 않았다

분류 규칙을 코드로 고정하고(error_injection/classify.py) 실측 40쌍 전체에 돌렸다.

.venv/bin/python scripts/build_stt_error_profile.py
출처 bandwidth-penalty/result.json · 측정일 2026-09-09 · 20발화 × 2조건(16kHz·8kHz) = 40쌍 · 정답 단어 452 · 편집 구간 81

  spacing_split 12 · spacing_merge 2 · word_delete 3 · number_verbalize 2 · jamo_sub 17 · ending_drop 7
  ending_add 1 · word_insert 0 · unmodeled 37

흉내 내지 못하는 몫이 46.9%(38/81)다 — 환청·의미 붕괴·여러 자모가 바뀐 치환. 주입기는 넣을 말을 지어내야 하는 유형을 넣지 않으므로 같은 WER 에서 실제 STT 보다 덜 파괴적이다 → 곡선은 낙관 쪽으로 기운다. 곡선을 낼 때 이 비율을 옆에 적는다.

캘리브레이션 (주입기 검증 — 품질 수치 아님)

골든셋 v1-150 고객 발화 136건 · 단어 815 · 시드 20260914 · 커밋 9970fba-dirty
  목표 0.00 → 실제 0.0000 (편집 0)     목표 0.05 → 0.0503 (34)     목표 0.10 → 0.1018 (66)
  목표 0.15 → 0.1509 (103)             목표 0.20 → 0.2000 (138)

한 건씩 넣으며 재므로 넘쳐도 편집 1건 몫이다. 채점기(metrics/asr.score_pairs)로 다시 재도 같은 값이다(테스트가 고정).

이번에 틀린 것 둘

남은 한계

주의

목표 수치를 코드에 하드코딩하지 않는다. 6.1절이 오류 10% 구간 Recall@5 ≥0.60 을 걸어 뒀지만, 그건 판정선이지 주입기가 맞춰야 할 값이 아니다.


2026-09-15 — 곡선을 냈다. 결과는 곡선 티켓 두 장에 있다