AI 활용

Whisper는 금액 숫자를 틀린다: small·medium에서 불일치, large-v3에서 일치한 받아쓰기 설정

Whisper는 금액 숫자를 틀린다: small·medium에서 불일치, large-v3에서 일치한 받아쓰기 설정

안녕하세요, まさきん입니다.

학원 체험 설명을 녹음해서 Whisper로 받아쓰기를 했습니다. 문장은 그럴듯하게 읽히는데 금액 숫자만 달랐습니다. 녹음을 가계의 판단 재료로 삼는 사람에게는 관계가 있는 이야기라고 생각해서, 공식 정보와 함께 정리해 둡니다.

※ 글 공개 시점의 정보입니다. 최신 조건은 공식 사이트에서 확인해 주세요.

POINT
  • 약 11분짜리 설명 녹음을 faster-whisper로 받아쓰니, small에서는 금액이 전부 달랐다
  • medium에서도 요금 숫자는 다른 숫자인 채였고, large-v3에서 겨우 전단지와 일치했다
  • initial_prompt에 힌트를 넣었더니 조용한 구간에서 프롬프트 자체가 반복 출력되었다
  • 금액 확인은 해당 부분만 잘라 내서 large-v3에 돌리는 것이 안전하다고 생각한다
  • 설정은 prompt 없음과 condition_on_previous_text=False를 기본으로 하고, 마지막에는 종이와 대조한다

받아쓰기는 금액 숫자를 잘못 듣는다

어느 학원의 체험 설명을 약 11분 녹음했습니다. 나중에 월 회비 등을 차분하게 비교하고 싶었기 때문입니다.

받아쓰기에는 faster-whisper를 썼습니다. 나온 문장은 이야기의 흐름으로서는 자연스럽게 읽힙니다. 다만 나눠 받은 전단지와 나란히 놓아 보니 금액이 맞지 않았습니다.

예를 들어 수천 엔대인 월 회비의 천의 자리가 다른 숫자로 되어 있었습니다. 문장으로서는 성립하기 때문에 전단지가 없었다면 알아채지 못했을 것 같습니다.

small과 medium에서는 숫자가 달랐다

처음에 쓴 것은 small입니다. 금액으로 나온 숫자는 전부 전단지와 달랐습니다.

다음으로 medium으로 다시 받아썼습니다. 여기에서도 요금 숫자는 다른 숫자로 되어 있었습니다. 크기를 한 단계 올리면 고쳐진다는 이야기가 아니었던 거죠.

까다로운 것은 틀린 것이 틀려 보이지 않는다는 점입니다. “월 회비는 ○천 엔입니다”라는 형태는 유지됩니다. 숫자만 바뀌어 있어서 읽으면서 걸리는 데가 없습니다.

large-v3로 잘라 낸 구간은 전단지와 일치했다

마지막으로 금액을 말하는 부분만 잘라 냈습니다. 그 짧은 음성을 large-v3로 받아쓰니 전단지의 금액과 일치했습니다.

그래서 제 환경에서는 “숫자 확인은 large-v3”라는 결과가 되었습니다. 그렇다고는 해도 이것은 녹음 하나에서의 이야기입니다. large-v3라면 반드시 맞는다고까지는 말할 수 없다고 생각합니다.

확인할 수 있었던 것은 종이 전단지가 손에 있었기 때문입니다. 받아쓰기만으로 금액을 확정하지 않았던 것은 결과적으로 잘한 일이었을지도 모릅니다.

모델 크기 비교(공식 README의 수치)

OpenAI의 Whisper 공식 저장소에는 모델 크기 목록이 실려 있습니다. README의 표를 그대로 정리했습니다.

크기파라미터 수필요 VRAM 기준상대 속도
tiny39 M약 1GB약 10배
base74 M약 1GB약 7배
small244 M약 2GB약 4배
medium769 M약 5GB약 2배
large1550 M약 10GB1배
turbo809 M약 6GB약 8배

상대 속도는 large를 1로 했을 때의 기준입니다. README에는 A100이라는 GPU로 영어 음성을 받아써서 잰 값이라고 적혀 있습니다. 언어나 말하는 속도나 장비에 따라 실제 속도는 크게 달라진다는 주의도 있었습니다.

표의 large에는 버전이 있습니다. 모델 카드에 따르면 2022년 12월에 large-v2가 나왔습니다. large-v3는 2023년 11월에 공개되었습니다.

