본문 바로가기
인공지능/Speech Recognition

음성 AI 기술 스택 정리

by Sangwoo Seo 2026. 3. 8.

들어가며

음성 AI를 처음 공부하려고 검색하면 ASR, TTS, VAD, VC, SED, Speaker Diarization 같은 용어들이 한꺼번에 쏟아집니다. 이게 다 뭔지, 서로 어떤 관계인지 감이 안 잡히는 채로 각각의 기술을 파다 보면 결국 숲을 못 보게 됩니다.

 

이 글은 그 숲을 먼저 보여주는 것이 목적입니다. 각 기술의 구현 디테일보다는 왜 이 기술이 필요한지, 어떤 문제를 해결하려고 등장했는지에 집중해서 설명합니다.

음성 AI 파이프라인의 큰 그림

음성 AI 시스템을 한 줄로 요약하면 이렇습니다.

[마이크] → 전처리 → 인식 → 이해 → 생성 → [스피커]
 

사람이 마이크에 말을 하면, 그 신호가 여러 단계를 거쳐 처리되고, 최종적으로 스피커로 응답이 나옵니다. 각 단계마다 서로 다른 기술 스택이 담당하고 있습니다. 지금부터 이 흐름을 따라가 보겠습니다.


1. 전처리 계층 — AI가 듣기 전에 해야 할 일

마이크가 받은 신호를 곧바로 AI에 넣으면 어떻게 될까요?

 

실제로는 잘 동작하지 않습니다. 현실의 음성 신호에는 수많은 노이즈가 섞여 있기 때문입니다. 에어컨 소리, 키보드 타이핑 소리, 스피커에서 나온 소리가 마이크로 다시 들어오는 에코, 그리고 아무 말도 없는 긴 침묵 구간까지. AI 모델은 이 모든 것을 그냥 "소리"로 받아들입니다. 학습 데이터에 없던 잡음 패턴이 들어오면 성능이 급격히 떨어집니다.

 

그래서 신호가 AI에 들어가기 전에 먼저 정리하는 전처리 단계가 필요합니다.

VAD (Voice Activity Detection)

가장 먼저 해야 할 일은 "지금 사람이 말하고 있는가?" 를 판단하는 것입니다. 이것이 VAD입니다.

 

VAD 없이 ASR을 돌리면 어떻게 될까요? 아무 말도 없는 구간에서도 추론이 계속 실행됩니다. 배터리가 낭비되고, 엣지 디바이스라면 발열도 올라갑니다. VAD는 말이 시작되는 구간과 끝나는 구간을 감지해서 ASR에게 "지금 들어봐도 돼"라는 신호를 보냅니다. 음성 파이프라인에서 가장 앞단에 위치하고, 에너지 효율 측면에서도 중요한 역할을 합니다.

AEC (Acoustic Echo Cancellation)

스마트 스피커나 핸즈프리 기기를 생각해보면 이해가 쉽습니다. 스피커에서 음악이 나오고 있는데 사용자가 말을 겁니다. 마이크는 사용자의 목소리와 스피커 소리를 동시에 잡습니다. ASR 입장에서는 둘 다 "소리"일 뿐이고, 어느 게 사람 목소리인지 구분이 안 됩니다.

 

AEC는 스피커에서 나간 신호가 무엇인지 알고 있기 때문에, 마이크 입력에서 그 신호를 빼낼 수 있습니다. 이것을 에코 제거라고 합니다. 대화형 AI 디바이스에서는 필수적인 기술입니다.

NS (Noise Suppression)

에코는 제거했지만 아직 배경 잡음이 남아있습니다. NS는 음성 신호에서 배경 잡음 성분을 추정하고 억제합니다. 카페에서 통화할 때 상대방 목소리만 선명하게 들리는 것이 NS 덕분입니다. 딥러닝 기반 NS(RNNoise, DeepFilterNet)는 단순한 주파수 필터링보다 훨씬 자연스럽게 잡음을 제거합니다.

Beamforming

마이크가 하나가 아니라 여러 개라면 이야기가 달라집니다. 단일 마이크는 방향 정보가 없습니다. 앞에서 오는 소리든 뒤에서 오는 소리든 똑같이 잡습니다. 그런데 마이크가 여러 개라면 소리의 도달 시간 차이(Time Delay of Arrival, TDOA) 가 생깁니다. 왼쪽에서 소리가 오면 왼쪽 마이크에 먼저 도달하고, 오른쪽 마이크엔 아주 미세하게 늦게 도달합니다. 이 시간 차이를 분석하면 소리가 어느 방향에서 왔는지 추정할 수 있습니다.

 

