로컬 Whisper 자막에서 ‘말미잘이’가 ‘말미자리’로 붙어 나온 같은 음성 파일에, 받아쓰기 시작 문맥(initial_prompt)만 바꿔 두 번씩 다시 받아 적었습니다. 프롬프트가 없으면 두 번 모두 ‘말미자리’였고, 용어 목록을 넣으면 두 번 모두 ‘말미잘이’로 맞았습니다. 그런데 ‘말미잘’이 빠진 용어 목록, 그리고 용어가 하나도 없는 일반 문장을 넣어도 같은 단어가 고쳐졌습니다. 이번 파일에서는 “그 단어를 알려 줘서 고쳐졌다”고 말할 수 없었고, 프롬프트 문장에 따라 문장부호와 띄어쓰기가 달라졌습니다.
어떤 문제였나요?
10월 22일 글 TTS 자동자막, 숫자는 맞았는데 ‘말미잘이’가 ‘말미자리’로에서, 우리가 만든 21초 한국어 해설의 자동자막이 “거대한 심해 말미잘이 바위에”를 “거대한 심해 말미자리 바위에”로 적었습니다. 그때는 대본대로 자막 글자만 고쳤습니다. 이번에는 고유명사나 전문용어를 알려 주는 Whisper의 initial_prompt 옵션으로 이 오류를 처음부터 줄일 수 있는지 확인했습니다.
어떻게 시험했나요?
- 음성: 10월 22일 영상에 실제로 쓴 내레이션 파일 그대로입니다(로컬 VoxCPM2로 만든 합성 음성, 21.12초). 새로 녹음하거나 합성하지 않았습니다.
- 받아쓰기: 로컬 Whisper large-v3-turbo(mlx-whisper 0.4.3), 언어 한국어 지정, 단어 시간 켬, 후편집 없음. 16kHz 모노로 바꾼 같은 입력을 썼습니다.
- 바꾼 것: initial_prompt 하나입니다. 조건마다 2회씩, 모두 2026년 10월 25일 밤에 돌렸습니다.
- A: 프롬프트 없음
- B:
용어: 말미잘, 알래스카만, 흡입 채집기, 심해. - C:
용어: 알래스카만, 흡입 채집기, 심해.(B에서 ‘말미잘’만 뺌) - D:
다음은 한국어 내레이션입니다.(용어 없음)
결과는 어땠나요?
| 조건 | ‘말미잘이’ 부분 | 그 밖의 차이(대본 기준) | 2회 결과 |
|---|---|---|---|
| A 프롬프트 없음 | 말미자리 (틀림) | 대본의 쉼표 3개 모두 빠짐, ‘붙어있던’으로 붙여 씀 | 2회 같음 |
| B 용어 목록 | 말미잘이 (맞음) | ‘물체,’ 쉼표는 살아남, ‘년,’·’뒤,’ 쉼표 2개 빠짐 | 2회 같음 |
| C ‘말미잘’ 뺀 목록 | 말미잘이 (맞음) | B와 글자 하나까지 같음(‘년,’·’뒤,’ 쉼표 2개 빠짐) | 2회 같음 |
| D 일반 문장 | 말미잘이 (맞음) | 쉼표 3개와 ‘뭘까요?’의 물음표 빠짐, ‘3250m 에서’로 띄어 씀 | 2회 같음 |
네 조건 모두 같은 조건 안에서는 두 번 결과가 글자 하나까지 같았습니다. 구간별 기록을 남긴 A·B에서는 모든 구간이 온도 0으로 한 번에 받아 적혔고, 다시 시도하는 단계는 없었습니다(C·D는 받아쓴 글자만 저장했습니다). 대본에는 ‘이천이십삼 년’, ‘삼천이백오십 미터’처럼 한글로 썼지만, 네 조건 모두 ‘2023년’, ‘3250m’로 숫자 표기했습니다. 표의 비교는 이 숫자 표기 차이를 뺀 나머지입니다.
그래서 용어를 알려 줘서 고쳐진 건가요?
이번 파일로는 그렇게 말할 수 없습니다. ‘말미잘’을 뺀 목록(C)과 용어가 없는 일반 문장(D)도 같은 단어를 고쳤기 때문입니다. 이 파일에서는 특정 단어보다 “앞에 문맥이 있느냐 없느냐”가 결과를 바꾼 것으로 보입니다. 다만 왜 그런지는 모델 내부를 들여다보지 않았기 때문에 확인하지 못했습니다. 프롬프트 문장의 모양은 문장부호에도 영향을 주었습니다. 쉼표가 들어간 용어 목록(B, C)은 대본의 쉼표 3개 중 1개를 살렸고, 쉼표 없는 일반 문장(D)은 쉼표를 모두 빠뜨리고 물음표까지 빠뜨렸습니다. 다만 프롬프트에 쉼표가 있어서 그렇다는 것은 따로 시험하지 않았습니다.
공식 문서는 어떻게 안내하나요?
OpenAI의 Whisper 코드 설명에는 initial_prompt가 “첫 구간에 주는 문맥”이며, 사용자 단어 목록이나 고유명사를 넣어 그 단어를 더 잘 맞히게 하는 데 쓸 수 있다고 적혀 있습니다. 첫 구간에만 들어가고, 모든 구간에 계속 넣으려면 별도 옵션(carry_initial_prompt)이 있습니다. OpenAI 음성 인식 가이드는 whisper-1의 prompt가 224토큰까지이고, Whisper는 일반 텍스트 모델처럼 지시를 따르지 않으며, 정확한 철자 목록을 넣는 방법과 받아쓴 뒤 텍스트 모델로 철자를 고치는 방법을 소개합니다(2026년 10월 25일 다시 확인). 이번 시험은 OpenAI 서비스가 아니라 로컬 mlx-whisper로 했으므로, 서비스에서 같은 결과가 나온다는 뜻은 아닙니다. 출처: openai/whisper transcribe.py, OpenAI Speech to text 가이드.
이 결과로 말할 수 없는 것
- 음성 파일 1개, 틀린 단어 1곳, 조건별 2회의 결과입니다. 다른 음성·다른 단어에서도 아무 프롬프트나 넣으면 고쳐진다고 말할 수 없습니다.
- 음성은 사람이 아니라 합성 음성입니다. 실제 사람 녹음에서는 다를 수 있습니다.
- 프롬프트가 고친 이유(문맥 효과인지, 문장부호 효과인지)는 따로 분리하지 않았습니다.
- 프롬프트에 없는 단어를 새로 지어내는지, 긴 영상의 뒷부분에도 효과가 있는지는 이 21초 파일로는 확인할 수 없습니다.
- 자막 글자를 대본과 비교했을 뿐, 사람이 다시 들으며 발음을 판정한 것은 아닙니다.
따라 해 볼 순서
- 자동자막을 대본과 나란히 놓고 틀린 단어를 찾습니다.
- 같은 음성 파일로 프롬프트 없이 한 번, 용어 목록을 넣어 한 번 받아 적습니다. 예:
mlx_whisper.transcribe(wav, path_or_hf_repo=모델, language="ko", initial_prompt="용어: 말미잘, 알래스카만.") - 고쳐졌다면, 그 단어를 뺀 목록이나 일반 문장으로도 한 번 더 돌려 무엇이 효과를 냈는지 확인합니다.
- 틀린 단어뿐 아니라 문장부호·띄어쓰기·숫자 표기도 대본과 다시 비교합니다. 프롬프트가 다른 곳을 바꿀 수 있습니다.
- 남은 오류는 대본을 기준으로 자막 글자를 직접 고치고, 최종 영상에서 자막을 다시 확인합니다.
자주 묻는 질문
Whisper initial_prompt에 용어를 넣으면 고유명사 오류가 줄어드나요?
이번 파일에서는 용어 목록을 넣자 두 번 모두 맞게 나왔습니다. 하지만 그 단어를 뺀 목록과 일반 문장도 같은 단어를 고쳤기 때문에, 용어를 넣은 덕분이라고 단정할 수는 없었습니다.
프롬프트를 넣으면 다른 부분이 망가지지는 않나요?
이번 시험에서는 일반 문장 프롬프트가 ‘말미잘이’는 고쳤지만 물음표를 빼고 ‘3250m 에서’로 띄어 썼습니다. 용어 목록 두 가지도 대본의 쉼표 2개를 빠뜨렸습니다. 프롬프트를 바꿀 때마다 자막 전체를 대본과 다시 비교하는 편이 안전했습니다.