음성으로 코딩하기 (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가 답했는데 왜 조용하지?)

댓글