Beamforming은 여기서 한 발 더 나갑니다. 단순히 방향을 추정하는 데 그치지 않고, 각 마이크 신호에 의도적으로 딜레이를 조정해서 원하는 방향의 신호들이 정확히 겹쳐 보강되도록 만듭니다. 반대로 원하지 않는 방향의 신호는 엇갈리게 해서 상쇄됩니다. "신호가 강한 마이크를 고른다"는 개념이 아니라, 모든 마이크를 다 사용하되 합산 방식을 방향에 맞게 조정하는 것입니다.

 

결과적으로 특정 방향에서 오는 음성은 선명하게 살아남고, 다른 방향의 잡음이나 간섭은 억제됩니다. reSpeaker 같은 마이크 어레이 모듈은 이 연산을 하드웨어/펌웨어 레벨에서 실시간으로 처리해줍니다. 여러 사람이 동시에 말하는 환경이나 원거리 마이킹 상황에서 특히 효과적이고, 회의실 스피커폰이나 스마트 스피커에 필수적으로 들어가는 이유가 여기 있습니다.

 

정리하면, 전처리 계층은 AI가 실제로 처리할 수 있는 깨끗한 신호를 만들어주는 단계입니다. 이 단계를 얼마나 잘 설계하느냐에 따라 뒤에 오는 모든 AI 모델의 성능이 달라집니다.


2. 음성 인식 계층 — 말을 텍스트로 바꾸기

전처리가 끝난 신호는 이제 본격적인 AI 영역으로 넘어옵니다.

KWS (Keyword Spotting)

모든 소리를 항상 ASR에 넣을 필요는 없습니다. "헤이 시리", "오케이 구글" 같은 웨이크워드를 들었을 때만 전체 파이프라인을 깨우는 것이 훨씬 효율적입니다. KWS는 이 웨이크워드 감지를 담당합니다.

 

KWS는 아주 가벼운 모델로 구현됩니다. MCU 수준에서도 돌아갈 만큼 작아야 합니다. 항상 실행되고 있어야 하기 때문입니다. 그래서 KWS는 보통 온칩(on-chip)으로, ASR은 그 이후 단계로 분리해서 설계합니다. 엣지 AI 설계에서 전력 예산을 아끼는 핵심 전략 중 하나입니다.

ASR (Automatic Speech Recognition) or STT(Speech-to-Text)

음성 → 텍스트 변환, 음성 AI에서 가장 오래된 문제이자 지금도 활발히 발전 중인 영역입니다.

 

초기 ASR은 HMM(Hidden Markov Model) 기반이었습니다. 음소(phoneme) 단위로 나눠서 확률적으로 추정하는 방식이었는데, 노이즈에 약하고 화자마다 성능 차이가 컸습니다. 딥러닝이 들어오면서 CNN, RNN, 그리고 지금은 Transformer 기반 모델이 주류가 됐습니다. OpenAI의 Whisper가 나오면서 다국어 ASR의 접근성이 크게 올라갔습니다.

 

ASR을 공부할 때 알아야 할 핵심 개념은 CTC(Connectionist Temporal Classification)Attention 기반 디코딩입니다. 음성 신호는 길이가 가변적이고, 텍스트와 길이가 맞지 않습니다. 이 불일치를 어떻게 해결하는지가 ASR 아키텍처의 핵심 문제입니다.

LID (Language Identification)

다국어 환경에서는 사용자가 어떤 언어로 말하는지 먼저 판단해야 합니다. LID는 입력된 음성이 어느 언어인지 자동으로 감지합니다. Whisper처럼 LID와 ASR을 통합한 모델도 있지만, 레이턴시가 중요한 엣지 환경에서는 별도 경량 모델로 분리하는 경우도 있습니다.


3. 환경음 인식 — 음성 이외의 소리를 이해하기

음성 AI가 처리하는 것이 사람 목소리뿐이라고 생각하면 오산입니다.

SED (Sound Event Detection)

SED는 개 짖음, 총성, 유리 깨지는 소리, 화재 경보 같은 환경음을 분류하는 기술입니다. 보안 카메라, 스마트홈 기기, 산업 현장 모니터링에서 활발히 쓰입니다.

 

음성 인식과 SED는 서로 다른 문제처럼 보이지만 접근 방식이 비슷합니다. 오디오 신호를 Mel spectrogram으로 변환하고, 이미지 분류처럼 CNN이나 Transformer로 처리합니다. 차이는 "무슨 말을 했느냐"가 아니라 "어떤 소리가 났느냐"를 분류한다는 것입니다. Google의 YAMNet이나 PANNs(Pre-trained Audio Neural Networks)가 대표적인 모델입니다.

 