turbo는 2024년 9월에 추가되었습니다. README에서는 large-v3를 최적화한 버전이라고 설명합니다. 정확도 저하는 최소한이고 속도가 올라간다고 합니다. 참고로 turbo의 파라미터 수는 README에서는 809 M이지만 모델 카드에서는 798 M이었습니다.

faster-whisper는 무엇이 다른가

faster-whisper는 Whisper를 다른 추론 엔진으로 돌리는 재구현입니다. 공식 README에서는 CTranslate2라는 고속 추론 엔진을 쓴다고 설명합니다.

같은 README에는 원본과 같은 정확도로 최대 4배 빠르다고 적혀 있었습니다. 메모리 사용량도 적다고 합니다. 8비트 양자화로 효율을 더 올릴 수 있다고도 되어 있습니다.

모델 이름은 WhisperModel("large-v3")처럼 지정합니다. 이 형태로 쓰면 변환이 끝난 모델이 자동으로 다운로드된다고 합니다.

initial_prompt와 condition_on_previous_text의 의미

이번에 관계된 설정은 두 가지입니다. 둘 다 원본과 faster-whisper 양쪽에 있는 것입니다.

initial_prompt는 첫 번째 윈도에 넘기는 힌트 문장입니다. 원본 소스의 설명에서는 고유 명사나 독자적인 어휘를 맞히기 쉽게 하는 사용법이 예로 올라 있습니다.

condition_on_previous_text는 직전의 출력을 다음 구간의 힌트로 돌릴지 여부입니다. 기본값은 True로 되어 있습니다. 설명문에는 끄면 구간마다 표기가 들쭉날쭉해질 수 있다고 되어 있습니다. 한편 같은 문장의 반복 같은 실패 루프에 빠지기 어려워진다고도 적혀 있었습니다.

설정의미(공식 설명)금액 확인 시의 추천
모델 크기클수록 느리고 필요한 메모리도 늘어난다해당 부분만 large-v3
initial_prompt첫 번째 윈도에 넘기는 힌트 문장넣지 않는다
condition_on_previous_text직전의 출력을 다음 구간의 힌트로 삼는다(기본값은 True)False로 한다
vad_filter목소리가 없는 부분을 제거한다(faster-whisper)True로 한다
language말하고 있는 언어를 지정한다ja를 지정한다

오른쪽 열은 공식 설명과 이번 경험을 바탕으로 제가 고른 것입니다. 공식이 이 조합을 권하고 있다는 뜻은 아닙니다.

가입하지 않아도 100포인트를 받는 요금 시뮬레이션 녹음으로 요금을 확인하는 김에, 매달 휴대폰 요금도 라쿠텐 모바일에서 비교해 보기

누르면 라쿠텐 로그인 페이지가 열립니다. 로그인하면 캠페인 내용이 표시됩니다.

프롬프트를 넘겼더니 프롬프트 자체가 반복되었다

숫자를 맞혀 주었으면 해서 initial_prompt에 힌트를 넘겨 보았습니다. 그러자 조용한 클립에서 프롬프트 자체를 반복하는 출력이 나왔습니다.

말하지 않은 단어가 글자로 늘어서 있었던 셈입니다. 금액을 확인하고 싶은데 힌트의 문구가 그대로 돌아온다. 이래서는 확인이 되지 않습니다.

그래서 금액을 확인할 때는 프롬프트를 넣지 않는 편이 안전하다고 생각하고 있습니다. 힌트에 숫자를 적으면 그것이 출력에 섞일 우려도 있다고 생각합니다.

할루시네이션에 관한 공식 기술

말하지 않은 단어가 나오는 현상은 공식 모델 카드에도 적혀 있습니다. 할루시네이션이라고 불리는 것입니다.

모델 카드에 따르면 Whisper는 대량의 잡음 섞인 데이터로 학습했습니다. 그 때문에 음성에서 실제로는 말하지 않은 문장이 출력에 포함되는 경우가 있다고 합니다.

반복에 대해서도 기술이 있었습니다. 모델의 구조상 같은 문장을 반복해서 생성하기 쉽다고 합니다. 빔 서치 등으로 어느 정도는 억제할 수 있지만 완전하지는 않다고 되어 있습니다.

주의

받아쓰기의 오류는 그럴듯한 문장의 형태로 나옵니다. 숫자가 달라도 문장으로서 읽혀 버리는 것이 가장 큰 함정이라고 느끼고 있습니다.

무음 구간은 vad_filter로 제거할 수 있다

faster-whisper에는 VAD 필터라는 기능이 있습니다. 목소리가 들어 있지 않은 부분을 받아쓰기 전에 제거하는 구조입니다. 공식 README에서는 Silero VAD라는 모델을 내장하고 있다고 설명합니다.

