| Type | Concept |
|---|---|
| Aliases | STT, speech to text, ASR, 음성 인식 |
| Related | 화자 분리 (Speaker Diarization), 역 텍스트 정규화 (ITN), 단어 오류율 (WER) |
무엇인가
음성-텍스트 변환(STT, Speech-to-Text)은 마이크나 녹음 파일에 담긴 사람의 목소리를 컴퓨터가 알아듣고 글자로 풀어주는 기술이다. 영어로는 ASR(Automatic Speech Recognition)이라고도 부른다. 회의를 녹음한 뒤 자동으로 회의록을 만드는 기능, 유튜브 동영상에 자막을 다는 기능, 스마트폰 키보드의 마이크 버튼을 눌러 말한 내용을 글자로 적는 기능이 모두 STT다.
어디에 쓰나
가장 익숙한 예는 자막이다. 넷플릭스가 한국어 영상에 자동 자막을 붙이거나, 유튜브가 영상 업로드 직후 자막을 깔아주는 것은 STT 없이는 불가능하다. 회의 도구도 마찬가지다. Zoom·Google Meet이 회의가 끝나는 순간 발화자별 회의록을 뽑아주는 것은, 음성을 텍스트로 바꾼 다음 누가 언제 말했는지를 [[speaker-diarization]] 으로 나눠 합치기 때문이다. 콜센터 통화 분석, 의사–환자 대화의 진료 기록 자동 작성, 운전 중 음성 메시지 작성에서도 STT가 뒤에서 일하고 있다.
어떻게 작동하나
옛날에는 사람이 단어 하나하나의 발음을 사전처럼 모델에 외우게 시켰다. 지금은 다르다. 인공지능 모델이 수십만 시간 분량의 녹음과 스크립트를 한꺼번에 읽으면서, 어떤 소리 파형이 어떤 글자에 대응되는지를 스스로 익힌다. OpenAI의 Whisper, Google의 Universal Speech Model 같은 시스템이 이런 방식으로 만들어졌다.
원리는 의외로 단순하다. 마이크에서 들어온 소리를 짧은 조각(보통 30밀리초쯤)으로 잘라, 각 조각의 주파수 패턴을 숫자 벡터로 만든다. 모델은 이 벡터들의 시퀀스를 보고 가장 그럴듯한 글자열을 추측한다. "안녕하세요" 한 단어를 알아맞히기 위해 모델은 발음의 미세한 변화·억양·잡음 속에서도 패턴을 찾아낸다.
한계와 후처리
완벽하지는 않다. 시끄러운 카페, 사투리, 두 사람이 동시에 말하는 상황, 전문 용어는 여전히 어렵다. 그래서 STT 출력 뒤에는 보통 [[inverse-text-normalization]] 이라는 후처리 단계가 따라붙어 "이천이십육년"을 "2026년"으로 바꿔주는 식으로 사람이 읽기 좋게 다듬는다. 시스템의 정확도는 [[word-error-rate]] (단어 오류율)라는 지표로 잰다.
최근에는 가격이 핵심 경쟁 지점이 됐다. xAI가 2026년 4월 Grok STT API를 시간당 0.10달러로 풀면서, 외부 개발자가 음성 인식을 자기 앱에 끼워 넣는 비용이 크게 낮아졌다.
무엇인가
음성-텍스트 변환(STT)은 오디오 데이터를 입력으로 받아 텍스트 토큰 시퀀스를 반환하는 ASR(Automatic Speech Recognition) 서비스다. 실무에서는 보통 클라우드 API 형태로 소비되며, 자체 호스팅이 필요하면 Whisper·Wav2Vec2 같은 오픈 모델을 직접 띄우는 선택지도 있다.
두 가지 인터페이스
대부분의 상용 STT는 두 종류의 엔드포인트를 제공한다.
Batch (REST). WAV·MP3·FLAC 같은 파일을 통째로 업로드하고 변환이 끝난 결과를 한 번에 받는다. 자막 생성·콜센터 통화 후처리·미디어 인덱싱처럼 지연이 허용되는 워크로드에 맞다.
Streaming (WebSocket / gRPC). 마이크에서 들어오는 오디오 청크를 실시간으로 흘려보내고, 부분 결과(is_final: false)와 최종 결과(is_final: true)를 받아가며 사용한다. 라이브 캡션·음성 비서·통화 중 실시간 번역 등에 쓴다. 청크 크기는 보통 100~250ms이며 지연 예산은 300ms 이하가 표준이다.
응답 페이로드
응답에는 평문 transcript 외에 거의 항상 다음이 포함된다.
- Word-level timestamp: 각 단어의 시작·끝 시각(초 단위 float). 자막 동기화·하이라이트·검색에 필수.
- Confidence score: 단어 또는 문장 단위 확률값. 임계치 이하 토큰을 사람 검수자에게 보내는 active-learning 파이프라인에 유용.
- Speaker label: [[speaker-diarization]] 옵션을 켜면
speaker_0,speaker_1같은 화자 ID가 붙는다. - Language code: 자동 감지 모드에서 식별된 언어.
후처리
원시 출력은 거의 항상 [[inverse-text-normalization]] (ITN) 단계를 거쳐 사람이 읽기 쉽게 가공된다. "이천이십육년 사월" → "2026년 4월", "공일공-일이삼사" → "010-1234"처럼 숫자·날짜·전화번호·통화 단위를 포맷팅한다. 일부 제공자는 ITN을 기본으로 켜두지만, 자체 도메인 어휘가 강한 서비스라면 ITN을 끄고 직접 후처리하는 편이 깔끔하다.
가격과 선택 기준
2026년 4월 기준 시장 가격은 시간당 0.10~0.50달러대로 형성되어 있다. xAI가 Grok STT API를 0.10달러/시간에 풀면서 가격 압력이 커졌고, OpenAI Whisper API, Google Cloud Speech-to-Text, AWS Transcribe, Deepgram, AssemblyAI 등이 주요 대안이다. 도입 시 점검할 포인트는 다음과 같다.
- 지원 언어 수와 한국어 [[word-error-rate]]
- 스트리밍 지연(p95 ms)
- Diarization 품질
- 도메인 적응(custom vocabulary) 지원 여부
- 데이터 보존 정책과 region 선택
운영 팁
오디오 전처리(노이즈 게이트, 16kHz mono PCM 변환)를 클라이언트단에서 미리 해두면 정확도와 비용 양쪽이 개선된다. 스트리밍 사용 시에는 VAD(Voice Activity Detection)로 무음 구간을 잘라 보내야 토큰 낭비가 없다. 회계상 비용은 입력 오디오 길이 기준이라, 배경 음악이 끝까지 깔린 영상은 그만큼 청구된다.
과제 정의
음성-텍스트 변환(STT, ASR)은 가변 길이의 음향 특징 시퀀스 X = (x_1, …, x_T)를 가변 길이의 토큰 시퀀스 Y = (y_1, …, y_U)로 매핑하는 sequence-to-sequence 과제다. 입력 X는 보통 16kHz 샘플링한 raw waveform 또는 80차원 log-mel filterbank 스펙트로그램이며, 출력 Y는 character·subword·phoneme·word-piece 단위 토큰이다. 정확도는 [[word-error-rate]] (WER)와 character error rate(CER)로 측정한다.
주요 아키텍처 계열
세 가지 디코딩 패러다임이 공존한다.
CTC (Connectionist Temporal Classification)
Encoder가 프레임별 토큰 분포를 내고, blank 심볼을 끼워 입력 길이 T와 출력 길이 U의 불일치를 흡수한다. 조건부 독립 가정 때문에 외부 언어 모델 융합(shallow/deep fusion)이 흔히 따라붙는다. Wav2Vec2-CTC가 대표적.
RNN-T / Transducer
Encoder + prediction network + joint network 구조로, streaming에 자연스럽게 매핑된다. Google production STT, USM의 backbone이 이 계열.
Attention encoder–decoder
LAS(Listen-Attend-Spell), Whisper가 여기에 속한다. Cross-attention으로 전체 입력을 참조하기 때문에 long-form transcription과 multilingual에 강하지만, streaming에서는 chunked attention 등의 트릭이 필요하다.
Self-supervised pretraining
최근 SOTA 시스템들은 라벨 없는 대규모 음성 데이터로 pretraining한 표현 위에 supervised fine-tuning을 얹는다.
- Wav2Vec 2.0 (Baevski et al., 2020): contrastive loss 위에서 masked latent representation 학습.
- HuBERT (Hsu et al., 2021): k-means 클러스터로 이산화한 target에 대한 BERT-style masked prediction.
- w2v-BERT, WavLM: 두 접근의 결합.
- Whisper (Radford et al., 2022): 68만 시간의 weakly-supervised 다국어 데이터로 직접 supervised pretraining. Pretraining/fine-tuning 경계를 허문 사례.
- USM (Universal Speech Model) (Google, 2023): 1200만 시간 unlabeled audio + 28K 시간 labeled, 100+ 언어.
공통점은 데이터 스케일이 모델 크기보다 큰 영향력을 갖는다는 점이다. WER 곡선은 supervised data 1000시간 이상에서 saturate되기 시작하지만, pretraining data는 10만 시간 단위로 늘릴 때까지 효용이 꾸준하다.
평가와 벤치마크
LibriSpeech (영어 오디오북, clean/other 셋), Common Voice (다국어 크라우드소싱), TED-LIUM, Switchboard (전화 대화), CHiME (잡음·원거리), AMI (회의)가 표준 벤치마크다. 현재 LibriSpeech test-clean WER은 1.4% 수준까지 떨어져 사실상 saturated 상태이며, 연구의 무게중심은 multilingual·long-form·noisy·code-switching·streaming latency로 옮겨갔다.
후처리·형식 변환
ASR 출력은 lower-case·구두점 없는 문자열인 경우가 많다. 실제 응용을 위해 [[inverse-text-normalization]] 으로 spoken form을 written form으로 변환하고("twenty twenty six" → "2026"), punctuation/capitalization restoration 모델을 후행시킨다. 화자 구분이 필요한 회의록 등에서는 [[speaker-diarization]] 시스템(예: pyannote.audio)을 별도로 돌려 STT 결과와 시간축 기준으로 정렬한다.
한계와 열린 문제
- Code-switching: 한 발화 안에 두 언어가 섞이면 monolingual 모델은 급격히 무너진다. Multilingual pretrained 모델로도 완벽하지 않다.
- Long-form drift: 30초 이상의 long-form transcription에서 hallucination·반복·문맥 손실이 잦다. Whisper의 conditioning-on-previous-segment가 일부를 우회하지만 근본 해법은 아니다.
- 저자원 언어: 학습 데이터가 적은 언어에서 WER이 여전히 30%대 이상이다.
- Robustness: 원거리 마이크·배경 잡음·overlapped speech에서의 성능 격차가 크다.
- 개인정보·편향: 화자 식별이 가능한 녹음의 라벨링 윤리, 특정 억양·인종 그룹에 대한 WER 격차가 정책적 이슈로 다뤄지고 있다.