본문으로 건너뛰기
김신건의 로그

[Voice AI] STT 모델: Whisper, Deepgram, AssemblyAI, CLOVA

· 수정 · 📖 약 1분 · 531자/단어 #stt #asr #voice #whisper #deepgram #assemblyai #aws-transcribe
STT, Speech-to-Text, ASR, Whisper, Deepgram Nova, AssemblyAI Universal, Naver CLOVA Speech, Google Speech-to-Text, Azure Speech, AWS Transcribe, Faster-Whisper

정의

STT (Speech-to-Text) / ASR (Automatic Speech Recognition) = 음성 → 텍스트 변환. 2026 시점 전사 정확도 인간 수준, 실시간 < 300ms 도 흔함.

STT 아키텍처

flowchart LR
    Mic["오디오 입력\n(PCM, 16kHz)"]
    Mic --> VAD["VAD\n(Silero 등)"]
    VAD --> Encoder["Encoder\n(Conformer, Transformer)"]
    Encoder --> Decoder["Decoder\n(CTC / RNN-T / Seq2Seq)"]
    Decoder --> LM["Language Model\n(n-gram / neural LM)"]
    LM --> Text["텍스트 출력"]
컴포넌트역할
VAD음성 구간 감지 (무음 제거)
Feature ExtractionMFCC, Filter Bank, log-mel spectrogram
Encoder음성 특징 추출 (Conformer, Transformer)
DecoderCTC, RNN-T, Whisper 의 seq2seq
LM언어 모델 rescoring

주요 모델 매트릭스 (2026)

모델종류한국어스트리밍강점
OpenAI Whisper v3open weights우수batch (스트리밍 별도)99 언어, 견고, self-host 가능
Faster-Whisper / Distil-WhisperOSS우수가능Whisper 의 4x 속도 + 작은 모델
WhisperXOSS우수제한적word-level timestamp + diarization
Deepgram Nova-3API보통최강 (300ms)멀티턴, diarization, latency
AssemblyAI Universal-2API보통우수다국어, multispeaker, 가격 경쟁력
Google Speech-to-Text v2API우수우수한국어 정확도, telephony 특화
Azure SpeechAPI우수우수enterprise 통합, Custom Speech
AWS TranscribeAPI보통우수AWS 생태계, 의료/법률 특화 모델
Naver CLOVA SpeechAPI압도적gRPC, < 1s한국어 1위, 도메인 사전
Kakao i SpeechAPI우수가능한국어 + 카카오 생태계
NVIDIA NeMo Parakeetopen영어우수edge, low-latency
GPT-4o transcribeAPI우수가능GPT-4o 의 audio 통합

Whisper 계보

flowchart TB
    Whisper["Whisper v3 (2023, OpenAI)"]
    Whisper --> Vanilla["원본 (PyTorch)"]
    Whisper --> Faster["Faster-Whisper (CTranslate2)\n약 4x 빠름"]
    Whisper --> Distil["Distil-Whisper\n약 6x 빠름, 49% 작음 (영어 특화)"]
    Whisper --> WhisperX["WhisperX\n+ word-level timestamps + diarization"]
    Whisper --> Live["WhisperLive / WhisperLink\n스트리밍 wrapper"]

2026 시점 자체 호스팅 = Faster-Whisper + Silero VAD 가 거의 표준.

# Faster-Whisper 사용 예시
from faster_whisper import WhisperModel

model = WhisperModel("large-v3", device="cuda", compute_type="float16")

segments, info = model.transcribe("audio.mp3", language="ko", beam_size=5)

for segment in segments:
    print(f"[{segment.start:.2f}s - {segment.end:.2f}s] {segment.text}")

모델 사이즈 vs 정확도 vs 속도 (Whisper)

Whisper 모델 사이즈 vs 한국어 WER (가상 직관)
Large-v3 가 WER 가장 낮음. Tiny 는 빠르지만 한국어 정확도 떨어짐.

Google Speech-to-Text v2

from google.cloud import speech_v2
from google.cloud.speech_v2.types import cloud_speech

client = speech_v2.SpeechClient()
project_id = "my-project"

config = cloud_speech.RecognitionConfig(
    auto_decoding_config=cloud_speech.AutoDetectDecodingConfig(),
    language_codes=["ko-KR"],
    model="long",  # long / short / telephony / medical_dictation
)

request = cloud_speech.RecognizeRequest(
    recognizer=f"projects/{project_id}/locations/global/recognizers/_",
    config=config,
    content=audio_bytes,
)
response = client.recognize(request=request)
for result in response.results:
    print(result.alternatives[0].transcript)
모델적합한 오디오
long60초+ 녹음, 전화 통화 아닌 일반 오디오
short60초 미만, 빠른 응답
telephony전화 통화 (8kHz narrow-band)
medical_dictation의료 도메인 (영어)
chirp최신 범용 모델

AWS Transcribe

import boto3
import json

transcribe = boto3.client('transcribe', region_name='ap-northeast-2')

# 비동기 전사
transcribe.start_transcription_job(
    TranscriptionJobName='my-job',
    Media={'MediaFileUri': 's3://my-bucket/audio.mp3'},
    MediaFormat='mp3',
    LanguageCode='ko-KR',
    Settings={
        'ShowSpeakerLabels': True,
        'MaxSpeakerLabels': 4,
        'VocabularyName': 'my-custom-vocab',  # 커스텀 사전
    }
)