SED를 공부하면 자연스럽게 Audio Classification의 전반적인 파이프라인을 이해하게 됩니다. ASR과 공유되는 개념이 많기 때문에, 음성 AI를 공부할 때 함께 보면 효율적입니다.


4. 화자 인식 계층 — 누가 말하고 있는가

ASR이 "무슨 말을 했는가"를 다룬다면, 화자 인식은 "누가 말했는가"를 다룹니다.

Speaker Verification (SV)

"이 사람이 등록된 그 사람 맞아?" 를 판단하는 1:1 매칭 문제입니다. 스마트폰 음성 잠금 해제, 콜센터 본인 확인이 대표적인 사례입니다. 등록된 화자의 음성과 현재 입력된 음성이 같은 사람인지 아닌지를 이진 판단합니다.

Speaker Identification (SI)

SV가 1:1이라면 SI는 1:N입니다. 여러 등록된 화자 중 누구인지 분류합니다. 사전에 등록된 화자 수가 늘어날수록 계산 비용이 올라갑니다.

두 기술 모두 화자 임베딩(Speaker Embedding) 이 핵심입니다. 음성 신호를 고정 길이의 벡터로 압축해서, 같은 화자의 음성은 벡터 공간에서 가깝게, 다른 화자는 멀리 위치하도록 학습합니다. d-vector, x-vector, ECAPA-TDNN이 이 분야의 대표 모델입니다.

Speaker Diarization (SD)

"이 녹음에서 누가 언제 말했는가?"를 분석하는 기술입니다. 회의 녹음을 자동으로 화자별로 분리해서 회의록을 만들거나, 인터뷰 기록을 자동으로 정리하는 데 쓰입니다.

 

Diarization은 SV/SI보다 훨씬 복잡합니다. 화자가 몇 명인지도 모르는 상태에서 시작하고, 한 사람의 음성이 여러 구간에 걸쳐 있고, 두 사람이 겹쳐 말하는 구간도 처리해야 합니다. pyannote.audio가 현재 가장 널리 쓰이는 오픈소스 프레임워크입니다.


5. 목소리 변환 계층 — 음색을 바꾼다는 것

VC (Voice Conversion)

VC는 발화 내용(텍스트)은 그대로 유지하면서 음색만 다른 화자의 것으로 바꾸는 기술입니다. 예를 들어 내가 말한 문장을 유명 배우의 목소리로 바꿔서 출력합니다.

 

이 기술을 이해하려면 음성 신호가 어떻게 구성되는지부터 알아야 합니다. 음성에는 크게 두 가지 정보가 담겨 있습니다. 언어적 내용(linguistic content) — 무슨 말을 했느냐 — 과 화자 특성(speaker identity) — 누가 말했느냐. VC는 이 두 가지를 분리해서 언어적 내용은 보존하고, 화자 특성만 교체합니다.

 

최근에는 KNN-VC, FreeVC 같은 모델이 레퍼런스 음성 몇 초만으로도 꽤 자연스러운 변환을 보여줍니다. TTS와 기술적으로 겹치는 부분이 많고, 실제로 zero-shot TTS와 VC의 경계도 점점 흐려지고 있습니다.


6. 음성 합성 계층 — 텍스트를 자연스러운 말로

TTS (Text-to-Speech)

TTS는 텍스트를 입력받아 자연스러운 음성을 생성합니다. 네비게이션 안내, 오디오북, AI 어시스턴트의 응답이 모두 TTS를 통해 나옵니다.

 

초기 TTS는 녹음된 음성 단위를 이어 붙이는 방식(Concatenative TTS)이었습니다. 자연스럽지 않고, 감정 표현이 거의 불가능했습니다. 이후 통계적 파라메트릭 TTS → 딥러닝 TTS 순으로 발전했고, 지금은 Transformer / Flow / Diffusion 기반 모델들이 인간 수준에 가까운 음성을 생성합니다.

Neural Vocoder

TTS 파이프라인에서 잘 모르고 넘어가기 쉬운 부분이 있습니다. TTS 모델 대부분은 텍스트를 직접 waveform으로 변환하지 않습니다. 중간 표현으로 Mel spectrogram을 생성하고, 이것을 실제 오디오 신호로 변환하는 별도 모듈이 있습니다. 이것이 Neural Vocoder입니다.

 

