C-5 마스킹 보완 — 이름·번지 누락 0 · 어미·조사 과잉 제거 · 서버 골든 테스트 v1-150
무엇을
2026-09-17 로컬 E2E 에서 이름·번지가 원문으로 자막·DB 에 남았다(SEC-1 · 절대 원칙 3). 같은 날 골든셋 v1-150 규칙 채점도 누락 4·오분류 1 이었다. 누락을 막으려 규칙을 넓히면 자막이 지워지므로 누락과 과잉을 같은 측정으로 보면서 고쳤다.
담당:
server/apps/masking은 장민석 님 주 담당이다.decisions/302(server/누구나 고친다)에 따라 류준이 고쳤고, 다른 브랜치·진행 중 티켓에 겹치는 작업이 없음을 먼저 확인했다(origin/server0커밋 앞섬). 검토는 장민석 님께 부탁한다.ai/apps/pii_ner(NER 겹)은 류준 몫이다.
고친 것
- P6 이름 (
name_detector.py) — 네 갈래: ① 문맥(「이고요」·「으로」 조사, 띄어 쓴 외국인 이름 세 어절, 긴 덩어리 어절째) ② 자기소개 「저는 ○○이고요」 ③ 호칭 「○○ 씨·고객님·님」 ④ 이름만 답한 발화 「박성호요.」. 성씨 확인 + 실제 발화에서 걸린 것만 모은 비이름 목록으로 과잉을 막는다 - P7 주소 (
address_detector.py) — 도로명 바로 뒤 건물번호(7-3·45,·77길 12에서), 단위 붙은 숫자 제외. 어미 「~시면·~하면」 · 「혹시·다시」 · 조사 「~으로·~과로·버스로」 · 「~할 때」 의 「시」 · 「1호선」 을 주소로 보지 않는다 - P4 집 전화(지역번호) — GS-409 가 계좌(P3)로 불렸다
- NER 겹 (
ai/apps/pii_ner/domain/services/spans.py) — 띄어쓰기 보정이 「네·아·제」 같은 기능어 한 글자를 붙여 가짜 이름(「네이제」)을 만들던 것 - 서버 골든 테스트 v1-50 → v1-150 — 하네스 기본 골든셋과 맞췄다. 옛 규칙으로 돌리면 11개 실패함을 확인
- server 태그
0.1.15
측정 (2026-09-17, 커밋 b73ca59 작업 트리, 로컬)
| 고치기 전 | 고친 뒤 | 명령·표본 | |
|---|---|---|---|
| 골든셋 v1-150 규칙만 누락 / 오분류 | 4 / 1 | 0 / 0 | run_eval.py --runs 3 --no-ner · n=28 |
| 골든셋 v1-150 규칙+NER 누락 / 오분류 | 0 / 0 | 0 / 0 | run_eval.py --runs 3 --ner-model models/koelectra-ner |
| 오류 내성 곡선 규칙만 누락(WER 0/5/10/15/20%) | 4·5·5·5·5 (09-15) | 0·2·3·4·4 | measure_error_tolerance.py --only masking · 판정 24 · 시드 3 최저 |
| 오류 내성 곡선 규칙+NER 누락 | 0·1·2·2·2 (09-15) | 0·0·0·1·1 (GS-037) | 같음 · 음성 과잉 0/4 유지 |
| 합성 대본 라벨 누락 / 과잉 턴 — 규칙만 | 11 / 8 | 0 / 0 | scripts/persona_sim/dasan-v0 전 라벨 |
| 합성 대본 라벨 누락 / 과잉 턴 — 규칙+NER | 3 / 9 | 0 / 0 | 같음 |
| AI Hub 실제 발화에서 P6·P7 로 가려진 발화 — 규칙만 | 459 | 44 | 민원 질의응답 validation 다산 20,278건 |
| 같음 — 규칙+NER | 538 | 91 | 같음 |
⚠ 마지막 두 줄은 라벨이 없다. 줄어든 것은 과잉이 줄었다는 근거이지 누락이 없다는 근거가 아니다 — 남은 44건 대부분은 진짜 주소(「강동구 명일동 000번지」·「101동 707호」)다.
누락은 라벨이 있는 골든셋·합성 대본으로만 말한다. 측정 스크립트는 세션 scratchpad mask_bench.py — 채택하면 scripts/ 로 옮긴다.
⚠ 골든셋 값은 규칙을 본 뒤의 값이라 상한이다. 합성 대본도 같은 사람이 만들었다.
완료 조건
- 골든셋 v1-150 규칙만·규칙+NER 누락 0 · 오분류 0
- 합성 대본 라벨 누락 0
- 실제 발화 과잉을 건별로 보고 테스트에 고정(가리면 안 되는 문장 60여 개)
- server 886 · ai 416 통과 · 계약 4·3종 · 태그 검사
- 장민석 님 검토 → 남의 몫 — 미결 「C-5 규칙 보강에서 남은 것」에 있다
- 머지·배포 후 운영에서 합성 통화로 확인 → 09-19 정성윤 님 SSM 실측으로
server:0.1.18운영 확인, 규칙만으로 골든셋 C-5 36건 통과. 운영에 합성 통화를 태울지는 팀 결정(미결 SYN-010) - 남은 한계를 테스트로 고정했다: 호칭·문맥 없는 이름 · 역·정류장+버스 번호 NER 과잉 · 「이 지원」·「한 경우」(성씨라 보정에서 뺄 수 없음) — 규칙으로는 못 잡는다는 사실 자체가 기록이다. 해결은 NER 운영 반영(
decisions/121)
2026-09-21 — 닫음 (내 몫 끝)
코드·측정·테스트는 09-17·18 에 끝났고 09-19 운영에 떠 있는 것이 확인됐다(정성윤 님 SSM). 남은 「장민석 님 검토」는 남의 몫이라 미결 항목에서 추적한다 — 검토에서 고칠 것이 나오면 새 티켓으로.
머지 주석 (2026-09-21, 정성윤) — 아래 「보드 최신화」는 위 닫음 기록(
ai11:06)과 거의 같은 시각(main976f42e, 11:14)에 서로 못 본 채 따로 쓴 것이다. 상태는 front matter(done)가 맞고, 아래 메모의 「상태는 그대로」·「류준 님이 정한다」는 위 닫음으로 이미 답이 났다. 지우지 않고 남긴다(절대 원칙 8).
- 장민석 님 검토
- 머지·배포 후 운영에서 합성 통화로 이름·번지가 가려지는지 확인(운영 DB 기록 — 팀 동의 후)
- 남은 한계: 호칭·문맥 없는 이름(테스트로 고정) · 역·정류장+버스 번호 NER 과잉 · 「이 지원」·「한 경우」(성씨라 보정에서 뺄 수 없음)
보드 최신화 (2026-09-21, 정성윤 — 사용자 지시로 전체 보드를 한 번에 맞췄다). 상태는 그대로
in-progress다. 코드는 끝났고 운영에 떠 있다 —server:0.1.18이후 · 서버 골든 테스트 73 passed(09-19) · 운영 구성 하네스 누락 0 · n 28(09-21). 09-20 운영 왕복에서 본 것은 전화번호(P4) 마스킹뿐이라 「이름·번지가 운영에서 가려지는가」는 아직 열려 있다. 「장민석 님 검토」는 w5-server-change-review로 묶었다. ⚠ 「누락 0」은 오류 없는 전사 한정이다 — STT 오류 5% 에서 2건 뚫린다(STATE.md실측값). 규칙이 못 잡는 몫은 NER → w6-gpu-model-instance.