사용법은 vad_filter=True를 더하기만 하면 됩니다. 기본 동작은 소극적이어서 2초보다 긴 무음만 제거한다고 적혀 있었습니다. 세세한 조정은 vad_parameters로 할 수 있습니다.

또 하나, hallucination_silence_threshold라는 설정도 있습니다. 단어 단위의 타임스탬프를 켰을 때 쓸 수 있는 것입니다. 할루시네이션이 의심되는 장면에서 지정한 초 수보다 긴 무음을 건너뛴다고 설명되어 있었습니다.

일본어의 정확도에 관한 공식 기술

공식 README에는 정확도가 언어에 따라 크게 달라진다고 적혀 있습니다. large-v3와 large-v2의 언어별 성적은 그림으로 나타나 있었습니다.

모델 카드에는 학습 데이터의 내역도 있습니다. 68만 시간 가운데 65%가 영어 음성과 영어 전사입니다. 영어 이외의 음성과 그 언어의 전사는 17%라고 되어 있습니다.

데이터가 적은 언어에서는 정확도가 떨어진다는 기술도 있었습니다. 할루시네이션이나 반복도 그런 언어에서는 악화될 가능성이 높다고 합니다. 일본어가 어느 정도인지를 나타내는 숫자는 이 글에서는 들지 않았습니다.

용도별 구분 사용

전부를 large-v3로 받아쓸 필요는 아마 없습니다. 이야기의 흐름을 파악하는 것뿐이라면 가벼운 모델로도 충분한 장면이 많다고 생각합니다.

용도모델범위확인 방법
전체 흐름을 파악한다·요약한다가벼운 모델녹음 전체세부는 너무 믿지 않는다
금액·날짜·횟수를 확인한다large-v3해당 부분만종이나 공식 자료와 대조한다
계약에 관한 조건을 확인한다large-v3해당 부분만마지막에는 자기 귀로 다시 듣는다

핵심은 숫자가 나오는 부분만을 따로 다루는 것입니다. 전체 받아쓰기는 “어디에서 금액 이야기를 했는가”를 찾는 지도로 쓸 수 있습니다.

금액만 확인하는 순서

제가 한 흐름을 순서의 형태로 만들면 이렇게 됩니다.

  1. 가벼운 모델로 전체를 받아쓰고, 금액 이야기가 나오는 시각을 메모한다
  2. ffmpeg로 그 구간만 잘라 낸다
  3. 잘라 낸 음성을 large-v3로 받아쓴다
  4. 프롬프트는 넘기지 않고, condition_on_previous_text는 False로 한다
  5. 나온 숫자를 전단지나 서면과 대조한다

잘라 내기는 ffmpeg로 한 줄입니다. 공식 문서에 따르면 -i 앞에 둔 -ss는 시작 위치를 가리킵니다. 마찬가지로 -t는 읽어 들일 길이입니다. 아래 예는 5분 30초 위치에서 60초 분량을 꺼냅니다.

ffmpeg -ss 00:05:30 -t 60 -i recording.m4a clip.wav

받아쓰는 쪽은 공식 README의 작성법을 바탕으로 하면 이렇게 됩니다. GPU가 없는 경우의 작성법도 README에 있어서 그쪽에 맞췄습니다.

from faster_whisper import WhisperModel

model = WhisperModel("large-v3", device="cpu", compute_type="int8")
segments, info = model.transcribe(
    "clip.wav",
    language="ja",
    condition_on_previous_text=False,
    vad_filter=True,
)
for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

README에는 주의 사항이 하나 있었습니다. segments는 제너레이터이므로 루프로 돌렸을 때 비로소 처리가 실행된다고 합니다.

흔한 실수·함정

이번 일을 돌아보면 걸려 넘어지기 쉬운 점은 이 정도라고 생각합니다.

저에게 해당된 것은 위의 세 가지입니다. 마지막 하나는 전단지를 나눠 주었기 때문에 살았습니다.

구두 설명뿐이고 자료가 없는 장면도 있다고 생각합니다. 그 경우에는 금액만 그 자리에서 메모해 두는 것이 확실할 수 있습니다. 녹음은 어디까지나 다시 듣기 위한 재료네요.

시작하기 전에 확인할 것

설명 녹음을 받아쓰기로 확인하고 싶은 분을 위해 정리했습니다.

특히 두 번째가 중요하다고 생각합니다. 대조할 상대가 있는 것만으로 받아쓰기의 사용법이 훨씬 편해집니다.

