"모델이 한국어를 못한 게 아니었어. 아무도 그 오디오가 한국어라고 말 안 해줬어."
버그 신고
초기 Firekeeper 엔 치명적인 증상이 있었어. 한국어 받아쓰기가 쓰레기로 나온 거야. 말한 거랑 아무 상관 없는 영어스러운 단어 샐러드. 영어 받아쓰기는 멀쩡했고. 누가 봐도 나올 법한 결론, 'WhisperKit 이 한국어를 못해' 는 완전히 틀렸어. 그걸 쫓았으면 며칠 날렸을 거고. 진짜 원인은 디코딩 옵션에 묻혀 있던 기본값 하나였어.
기본값이 실제로 하는 일
WhisperKit 기본 DecodingOptions 는 usePrefillPrompt: true, language: nil, detectLanguage: false 야. 셋을 같이 읽으면 함정이 딱 보여. 프리필은 켜져 있고, 언어는 안 정해 놨고, 감지는 꺼져 있어. 그러니 디코더가 영어 언어 토큰을 미리 채워 넣고 다시는 되돌아보지 않아. 모든 발화가 영어로 강제 디코딩되는 거야. 한국어를 먹이면 한국어 소리를 영어 단어로 알아들으려고 최선을 다해. 그 출력은 한국어 전사가 실패한 게 아냐. 애초에 영어가 아니었던 오디오를 완벽하게 영어로 전사한 결과지.
usePrefillPrompt: true + language: nil + detectLanguage: false
| | |
v v v
언어를 프리필함 네가 안 골랐음 자동 감지도 안 함
\_____________________|________________________/
v
영어 토큰으로 기본값 -> 한국어가 영어로 디코딩됨
해법은 의도 한 줄
WhisperKit 한테는 항상 언어를 알려줘야 해. 방법은 둘이야. 아는 경우엔 language 를 "ko" 나 "en" 으로 명시하고, 오디오에서 알아내게 하고 싶으면 detectLanguage: true 를 두는 거지. 조용한 기본값은 절대 배포하지 마. Firekeeper 는 이걸 설정에서 언어 모드로 꺼내 놨어. Auto, 한국어, English. 그리고 Auto 는 '라이브러리 마음대로' 가 아니라 오디오 언어 감지에 연결돼 있고.