# 실시간 스트리밍 (WebSocket 기반)
# aws transcribe-streaming start-stream-transcription \
#   --language-code ko-KR \
#   --media-encoding pcm \
#   --media-sample-rate-hertz 16000
기능설명
Custom Vocabulary도메인 특화 단어 추가 (브랜드명, 인명)
Custom Language Model대규모 도메인 텍스트로 파인튜닝
Medical Transcribe의료 용어 특화
Call Analytics콜센터 분석 (감정, 침묵, 방해)
ToxicityDetection욕설 / 혐오 발화 감지

Azure Speech

import azure.cognitiveservices.speech as speechsdk

speech_config = speechsdk.SpeechConfig(
    subscription="your-key",
    region="koreacentral"
)
speech_config.speech_recognition_language = "ko-KR"

# Custom Speech (파인튜닝된 모델)
speech_config.endpoint_id = "your-custom-endpoint-id"

audio_config = speechsdk.AudioConfig(filename="audio.wav")
recognizer = speechsdk.SpeechRecognizer(
    speech_config=speech_config,
    audio_config=audio_config
)

result = recognizer.recognize_once()
print(result.text)

Custom Speech = 도메인 데이터로 파인튜닝 가능. 한국어 의료/법률/금융 도메인에 활용.

한국어 STT 선택 가이드

flowchart TD
    Q{"환경 / 우선순위"}
    Q -->|"관리형 + 한국어 최고 정확도"| CLOVA["Naver CLOVA Speech"]
    Q -->|"관리형 + 다국어 동시"| Deepgram["Deepgram / AssemblyAI"]
    Q -->|"AWS 생태계"| AWSt["AWS Transcribe"]
    Q -->|"Azure 생태계 + 파인튜닝"| Azure["Azure Custom Speech"]
    Q -->|"자체 호스팅 + 적당히"| Faster["Faster-Whisper large-v3"]
    Q -->|"Edge / 모바일"| Distil["Distil-Whisper small"]
    Q -->|"음성+텍스트 통합 LLM"| GPT4o["GPT-4o Realtime API"]

IMPORTANT

한국어 전사 정확도: CLOVA > Whisper-large-v3 > Google > Deepgram. 단 latency 는 거의 반대. 실시간 대화 = latency 우선.

Diarization (화자 분리)

"안녕하세요"          -> speaker_1
"네 안녕하세요"        -> speaker_2
"오늘 회의 시작합니다"  -> speaker_1
도구의미
pyannote.audioOSS, Hugging Face
WhisperXWhisper + pyannote 통합
AssemblyAIAPI 내장, speaker labels
DeepgramAPI 내장, diarize 파라미터
AWS TranscribeShowSpeakerLabels

API vs Self-host

API (Deepgram, AssemblyAI)Self-host (Whisper)
Latency매우 낮음 (300ms 가능)GPU + 튜닝 필요
비용분당 $0.005-0.015GPU 시간
Privacy데이터 외부 전송내부 유지
가용성99.9% SLA자체 운영
커스터마이즈제한적자유 (fine-tune)
한국어CLOVA, GoogleWhisper-large 충분

평가 지표

지표의미목표
WER (Word Error Rate)단어 단위 오류율한국어 < 10%
CER (Character Error Rate)문자 단위 (한국어/중국어 적합)< 5%
RTF (Real-Time Factor)처리 시간 / 오디오 시간< 1 (real-time 가능)
TTF (Time to Final)발화 종료 → final transcript< 500ms
TTP (Time to Partial)첫 partial 까지< 200ms
CNC (Confidence)단어별 신뢰도-

흔한 함정

WARNING

  1. Whisper batch 모드를 스트리밍처럼 = 전체 오디오 받고서 시작. 실시간 불가.
  2. 언어 자동 감지 = 짧은 발화에서 오류. 언어 명시 권장 (language="ko").
  3. Hallucination (Whisper) = 무음 / 노이즈 구간에서 없는 문장 생성. VAD 전처리 필수.
  4. Sample rate = 16kHz 표준. 44.1kHz 보내면 내부 resampling 추가 latency.
  5. 부분 결과로 LLM 호출 = final 까지 기다리거나 semantic endpointing 사용.

관련 위키

이 글의 용어 (4개)
[Voice AI] 음성 에이전트 아키텍처: Cascading / Streaming / S2S + Latency Budgetai
정의 실시간 음성 AI 의 3가지 패턴. 각자 지연 vs 유연성 vs 비용 트레이드오프. 3 패턴 비교 | | Cascading | Streaming | S2S | |---|--…
[Voice AI] STT 스트리밍: partial vs final, endpointing, gRPC/WSvoice
정의 스트리밍 STT = 오디오 청크 가 들어올 때마다 부분 결과 (partial) 를 즉시 반환 + 발화 종료 시 최종 결과 (final) 확정. [!IMPORTANT] 대화형…
[Voice AI] TTS 모델: ElevenLabs, Cartesia, Edge TTS, 한국어voice
정의 TTS (Text-to-Speech) = 텍스트 → 음성 합성. 2026 시점 사람과 구분 어려운 자연도 + < 200ms first audio + voice cloning…
[Voice AI] VAD: Silero, 에너지 기반, endpointing 임계값voice
정의 VAD (Voice Activity Detection) = 오디오 스트림에서 음성 vs 비음성 (침묵, 노이즈) 구분. 음성 에이전트의 발화 시작 / 종료 감지에 필수. 종…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기