받아쓰기를 가계의 판단에 쓸 때의 거리감

설명회나 계약 설명은 정보가 많아서 다 기억할 수 없습니다. 녹음해서 글자로 만들면 나중에 차분하게 비교할 수 있습니다. 이것은 매우 편리하다고 생각합니다.

다만 가계의 판단에서 효과를 내는 것은 금액과 날짜입니다. 거기가 가장 틀리기 쉽다는 것이 이번의 발견이었습니다. 편리한 부분과 믿을 수 있는 부분은 같지 않았던 거죠.

업무에서도 숫자는 원래 데이터를 찾아서 확인합니다. 요약은 흐름을 파악하는 데 쓰고, 숫자는 원본에서 본다. 집 안에서도 같은 선 긋기로 괜찮은 것일지도 모릅니다.

종이 정보를 다루는 이야기는 학교 가정통신문을 캘린더에 등록하는 구조에서도 썼습니다. AI에 맡기는 범위의 선 긋기는 로그인이 필수인 예약을 AI에 부탁한 이야기가 가깝다고 생각합니다. 통화 내용을 정리하는 기능에 대해서는 Rakuten Link의 AI 통화 요약 기능 글도 있습니다.

CHECK
  • 전체 흐름: 가벼운 모델로 받아써서 요약이나 검색에 쓴다
  • 금액과 날짜: 해당 부분을 잘라 내서 large-v3로 받아쓴다
  • 최종 확인: 종이나 공식 자료와 나란히 놓는다. 없으면 자기 귀로 다시 듣는다

자주 묻는 질문

Q. Whisper는 왜 숫자를 틀리나요?

이유를 분명하게 적은 공식 기술은 찾지 못했습니다. 모델 카드에는 말하지 않은 문장이 출력에 포함되는 경우가 있다고 적혀 있습니다. 숫자에 한정된 설명이 아니므로 원인은 단정하지 않겠습니다.

Q. small과 medium 중 어느 쪽이 정확한가요?

공식 README에서는 크기마다 속도와 정확도의 트레이드오프가 있다고 합니다. 제 녹음에서는 둘 다 금액 숫자가 달랐습니다. 숫자 확인이 목적이라면 크기 비교보다 대조를 우선하는 것이 좋아 보입니다.

Q. large-v3라면 금액은 반드시 맞나요?

반드시 맞는다고는 말할 수 없다고 생각합니다. 저의 경우에는 잘라 낸 구간에서 전단지와 일치했습니다. 그렇다고는 해도 녹음 하나에서의 결과이므로 종이와의 대조는 생략하지 않는 편이 안전합니다.

Q. turbo와 large-v3는 어떻게 다른가요?

공식 README에서는 turbo가 large-v3를 최적화한 버전이라고 합니다. 정확도 저하는 최소한이고 상대 속도는 약 8배라는 기준입니다. 저는 turbo로는 시험하지 않았기 때문에 숫자 듣기에 대해서는 알 수 없습니다.

Q. initial_prompt는 쓰지 않는 편이 좋나요?

고유 명사를 맞히기 쉽게 하는 사용법은 공식 설명에도 실려 있습니다. 그러니 쓰는 것 자체가 나쁜 것은 아니라고 생각합니다. 다만 저는 조용한 클립에서 프롬프트의 반복이 나왔습니다. 그래서 금액 확인에서는 빼고 있습니다.

Q. condition_on_previous_text를 False로 하면 무엇이 달라지나요?

직전의 출력을 다음 구간의 힌트로 쓰지 않게 됩니다. 공식 설명에서는 구간마다 표기가 들쭉날쭉해질 가능성이 있다고 합니다. 대신 반복 루프에는 빠지기 어려워진다고 되어 있습니다.

Q. vad_filter는 처음부터 켜져 있나요?

일반 transcribe에서는 기본값이 False입니다. 그러니 쓸 때는 직접 True를 지정합니다. README에 따르면 배치 처리 쪽에서는 기본으로 켜져 있다고 합니다.

Q. faster-whisper를 쓰는 데 ffmpeg가 필요한가요?

faster-whisper의 README에서는 ffmpeg를 따로 설치할 필요가 없다고 합니다. 음성을 읽어 들이는 데 쓰는 라이브러리에 포함되어 있기 때문입니다. 다만 구간 잘라 내기를 명령어로 한다면 ffmpeg 본체가 필요합니다.

참고한 공식 정보

정리