HiFi-GAN, EnCodec 같은 Vocoder의 품질이 최종 출력 음질에 직접적으로 영향을 줍니다. 엣지 환경에서는 Vocoder 자체가 병목이 되기도 합니다.

Zero-shot TTS

기존 TTS는 특정 화자의 음성을 수십 시간 학습해야 그 화자의 목소리를 낼 수 있었습니다. Zero-shot TTS는 처음 보는 화자의 음성 샘플 몇 초만으로도 그 목소리를 모방합니다. XTTS-v2, CosyVoice가 현재 대표적인 모델입니다.

 

VC와 Zero-shot TTS는 개념상 비슷해 보이지만 입력이 다릅니다. VC는 음성→음성 변환이고, Zero-shot TTS는 텍스트→음성 변환에 목소리 샘플이 추가로 들어갑니다.

Emotion / Style TTS

자연스러움을 넘어서 감정을 담는 단계입니다. 같은 텍스트를 기쁜 톤으로, 슬픈 톤으로, 긴장된 톤으로 읽을 수 있습니다. StyleTTS2는 화자 스타일을 레퍼런스 오디오에서 추출해서 합성 시 반영합니다. 게임 NPC 대사, 오디오북, 감정 상담 AI 같은 애플리케이션에서 수요가 높습니다.


7. 음성 언어 모델 — 텍스트를 거치지 않는 대화

지금까지 설명한 구조는 대부분 이렇게 생겼습니다.

음성 입력 → STT(음성→텍스트) → LLM(텍스트 이해) → TTS(텍스트→음성) → 음성 출력

 

이 구조의 문제가 있습니다. 세 개의 모델을 직렬로 연결하니 레이턴시가 누적됩니다. 그리고 중간에 텍스트로 변환되는 과정에서 운율, 감정, 억양 같은 정보가 손실됩니다. 텍스트에는 "화가 난 목소리로"라는 정보가 담기지 않습니다.

SLM (Speech Language Model)

이 문제를 해결하려는 방향이 SLM입니다. 음성을 텍스트로 변환하지 않고, 음성 토큰을 LLM이 직접 이해하고 처리합니다. Qwen-Audio, Gemini 같은 멀티모달 모델들이 이 방향으로 가고 있습니다.

Codec LM

또 다른 접근은 음성을 codec 토큰으로 압축해서, 언어 모델이 텍스트 생성하듯 오디오를 생성하게 만드는 것입니다. VALL-E, AudioLM이 이 방식입니다. "in-context learning으로 3초 레퍼런스만으로 화자 목소리를 재현한다"는 VALL-E의 데모가 공개됐을 때 꽤 충격적이었습니다.

E2E Spoken Dialogue

GPT-4o의 음성 모드가 대표적인 사례입니다. 음성 입력을 받아서 음성으로 바로 응답합니다. 중간에 텍스트가 없습니다. Moshi는 이 방향의 오픈소스 모델입니다. 레이턴시가 기존 파이프라인 대비 크게 줄고, 감정과 운율 정보도 유지됩니다.

 

이 영역은 아직 빠르게 발전 중입니다. 지금 논문을 보면 상당 부분이 이 방향을 다루고 있습니다.


8. 엣지에서의 음성 AI — 클라우드 없이 동작하려면

지금까지 설명한 기술들을 클라우드 서버에서 돌리는 것은 상대적으로 단순합니다. GPU를 충분히 쓸 수 있고, 메모리 제약도 없습니다. 문제는 엣지 디바이스, 즉 Jetson이나 MCU 같은 제한된 환경에서 동작시켜야 할 때입니다.

 

엣지 환경에서는 모든 기술을 다 쓸 수 없습니다. 우선순위를 정해야 합니다.

 

KWS는 항상 온칩으로. 웨이크워드 감지는 1mW 이하로도 돌아가야 합니다. MCU 레벨에서 처리합니다. ASR은 경량 모델로. Whisper의 경우 tiny나 base 모델을 INT8 양자화해서 씁니다. TTS는 Vocoder 선택이 핵심. Neural Vocoder는 생각보다 무겁습니다. 엣지에서는 Vocoder를 교체하거나 경량화하는 것만으로 레이턴시가 크게 달라집니다.

 

엣지 음성 AI에서 중요한 또 다른 관점은 레이턴시 예산(latency budget) 입니다. 사용자가 말을 마치고 응답이 나오기까지 허용 가능한 시간은 보통 1~2초입니다. VAD, ASR, LLM 추론, TTS의 레이턴시 합이 이 안에 들어와야 합니다. 어느 단계에서 얼마를 쓸 수 있는지 역산해서 모델을 선택해야 합니다.