Whisper가 한국어 음성을 글자로 바꾸는 과정
Whisper는 OpenAI가 2022년에 공개한 오픈소스 음성 인식 모델입니다. 인터넷에서 모은 방대한 양의 다국어 음성과 그에 딸린 자막을 학습했고, 한국어도 학습 언어에 포함되어 있습니다. 구조를 간단히 풀면 다음과 같습니다.
- 오디오를 일정한 길이의 구간으로 나누고, 각 구간을 소리의 주파수 분포를 그림처럼 표현한 로그 멜 스펙트로그램으로 바꿉니다.
- 인코더가 이 스펙트로그램에서 소리의 특징을 뽑아냅니다.
- 디코더가 그 특징과 앞서 쓴 글자를 함께 보면서 다음에 올 토큰을 하나씩 예측합니다. 언어 감지, 문장부호, 띄어쓰기도 이 과정에서 함께 결정됩니다.
여기서 눈여겨볼 점은 디코더가 일종의 언어 모델처럼 작동한다는 것입니다. 발음이 조금 뭉개져도 문맥상 자연스러운 단어를 골라 주기 때문에 결과가 매끄럽게 읽힙니다. 반대로 말하면, 실제로 말하지 않은 그럴듯한 단어를 써 넣을 가능성도 있다는 뜻입니다. 기본 개념은 Whisper란 무엇인가 (영어)에서 더 자세히 볼 수 있습니다.
Whisper에는 여러 크기의 모델이 있습니다. large-v3-turbo는 가장 큰 계열인 large-v3를 바탕으로 디코더를 크게 줄여 속도를 높인 버전이고, faster-whisper는 같은 모델을 더 빠르게 돌리도록 다시 구현한 실행 방식입니다. 차이는 Whisper large-v3-turbo 설명 (영어)에 정리되어 있습니다.
한국어 성능을 숫자 하나로 말하기 어려운 이유
"Whisper 한국어 정확도가 몇 퍼센트냐"는 질문을 많이 받지만, 이 질문에 숫자 하나로 답하는 것은 오해를 부르기 쉽습니다. 공개된 평가 결과는 특정 데이터셋, 예를 들어 낭독 음성이나 뉴스 음성으로 잰 값입니다. 여러분의 녹음은 그 데이터셋과 화자, 마이크, 주변 소음, 말하는 속도가 모두 다릅니다.
한국어는 평가 방식 자체도 까다롭습니다. 영어는 단어 오류율(WER)을 흔히 쓰지만, 한국어는 띄어쓰기가 사람마다 달라서 단어 단위로 세면 뜻이 같은데도 오류로 잡히는 경우가 많습니다. 그래서 한국어 연구에서는 음절 단위로 세는 문자 오류율(CER)을 함께 보는 경우가 많습니다. 오류율의 개념은 단어 오류율 설명 (영어)에서 볼 수 있습니다.
결론적으로, 남이 잰 숫자보다 내 녹음 5분으로 직접 확인한 결과가 훨씬 쓸모 있습니다. 확인하는 방법은 아래에서 따로 설명합니다.
띄어쓰기와 문장부호: 뜻은 통해도 검색은 달라진다
Whisper의 한국어 결과에서 가장 흔히 보이는 차이는 띄어쓰기입니다. 모델은 학습 데이터에 있던 자막의 띄어쓰기 습관을 그대로 배웠는데, 인터넷 자막의 띄어쓰기는 맞춤법과 다른 경우가 많습니다.
실제 발화 "회의록 작성은 다음 주까지 해 주세요"가 "회의록작성은 다음주까지 해주세요"로 받아 적힐 수 있습니다. 읽는 데에는 문제가 없지만, 나중에 대본에서 "다음 주"로 검색하면 이 줄이 걸리지 않습니다.
문장부호도 비슷합니다. 말에는 마침표가 없으니 모델이 억양과 쉼을 보고 문장 끝을 추측합니다. 한국어는 "~했는데요", "~거든요"처럼 문장을 끝맺지 않고 이어 가는 말투가 많아서, 한 문장이 지나치게 길게 이어지거나 반대로 짧게 끊기는 일이 생깁니다. 공식 문서로 쓸 대본이라면 맞춤법 검사기를 한 번 돌리고, 사람이 문장 경계를 정리하는 단계를 두는 것이 좋습니다.
고유명사, 외래어, 숫자 표기의 함정
Whisper는 학습 데이터에서 자주 본 단어를 잘 맞힙니다. 반대로 사내 프로젝트명, 신제품 이름, 지역의 작은 가게 이름처럼 데이터에 거의 없었을 단어는 비슷한 발음의 흔한 단어로 바뀌기 쉽습니다.
- 인명: "윤서진"이라는 이름이 발음과 문맥에 따라 "윤석진"이나 "유서진"으로 바뀌어 적힐 수 있습니다. 성과 이름 사이를 띄울지도 일정하지 않습니다.
- 외래어와 영어: "디플로이", "Deploy", "배포"처럼 같은 말이 한글, 영어, 번역어로 섞여 나올 수 있습니다. IT 회의처럼 영어 용어가 많은 녹음에서 특히 두드러집니다.
- 숫자: "삼천오백"이 "3500", "3,500", "삼천오백" 중 어느 형태로 나올지 일정하지 않습니다. 날짜와 금액은 검수할 때 따로 훑어보세요.
이런 오류는 모델의 한계라기보다 정보가 없어서 생기는 문제입니다. 사람 속기사도 처음 듣는 이름은 되묻습니다. 그래서 중요한 고유명사 목록을 미리 만들어 두고 검수 때 찾아 바꾸기로 일괄 수정하는 방식이 효율적입니다.
소음, 겹치는 말, 사투리가 미치는 영향
녹음 환경은 Whisper 한국어 성능에 가장 큰 영향을 주는 요소입니다. 카페 소음, 에어컨 소리, 키보드 타건음 정도는 어느 정도 견디지만, 배경 음악에 가사가 있으면 그 가사까지 받아 적으려 할 수 있습니다.
여러 사람이 동시에 말하는 구간은 더 어렵습니다. Whisper는 한 구간에서 하나의 말 흐름을 받아 적도록 설계되어 있어서, 두 사람의 말이 겹치면 목소리가 큰 쪽만 남거나 두 문장이 뒤섞입니다. 한국 회의 문화에서 흔한 "네네", "아 그렇죠" 같은 맞장구가 다른 사람 말 위에 겹치면 일부가 빠지기도 합니다.
사투리는 화자와 지역에 따라 편차가 큽니다. 억양이 강한 화자라도 어휘가 표준어에 가까우면 잘 인식되는 편이지만, 지역 고유 어휘가 많으면 표준어 단어로 바뀌어 적히는 경우가 있습니다. 이때 결과가 문법적으로는 자연스러워 보여서 오히려 틀린 줄 모르고 넘어가기 쉽습니다.
침묵 구간에서 생기는 엉뚱한 문장
Whisper를 써 본 사람이라면 아무 말도 없는 구간에 "시청해 주셔서 감사합니다" 같은 문장이 찍혀 나오는 경험을 했을 수 있습니다. 학습 데이터에 영상 끝마다 이런 자막이 많았기 때문에, 소리가 거의 없을 때 모델이 그럴듯한 문장을 지어내는 현상입니다. 같은 문장이 여러 번 반복되는 경우도 있습니다.
이 문제를 줄이는 대표적인 방법이 음성 활동 감지(VAD)입니다. 말소리가 있는 구간만 골라 모델에 넣으면 침묵 구간에서 문장을 지어낼 기회 자체가 줄어듭니다. 자세한 원리는 Whisper 환각 현상 (영어)에서 다룹니다.
내 녹음으로 Whisper 한국어 성능을 직접 확인하는 방법
남이 잰 숫자 대신 내 녹음으로 확인하는 간단한 방법을 소개합니다. 30분이면 충분합니다.
- 평소 작업할 녹음 중 대표적인 5분을 고릅니다. 가장 깨끗한 구간이 아니라 실제로 흔한 조건의 구간이어야 합니다.
- 그 5분을 직접 정확하게 받아 적어 정답 대본을 만듭니다.
- 같은 5분을 Whisper 기반 도구로 받아 적습니다.
- 두 대본을 나란히 놓고 띄어쓰기 차이는 제외한 채, 뜻이 달라진 오류만 표시합니다.
- 오류를 고유명사, 숫자, 겹친 말, 소음 구간처럼 유형별로 묶어 봅니다.
이렇게 하면 "내 녹음에서는 사람 이름과 숫자만 고치면 된다"거나 "회의 녹음은 겹치는 구간 때문에 사람 검수가 꼭 필요하다" 같은 실용적인 결론이 나옵니다. 검수 요령은 AI 대본 교정 방법 (영어)에 정리되어 있습니다.
mydubly은 Whisper를 어떻게 쓰는가, 그리고 하지 않는 것
mydubly의 받아쓰기는 faster-whisper large-v3-turbo를 기반으로 하고, 음성 활동 감지로 말이 없는 구간을 건너뜁니다. 원본 언어는 "Source: Auto detect"로 자동 감지되며 직접 고를 수는 없습니다. 한국어와 영어를 섞어 말하는 녹음은 들리는 그대로 받아 적히지만 완벽하지는 않습니다.
영상은 "Drop a video here", 녹음 파일은 "Drop audio here"에 올리고 "Full translation output"(오디오는 "Audio and text output") 토글을 끈 채 "Select language"에서 말하는 언어(한국어 녹음이라면 Korean)를 고르고 "Transcribe video" 또는 "Transcribe audio"를 누르면 됩니다. 이렇게 하면 번역 없이 말한 그대로 받아 적힙니다. 결과는 "Download transcript"(일반 텍스트), "Download timestamped transcript"(시간 정보 포함), "Download subtitles"(SRT)로 받습니다. 휴대폰 음성 메모는 보통 M4A라 그대로 올릴 수 있습니다. 더 많은 내용은 영상 텍스트 변환 (영어) 페이지와 한국어 영상 텍스트 변환 (영어)에 있습니다.
90분짜리 한국어 강의 녹음을 받아 적으면 분당 1크레딧으로 90크레딧($0.09)입니다. 위에서 말한 5분 테스트는 5크레딧이면 되고, 가입 때 받는 100크레딧으로 테스트와 실제 작업을 함께 해 볼 수 있습니다.
하지 않는 일도 분명히 해 두겠습니다. mydubly은 화자를 구분하지 않으므로 대본에 "화자 1", "화자 2" 같은 표시가 붙지 않습니다. 자주 쓰는 고유명사를 미리 등록하는 사용자 단어장 기능도 없고, 앱 안에서 대본을 고치는 편집 화면도 없습니다. 내려받은 파일을 메모장이나 워드에서 고치면 됩니다. 실시간 받아쓰기도 지원하지 않아서 녹음이 끝난 파일만 처리할 수 있습니다. 화자 구분이 왜 별도 기술인지는 화자 분리란 무엇인가 (영어)에서 설명합니다.
결과를 바로 좋게 만드는 녹음 습관
모델을 바꾸는 것보다 녹음 습관을 바꾸는 쪽이 효과가 큰 경우가 많습니다. 녹취록이나 강의 기록처럼 정확도가 중요한 작업이라면 아래 습관을 참고하세요.
- 마이크나 휴대폰을 말하는 사람 가까이 둡니다. 거리가 멀수록 방의 울림이 커집니다.
- 회의에서는 한 번에 한 사람씩 말하도록 진행자가 조율합니다.
- 배경 음악은 녹음 중에 끄고, 필요하면 편집 단계에서 넣습니다.
- 처음 등장하는 이름과 숫자는 또박또박 말합니다.
인터뷰나 법적 기록용 녹취록을 만든다면 녹취록 작성 가이드를, 수업 녹음을 정리한다면 강의 녹음 텍스트 변환을 이어서 읽어 보세요.
자주 묻는 질문
Whisper 한국어 정확도는 몇 퍼센트인가요?
공개된 평가 수치는 특정 데이터셋에서 잰 값이라 여러분의 녹음에 그대로 적용되지 않습니다. 녹음 품질, 화자 수, 소음, 고유명사 비율에 따라 결과가 크게 달라집니다. 대표적인 5분을 직접 받아 적어 비교해 보는 것이 가장 믿을 만한 방법입니다.
Whisper 결과에 띄어쓰기가 틀리는 이유는 무엇인가요?
Whisper는 인터넷 자막을 많이 학습했고, 그 자막들의 띄어쓰기 습관이 맞춤법과 다른 경우가 많습니다. 띄어쓰기는 뜻에는 거의 영향을 주지 않지만 검색에는 영향을 줍니다. 공식 문서로 쓸 대본이라면 맞춤법 검사기로 한 번 정리하는 것이 좋습니다.
아무 말도 안 했는데 '시청해 주셔서 감사합니다'가 찍히는 건 왜인가요?
소리가 거의 없는 구간에서 모델이 학습 데이터에서 자주 본 문장을 지어내는 현상입니다. 말소리가 있는 구간만 골라 처리하는 음성 활동 감지를 쓰면 줄일 수 있습니다. mydubly도 음성 활동 감지로 침묵 구간을 건너뛰지만, 결과를 공개하기 전에는 한 번 훑어보는 것이 좋습니다.
mydubly은 어떤 Whisper 모델을 쓰나요?
mydubly의 받아쓰기는 faster-whisper large-v3-turbo를 기반으로 하고, 음성 활동 감지로 말이 없는 구간을 건너뜁니다. 원본 언어는 자동으로 감지되며 사용자가 직접 지정할 수는 없습니다. 정확도는 녹음 조건에 따라 달라지므로 특정 수치를 약속하지는 않습니다.
Whisper로 화자별로 나눠진 회의록을 만들 수 있나요?
Whisper 자체는 누가 말했는지 구분하지 않고, mydubly도 화자 구분 기능이 없습니다. 시간 정보가 붙은 대본을 받은 뒤 녹음을 들으며 화자 이름을 직접 붙이는 방식이 현실적입니다. 회의 시작 때 참석자가 한 명씩 자기소개를 하면 나중에 목소리를 구별하기 쉽습니다.
사투리가 심한 녹음도 Whisper로 받아 적을 수 있나요?
작업은 가능하지만 결과는 화자와 지역 어휘에 따라 편차가 큽니다. 억양만 강하고 어휘가 표준어에 가까우면 잘 나오는 편이고, 지역 고유 어휘가 많으면 비슷한 표준어 단어로 바뀌어 적힐 수 있습니다. 짧은 구간을 먼저 테스트해 보고 사람 검수를 얼마나 할지 정하세요.