받아쓰기는 이야기의 흐름을 남기는 데 큰 도움이 되는 도구입니다. 다만 금액 숫자는 small에서도 medium에서도 달랐습니다. large-v3로 잘라 낸 구간을 받아써서 겨우 전단지와 일치했습니다.

그래서 전체는 가벼운 모델로 받아쓰기로 했습니다. 숫자 부분만 따로 확인하는 형태입니다. 프롬프트는 넘기지 않고, 마지막에는 종이와 나란히 놓습니다.

설명 녹음을 가지고 계신 분은 금액 부분만이라도 자료와 비교해 보시면 어떨까요?

가입하지 않아도 100포인트를 받는 요금 시뮬레이션 가계의 숫자를 확인한 김에, 통신비도 라쿠텐 모바일에서 점검해 보기

누르면 라쿠텐 로그인 페이지가 열립니다. 로그인하면 캠페인 내용이 표시됩니다.

이 글에는 제휴 광고가 포함되어 있습니다. 이 사이트의 링크를 통해 상품·서비스에 신청하시면 제휴사로부터 보상을 받을 수 있습니다. 또한 운영자는 라쿠텐 그룹 소속 직원으로, 사원 추천 프로그램을 통해 보상을 받는 경우가 있습니다. 기사 내용과 평가는 광고 유무와 관계없이 운영자의 실제 경험과 조사를 바탕으로 작성했지만, 위 관계를 이해하신 후 읽어 주시기 바랍니다. 자세한 내용은 면책조항·제휴 링크 안내를 참고해 주세요. 면책조항·제휴 링크 안내

이 글에는 기계 번역이 포함되어 있습니다. 정확한 조건은 라쿠텐 모바일 공식 사이트의 다국어 페이지에서 확인해 주세요.

라쿠텐 모바일의 통신 지역·전파 상황이 궁금하신 분은, 공식 전파 개선·조사 요청 양식 을 통해 문의하실 수 있습니다.

ABOUT THE AUTHOR
まさきん

라쿠텐 그룹 근무·디지털 마케터(FP 자격 보유)

40대 초반, 맞벌이·네 자녀의 아빠. 라쿠텐 그룹에서 디지털 마케터로 근무하면서, 재무설계사(FP) 자격을 활용해 가계 관리와 자산 형성에도 힘쓰고 있다.

프로필 보기

관련 글

RELATED
Gemini(Google AI Pro) 패밀리 공유는 가족 5명까지. 설정 절차와 범위 AI 활용

Gemini(Google AI Pro) 패밀리 공유는 가족 5명까지. 설정 절차와 범위

Google AI Pro는 관리자 외에 가족 5명까지 공유할 수 있습니다. Gemini 앱과 저장용량은 공유되고 YouTube Premium Lite는 관리자만. Flow 한도는 가족이 나눠 씁니다. 설정 절차와 자녀 계정 처리를 공식 도움말로 정리했습니다.

2026.10.13 · 읽는 시간 약 13분
AI 구독 청구일과 가계부가 어긋나는 3가지 이유|Claude는 업그레이드하면 청구일이 바뀐다 AI 활용

AI 구독 청구일과 가계부가 어긋나는 3가지 이유|Claude는 업그레이드하면 청구일이 바뀐다

Claude는 월 중간에 Max로 올리면 청구 주기가 리셋되어 그날이 새로운 청구일이 됩니다. 달러 결제의 엔화 환산은 카드사에 데이터가 도착한 시점에 정해지고, 명세와 가계부 반영은 며칠 늦습니다. 영수증 메일을 기준으로 월을 정하는 5단계를 정리했습니다.

2026.10.13 · 읽는 시간 약 14분
freee 회계의 미처리 내역을 월 1회 대사 작업으로. 매월 5일 7:30·3구분·상한 15건으로 사람에게 넘기는 설계 AI 활용

freee 회계의 미처리 내역을 월 1회 대사 작업으로. 매월 5일 7:30·3구분·상한 15건으로 사람에게 넘기는 설계

freee 회계의 미처리 내역이 18건 정도, 주간 확인 6번 동안 움직이지 않은 채 남아 있었습니다. 매월 5일 아침 7:30에 집 Mac에서 돌리는 대사 작업의 설계와, 확정할 수 있는 분은 월 1건, 망설여지는 내역은 1건씩 상한 15건으로 사람에게 넘기는 기준을 정리합니다.

2026.10.12 · 읽는 시간 약 15분
라쿠텐 모바일로 전환 시 최대 14,000포인트 가입하지 않아도 100포인트를 받는 요금 시뮬레이션 →
지금 신청하기 →