Whisper 한국어 받아쓰기 CPU 실측(large-v3) — 글자 오류 1.8%, 틀린 곳 대부분은 띄어쓰기·숫자 표기였습니다
다리 공사 이야기를 읽은 사람 목소리를 Whisper에 넣었더니 첫 줄이 이렇게 나왔습니다.
다리 및 수직 간격은 15m이며, …
델포트로가 2세트에서 먼저 어드벤티즈를 얻었지만, 6대6이 된 후 …
정답은 「다리 밑 수직 간격은 15미터이며」, 「먼저 어드밴티지를 얻었지만 6 대 6이 된 후」입니다. 네 군데가 다른데 성격이 다릅니다. 「밑」을 「및」으로 들은 것은 오청취입니다. 「15미터」를 「15m」로, 「6 대 6」을 「6대6」으로 쓴 것은 뜻이 같은 다른 표기입니다.
음성 메모나 녹음을 무료로 한국어 텍스트로 옮기려는 분이라면, GPU 없는 PC에서 Whisper를 돌려도 되는지와 결과를 어디까지 믿어도 되는지가 궁금할 겁니다. 이번 테스트의 답은 이렇습니다. Whisper large-v3는 CPU만으로 깨끗한 한국어 낭독을 글자 오류율 1.8%로 받아썼습니다. 1분 음성에 약 35초가 걸렸습니다. 정답과 달라진 곳 대부분은 띄어쓰기와 숫자 표기였고, 실제로 다르게 들은 곳은 175단어 중 5곳이었습니다. 저라면 녹음 받아쓰기 초안은 large-v3에 맡기고, 조사와 외래어 고유명사만 골라 다시 듣겠습니다.
사람이 읽은 한국어 음성 6클립을 받아쓰게 했습니다
정답이 있는 음성이어야 틀린 곳을 셀 수 있습니다. 그래서 구글이 공개한 다국어 음성 데이터셋 FLEURS(CC BY 4.0)의 한국어 테스트 세트에서 사람이 문장을 읽은 녹음 12개(정렬 순서 앞 12개)를 썼습니다. 두 개씩 이어 붙여 20~30초짜리 클립 6개를 만들었습니다. 합치면 143.4초입니다. 짧은 음성 메모처럼 말이 이어지는 상황에 가깝게 만든 구성입니다.
받아쓰기는 무료 오픈소스 음성인식 모델 Whisper의 가장 큰 크기인 large-v3로 했습니다. faster-whisper 1.2.1로 GPU 없이 CPU에서 돌렸고, 계산 정밀도는 int8, 언어는 한국어(ko)로 고정했습니다. 클립마다 한 번씩, 모두 6번입니다. 측정 시점은 2026년 9월입니다.
점수는 두 가지입니다. 글자 오류율(CER)은 정답 글자(띄어쓰기 제외) 중 몇 자를 고쳐야 정답이 되는지, 단어 오류율(WER)은 띄어쓰기로 나눈 단어 중 몇 개가 틀렸는지입니다. 둘 다 낮을수록 좋습니다. 채점 전에 문장부호는 지웁니다.
클립별 결과: 첫 클립이 가장 나빴습니다
| 클립 | 글자 오류율 | 단어 오류율 | 음성 길이 | 받아쓰기 시간 |
|---|---|---|---|---|
| STT-01 | 5.3% | 27.6% | 23.6초 | 12.9초 |
| STT-02 | 1.2% | 11.1% | 21.8초 | 11.8초 |
| STT-03 | 2.2% | 20.0% | 22.4초 | 12.5초 |
| STT-04 | 1.3% | 11.5% | 21.0초 | 12.1초 |
| STT-05 | 1.0% | 3.1% | 24.1초 | 14.4초 |
| STT-06 | 0% | 6.5% | 30.5초 | 20.2초 |
| 평균 | 1.8% | 13.3% |
실행 중에 첫 클립의 불일치가 찍힌 화면과 여섯 클립을 다 돈 뒤의 집계 화면입니다. 터미널 출력을 마커(측정 스크립트가 중요한 순간에 남기는 한 줄 표시)가 나온 순간에 저장해 렌더한 것입니다.
글자 오류율 1.8%와 단어 오류율 13.3% 사이가 꽤 벌어져 있습니다. 한국어에서는 띄어쓰기 하나만 달라도 단어 두 개가 틀린 것으로 세어지기 때문입니다. 맨 위 첫 줄의 「6대6」이 그 예입니다.
달라진 13곳을 하나씩 나눠 봤습니다
여섯 클립에서 정답과 다르게 나온 곳을 전사와 한 줄씩 대조해 네 가지로 나눴습니다.
| 종류 | 곳 | 예 (정답 → 전사) |
|---|---|---|
| 띄어쓰기만 다름 | 5 | 자그로스산맥 → 자그로스 산맥, 막대그래프 → 막대 그래프, 자유 프랑스군 → 자유프랑스군 |
| 숫자·단위 표기만 다름 | 3 | 일만 → 1만, 두 개 → 2개, 15미터 → 15m |
| 외래어 음차 | 2 | 어드밴티지 → 어드벤티즈, 드래군 → 드래곤 |
| 다른 단어·조사로 들음 | 3 | 다리 밑 → 다리 및, 계획에 없던 → 계획이 없던, 주기율표 상에 → 주기율표상의 |
띄어쓰기와 숫자 표기 차이 8곳만 정답 표기로 되돌리고 같은 채점기로 다시 재면, 평균 단어 오류율은 13.3%에서 4.7%로 내려갑니다. 단어 오류의 3분의 2 가까이가 뜻은 같은 다른 표기였다는 뜻입니다. 음성 메모를 옮길 때 「1만」과 「일만」이 달라서 곤란할 일은 거의 없습니다.
남은 5곳이 실제로 신경 써야 할 부분입니다. 조사 쪽 3곳이 까다롭습니다. 「계획에 없던」이 「계획이 없던」이 되면 문장이 자연스러워서 그냥 읽고 넘어갑니다. 「밑」과 「및」도 둘 다 흔한 말이라 문맥만으로는 걸리지 않습니다. 외래어 2곳은 사람 이름이나 작전명처럼 원래 표기가 정해진 말이었습니다.
잘한 쪽도 있었습니다. 「802.11a, 802.11b와 802.11g」처럼 숫자와 영문이 섞인 규격명이 들어간 STT-06은 글자 오류 0%였습니다. 다만 STT-04와 STT-05 전사에는 쉼표와 마침표가 하나도 없었습니다. 채점에서는 문장부호를 지워서 점수에 안 나오지만, 긴 녹음이라면 문장 경계를 사람이 다시 나눠야 합니다.
속도: 1분 음성에 약 35초
AMD Ryzen 5 5600X CPU에서 음성 143.4초를 받아쓰는 데 추론만 83.79초가 걸렸습니다. 모델을 처음 올리는 첫 클립을 빼면 실시간 배율(RTF, 받아쓰기 시간 ÷ 음성 길이)이 0.592입니다. 1분 음성이면 약 35초, 1시간 녹음이면 같은 속도로 약 35분입니다. 첫 클립은 모델 적재에 8.6초가 더 들어 전체 21.51초였습니다.
이 주소의 7월 기록과도 대조했습니다. 같은 6클립을 같은 설정으로 받아쓴 이번 전사 6개는 7월 것과 바이트까지 같았습니다. 속도는 7월 RTF 0.555로 이번보다 조금 빨랐습니다. 같은 음성과 같은 설정이면 받아쓴 글자는 같고, 걸리는 시간은 그때그때 조금 달라집니다.
작은 모델은 왜 안 쓰나: 7월 기록
이번 9월 런에서는 large-v3만 다시 쟀습니다. 같은 주소의 7월 기록에는 같은 6클립을 다른 크기 네 개로 받아쓴 결과가 있습니다. 설정은 같은 CPU·int8·한국어·beam 5입니다.
| 7월 기록 | 평균 글자 오류율 | 예열 제외 RTF |
|---|---|---|
| tiny | 38.6% | 0.072 |
| base | 16.9% | 0.045 |
| small | 16.1% | 0.122 |
| large-v3-turbo | 9.7% | 0.394 |
| large-v3 | 1.8% | 0.555 |
작은 모델은 빠르지만 평균만 나쁜 게 아니라 깨지는 모양이 달랐습니다. tiny는 여섯 번째 클립에서 글자 없이 쉼표만 늘어놓았습니다. small은 같은 클립에서 「2주 만에」를 「이중한의」로 적고 뒷문장을 한 번 더 되풀이했습니다. large-v3-turbo는 대부분의 클립에서 large-v3와 비슷했지만(중앙 글자 오류율 1.7%), 다섯 번째 클립의 마지막 문장을 세 번 되풀이해 적었습니다. 평균 9.7%는 그 한 클립이 끌어올린 값입니다.
되풀이는 점수보다 실사용에서 더 곤란합니다. 문장 하나가 세 번 찍혀 있으면 원문을 다시 듣기 전에는 원래 세 번 말한 건지 알 수 없습니다.
녹음을 무료로 받아쓸 때 저는 이렇게 하겠습니다
- GPU가 없으면 large-v3를 CPU로 씁니다. 1분에 약 35초라 기다릴 만하고, 글자 오류율이 7월 기록의 다른 크기보다 크게 낮았습니다.
- 결과에서 띄어쓰기와 숫자 표기는 굳이 고치지 않습니다. 단어 오류의 3분의 2 가까이가 여기서 나왔지만 뜻은 같았습니다.
- 조사와 비슷한 말은 원문을 다시 듣습니다. 「계획에/계획이」, 「밑/및」은 틀려도 문장이 자연스러워서 읽기만으로는 못 잡습니다. 결정이나 숫자가 걸린 문장부터 확인합니다.
- 사람 이름·작전명 같은 외래어 고유명사는 원래 표기를 찾아 바꿉니다. 「어드밴티지」, 「드래군」이 다른 표기로 나왔습니다.
- 작은 모델이나 turbo를 쓴다면 같은 문장이 반복되는지 봅니다. 7월 기록에서 small과 turbo가 문장을 되풀이했고, tiny는 쉼표만 남겼습니다.
이미지 속 글자를 텍스트로 옮기는 쪽은 무료 OCR 한국어 실측에 따로 정리했습니다.
재현과 원자료
받아쓰기와 채점은 run_whisper_bench.py가 하고, 채점 함수는 stt_score.py입니다. 이번 기록의 기준 파일은 test_runs/whisper-large-v3-20260924/run.yaml이고, 같은 폴더에 클립별 전사(01-output.txt~06-output.txt), 호출 설정·입력 해시(NN-invocation.log), 결과 원본(results.json), 13곳 분류와 재채점 값(error_breakdown.json)이 있습니다. 7월 다섯 크기 기록은 test_runs/whisper-stt-score-20260702.json입니다. 이 경로들은 비공개 작업 폴더라 외부에서 열 수 없습니다. 본문의 실행 중 터미널 화면 두 장이 직접 확인할 수 있는 표본입니다.
재현: cinevyze-bench의 run_whisper_bench.py·stt_score.py. 입력 음성은 FLEURS 한국어 테스트 세트에서 받을 수 있고, 실행 기록은 공개하지 않습니다.
음성 출처: Google FLEURS 데이터셋(ko_kr test), CC BY 4.0.
깨끗하게 녹음된 낭독 음성 6클립의 결과라, 잡음이 있는 곳에서 녹음한 메모, 사투리·빠른 말, 여러 사람이 겹쳐 말하는 회의 녹음에는 그대로 옮길 수 없습니다.
받아쓰기와 채점은 로컬 PC의 CPU에서 Whisper large-v3로 실제로 돌렸습니다. 측정 코드 작성, 전사와 정답의 차이 분류, 글 작성에 AI 도구를 썼습니다. 발행 전 검수는 제가 합니다.
시네 · cinevyze 운영자 — AI 도구의 출력을 원본과 판정 기준에 대조합니다. 이번 측정은 AMD Ryzen 5 5600X CPU가 있는 Linux PC에서 faster-whisper 1.2.1(Whisper large-v3, CPU int8, GPU 미사용)로 했고, 측정 시점은 2026년 9월입니다. 운영자 소개
댓글
댓글 쓰기