음성으로 코딩하기 (6편) — 한국어로 말했는데 영어로 알아듣는 이유
"취소해"라고 말했는데 화면엔 "This way" 가 떴어요. 분명 한국어로 말했는데 영어로 알아듣다니. 이 황당한 현상의 범인은, 뜻밖에도 좋으라고 켜둔 기능이었습니다.
지난 편 → 5편 — Claude가 답했는데 왜 조용하지?
짧은 명령어가 자꾸 이상하게 들렸어요
긴 문장은 그럭저럭 인식됐는데, "취소"·"전송" 같은 짧은 명령어가 유독 자주 틀렸어요. "취소해"가 엉뚱한 한국어로 들리는 건 그렇다 쳐도, 가끔은 아예 영어("This way", "async")로 알아듣더라고요.
한국어로 쓰라고 설정도 해뒀는데 영어라니. 처음엔 "모델이 이상한가?" 했죠.
모델도 프롬프트도 아니었어요
whisper large-v3에 한국어(ko)로 고정해뒀고, 자주 쓰는 단어를 미리 알려주는 힌트(initial_prompt)도 넣어봤어요. 그런데도 짧은 명령어의 영어 오인식은 안 사라졌죠. 원인은 인식기 앞단, 소리를 다듬는 단계에 있었어요.
진짜 범인은 노이즈 제거였어요
저는 노이즈 제거(denoise) 를 켜두고 있었어요. 팬 소리나 잡음을 걷어내라고요. 긴 문장에서는 이게 도움이 됐어요.
그런데 짧은 키워드에서는 정반대였습니다. "취소"는 0.5초짜리 약한 신호예요. 노이즈 제거가 그 약한 신호까지 과하게 깎아버리니, whisper 입장에선 뭉개진 소리를 받고 "그럴듯한 무언가"로 채워 넣다가 영어를 뱉은 거였죠.
| 발화 종류 | 노이즈 제거 효과 |
|---|---|
| 긴 문장 | ✅ 도움 (잡음만 걷어냄) |
| 짧은 키워드(0.5초) | ❌ 독 (약한 신호까지 깎아 영어·환각 오인식) |
같은 기능이 발화 길이에 따라 정반대로 작동한 거예요.
키워드 전용 엔진도 써봤지만 접었어요
"그럼 키워드는 아예 다른 방식으로 인식하면?" 싶어서 Vosk라는 엔진을 시도했어요. 인식 후보를 "취소·전송·다시" 같은 키워드로만 한정하면 정확할 줄 알았죠.
그런데 이게 더 위험했어요. 키워드가 아닌 말(잡음이나 창 이름)까지 억지로 "전송"·"취소"로 매핑해버리더라고요. 심지어 "취소"를 "전송"으로 알아듣기도 했고요. 취소하려다 전송되면 큰일이잖아요. 그래서 접었습니다.
해결 — 경로마다 노이즈 제거를 다르게
결론은 단순했어요. 긴 문장(일반 발화)은 노이즈 제거를 켜두고, 짧은 키워드만 노이즈 제거를 끄는 거였죠. 발화 종류에 따라 정반대로 처리하니 영어 오인식이 확 줄었어요.
교훈 — 좋은 도구도 상황 따라 독이 된다
노이즈 제거는 분명 좋은 기능이에요. 하지만 "항상 켜두면 좋다"는 건 없었어요. 짧고 약한 신호에는 오히려 독이었죠.
AI(Claude)는 "노이즈 제거를 켜라"까진 제안했지만, "짧은 키워드에선 그게 역효과" 라는 건 결국 제가 데이터를 뽑아 직접 확인해야 했어요. 도구의 좋고 나쁨은 상황에 달렸더라고요.
다음 편
이번엔 음량이 문제였어요. 소리를 키우면 인식이 좋아질까? 그리고 마주한 무료 모델의 벽 이야기. → 7편 — 소리를 키워도 안 됐다: 무료 모델의 벽
(이전 편: 5편 — Claude가 답했는데 왜 조용하지?)
댓글
댓글 쓰기