Speech-to-Text
음성-텍스트 변환(STT), 즉 자동 음성 인식은 Whisper와 같은 신경망 모델을 사용해 음성 오디오를 텍스트로 변환하며, 단어 오류율로 성능을 평가합니다.
음성-텍스트 변환(STT)은 자동 음성 인식(ASR) 또는 간단히 음성 인식이라고도 하며, 음성 오디오를 텍스트로 변환합니다. STT 모델은 파형을 시간-주파수 표현으로 변환하고, 신경망을 사용해 문자나 서브워드 토큰에 매핑한 뒤, 흔히 구두점, 타임스탬프, 화자 레이블이 포함된 전사문을 출력합니다. STT는 음성 비서, 실시간 자막, 회의록, 통화 분석의 입력 계층이며, 전사문은 검색, 요약, 의도 감지를 위한 자연어 처리(NLP)에 입력됩니다. 레이블이 지정되지 않은 오디오를 활용한 자기 지도 사전 학습과 대규모 약지도 학습이 이루어졌으며, 그 예로 OpenAI의 Whisper는 인터넷에서 수집한 68만 시간 분량의 다국어 오디오로 학습되어 현대 시스템이 다양한 억양과 배경 소음에 대응하고 수십 개 언어를 정확하게 인식할 수 있게 되었습니다.
음성-텍스트 변환 작동 방식#
먼저 오디오를 재샘플링합니다. Whisper의 경우 16 kHz로 변환한 뒤, 시간에 따른 주파수 대역별 에너지를 나타내는 격자인 로그 멜 스펙트로그램으로 변환합니다. Whisper는 10밀리초마다 25밀리초 윈도우에서 멜 대역 80개를 계산하며, large-v3 모델은 대역 128개를 사용합니다. 합성곱 및 트랜스포머 계층으로 구성된 음향 인코더는 이러한 프레임을 특징으로 변환합니다. Conformer 인코더는 국소적인 소리 패턴을 포착하는 합성곱과 발화의 멀리 떨어진 부분을 연결하는 셀프 어텐션을 교차 배치하며, 외부 언어 모델 없이 LibriSpeech의 test-clean 및 test-other 세트에서 단어 오류율 2.1%와 4.3%를 달성했습니다. 세 가지 디코더 계열이 인코더 특징을 텍스트로 변환합니다:
- 연결주의 시간 분류(CTC): 각 오디오 프레임에 문자, 단어 조각 또는 공백을 예측한 다음, 반복을 병합하고 공백을 제거합니다. 모든 프레임을 병렬로 디코딩하므로 CTC는 빠릅니다.
- 트랜스듀서: RNN-T와 후속 모델은 오디오 프레임이 들어오는 대로 토큰을 출력하므로, 휴대폰 및 실시간 자막의 스트리밍 인식에 적합합니다.
- 어텐션 인코더-디코더: 텍스트 디코더가 인코딩된 오디오에 어텐션을 적용하며 토큰을 하나씩 생성합니다. Whisper는 이 방식으로 30초 윈도우를 디코딩하고, 특수 토큰을 사용해 언어를 식별하거나 타임스탬프를 예측하고 영어로 번역합니다.
스트리밍 시스템은 오디오가 더 들어오면 바뀌는 부분 전사문을 보여 주고, 화자가 멈추면 해당 구간을 확정합니다:
디코딩 후 역텍스트 정규화는 "twenty five dollars"와 같은 음성 표현을 "$25"로 바꾸며, 화자 분리는 누가 언제 말했는지에 따라 전사문을 나눕니다.
학습 데이터 및 모델#
- 자기 지도 사전 학습: Meta의 wav2vec 2.0은 레이블이 없는 오디오의 일부를 마스킹하여 음성 표현을 학습합니다. 레이블이 없는 음성 53,000시간으로 사전 학습하고 전사된 오디오 10분만으로 파인튜닝했을 때, LibriSpeech의 clean 및 other 테스트 세트에서 단어 오류율 4.8%와 8.2%를 달성했습니다.
- 대규모 약지도 학습: Whisper는 온라인에서 찾은 불완전한 전사문과 짝지어진 오디오로 학습합니다. 모델 크기는 tiny의 파라미터 3,900만 개부터 large의 15억 5,000만 개까지 다양합니다. 8억 900만 개 파라미터를 사용하는 large-v3 최적화 모델인 turbo는 large보다 약 8배 빠르게 실행됩니다.
- 환각: 어텐션 디코더는 언어 모델처럼 작동하므로 무음이나 소음이 유창한 텍스트를 지어내게 할 수 있습니다. Careless Whisper 연구에 따르면 Whisper 전사 결과의 약 1%에는 오디오에 없는 문구나 문장 전체가 포함되었으며, 긴 침묵이 있는 화자의 경우 이런 현상이 더 자주 발생했습니다.
음성-텍스트 변환과 관련 용어 비교#
- 음성 인식과 ASR: 음성-텍스트 변환과 같은 의미입니다.
- 화자 인식 및 화자 분리: 무엇을 말했는지가 아니라 누가 말하는지를 판별합니다. 화자 분리는 녹음의 각 구간에 화자를 표시하므로 회의 전사문에서 각 발화자를 확인할 수 있습니다.
- 자연어 이해(NLU): "7시에 두 명이 앉을 테이블을 예약해 줘"와 같은 발화의 의도와 개체 등 전사문의 의미를 해석합니다.
- 텍스트-음성 변환(TTS): 텍스트에서 음성을 생성하는 역방향 작업입니다. 음성 어시스턴트는 STT, 대규모 언어 모델, TTS를 차례로 연결합니다.
실제 적용 사례#
- 자막 및 접근성: 휴대폰, 비디오 플랫폼, 회의 소프트웨어의 실시간 자막은 청각 장애가 있거나 난청이 있는 사람도 음성 콘텐츠를 이용할 수 있게 하고, 모든 사용자가 검색할 수 있도록 합니다.
- 임상 문서화: 주변 음성을 기록하는 전사 시스템은 의사와 환자의 대화를 전사하고 전자의무기록용 임상 기록 초안을 작성합니다.
- 컨택트 센터: 전사된 통화는 검색, 규정 준수 확인, 감성 분석에 활용됩니다.
- 비전 시스템의 음성 제어: "빨간 배낭을 찾아 줘"와 같이 전사된 명령은 YOLOE-26에 입력하는 텍스트 프롬프트가 됩니다. Ultralytics YOLO26의 개방형 어휘 버전인 YOLOE-26은 학습 클래스에 없던 범주도 추론 시점에 지정하면 감지하고 분할합니다.
정확도 측정#
단어 오류율(WER)은 전사문을 기준 전사문으로 변환하는 데 필요한 대체, 삭제, 삽입 횟수를 세고, 이를 기준 전사문의 단어 수로 나눈 값입니다. 다음 코드는 단어 단위 편집 거리를 사용해 WER을 계산합니다:
import numpy as np
reference = ["turn", "on", "the", "kitchen", "lights"]
hypothesis = ["turn", "of", "the", "kitchen", "light", "please"]
# Edit distance over words: d[i, j] is the cheapest way to turn the first i reference words into the first j hypothesis words
d = np.zeros((len(reference) + 1, len(hypothesis) + 1), dtype=int)
d[:, 0] = np.arange(len(reference) + 1) # deletions
d[0, :] = np.arange(len(hypothesis) + 1) # insertions
for i in range(1, len(reference) + 1):
for j in range(1, len(hypothesis) + 1):
substitution = d[i - 1, j - 1] + (reference[i - 1] != hypothesis[j - 1])
d[i, j] = min(substitution, d[i - 1, j] + 1, d[i, j - 1] + 1)
# Word error rate: (substitutions + deletions + insertions) / words in the reference
print(f"{d[-1, -1]} errors / {len(reference)} words = WER {d[-1, -1] / len(reference):.0%}")3 errors / 5 words = WER 60%을 출력합니다. "on" 대신 "of", "lights" 대신 "light"를 사용한 것은 대체이며, "please"는 삽입입니다. 삽입도 포함되므로 WER은 100%를 넘을 수 있습니다. Open ASR Leaderboard와 같은 벤치마크는 점수를 매기기 전에 대소문자, 구두점, 맞춤법 변형을 정규화하여 "Lights."와 "lights"가 일치하도록 합니다. 중국어와 일본어처럼 단어 사이에 공백을 사용하지 않는 언어는 대신 문자 오류율로 평가합니다.










