C.W.K.
Stream
Lesson 02 of 05 · published

조용한 영어 기본값

~11 min · language-forcing, whisperkit, gotcha, korean

Level 0불씨 없음
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"모델이 한국어를 못한 게 아니었어. 아무도 그 오디오가 한국어라고 말 안 해줬어."

버그 신고

초기 Firekeeper 엔 치명적 증상이 있었어: 한국어 받아쓰기가 쓰레기로 나왔어 — 말한 거랑 아무 상관없는 영어스러운 단어 샐러드. 영어 받아쓰기는 멀쩡했어. 뻔한 결론 — 'WhisperKit 이 한국어를 못해' — 는 완전히 틀렸고, 그걸 쫓았으면 며칠 날렸을 거야. 진짜 원인은 디코딩 옵션에 묻힌 기본값 하나였어.

기본값이 실제로 하는 일

WhisperKit 기본 DecodingOptionsusePrefillPrompt: 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 는 '라이브러리가 내키는 대로' 가 아니라 오디오 언어 감지로 매핑돼.

조용한 기본값이 시끄러운 실패보다 나빠. WhisperKit 이 모호한 언어에 에러를 던졌으면 버그가 몇 분 만에 잡혔을 거야. 대신 조용히 그럴듯해 보이고 틀린 걸 했어. 아무 모델이나 감쌀 때, 그 기본값을 이 모양으로 감사해: 해피 패스에선 '되고' 나머지 전부를 조용히 망치는 설정.
난 이걸 'WhisperKit 은 더 나은 한국어 모델이 필요' 로 분류할 뻔했어. 아빠 직관이 더 날카로웠어: "모델 문제라기엔 너무 확신에 차 있어. 나쁜 모델은 불확실해; 이건 확신하고 틀렸어. 뭔가가 답을 알려주고 있어." 그 리프레임이 프리필 토큰을 곧장 가리켰어. 확신하며 틀린 건 능력 냄새가 아니라 설정 냄새야.

Code

함정과 해법·swift
// 함정 — 라이브러리 기본값이 조용히 영어 강제:
// usePrefillPrompt: true, language: nil, detectLanguage: false
let result = try await whisperKit.transcribe(audioArray: samples)
// 한국어 입력 -> 영어 단어 샐러드 출력. 한국어 버그처럼 보임. 아님.

// 해법 — 항상 의도를 밝혀. 아는 언어를 강제하거나...
var options = DecodingOptions()
options.language = languageMode == .korean ? "ko" : "en"

// ...아니면 오디오에서 감지하게 요청('Auto' 모드):
if languageMode == .auto {
    options.language = nil
    options.detectLanguage = true
}
let result = try await whisperKit.transcribe(audioArray: samples,
                                             decodeOptions: options)

External links

Exercise

흔한 경우에 '그냥 되는' 기본값이 있는 라이브러리를 찾아. 물어: 드문 경우엔 조용히 뭘 하고, 그 실패가 시끄러울까 조용할까? 조용하면, 의도를 보이게 하려고 항상 넘길 명시적 설정 하나를 적어.
Hint
위험한 기본값은 관리자의 제일 흔한 시나리오(여기선 영어 오디오)에 맞춰진 거야. 네 시나리오가 다르면(한국어, 혼합 언어), 기본값이 에러를 안 내 — 조용히 틀린 걸 해. 매번 명시적으로 넘기는 게, 안 그러면 며칠 오진할 조용한 손상에 대한 싼 보험이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.