단순 TTS 버리고 제어형 오디오 모델로 갈아탄 이유
"목소리가 너무 기계 같아요. 감정이 안 실리고, 노래 가사를 줘도 주문을 외우듯 읽기만 합니다."
지난 분기 주요 AI 음성 서비스 개편 미팅에서 모바일 UX 담당자가 내던진 일침이었습니다. 서비스에 탑재된 기존 Text-to-Speech(TTS) 파이프라인은 텍스트를 정확하게 읽는 데는 성공했습니다. 하지만 사용자가 원했던 것은 단단한 기계음이 아니었습니다. 대화 맥락에 따라 자연스럽게 한숨을 쉬거나, 웃음기를 섞어 말하고, 때로는 간단한 멜로디를 따라 부를 수 있는 '생동감 있는 오디오 생물체'였습니다.
전통적인 TTS 아키텍처는 텍스트를 음소(Phoneme)로 변환한 뒤 Mel-Spectrogram을 거쳐 보코더(Vocoder)로 파형을 생성하는 방식이었습니다. 이 구조에서는 화자의 억양, 속도, 감정, 표현력 같은 정교한 요소를 텍스트 프롬프트만으로 제어하는 데 명확한 한계가 존재했습니다. 텍스트에 포함되지 않은 '말하는 방식'의 레이어를 제어할 무기가 없었던 셈입니다.
결국 기존 텍스트 기반 음성 합성 아키텍처를 전면 재검토해야 했습니다. 단순 텍스트 음성 합성을 넘어 오디오 신호 자체를 토큰화하고, 텍스트와 오디오를 동일한 트랜스포머 공간에서 다루는 통합 멀티모달 오디오 파이프라인으로 전환하기로 결정했습니다.
오늘 글을 한 줄로 요약하면 이겁니다. 단순히 글자를 읽어주는 AI에서 벗어나 억양, 감정, 가창까지 정밀하게 통제하려면 텍스트와 오디오 토큰을 통합한 제어형 오디오 아키텍처로 전환해야 합니다.
1. 지휘자 없는 단원에게 오케스트라 악보를 쥐어주던 시절
기존의 TTS 아키텍처를 비유하자면, 지휘자 없이 연주자들에게 악보만 던져주고 연주하라고 강요하는 것과 같았습니다. 연주자(보코더)는 악보(텍스트)를 정확히 읽을 수는 있지만, 어디서 강하게 연주해야 하는지, 어디서 부드럽게 음을 끌어야 하는지 전혀 알 수 없었습니다. 그 결과는 메마르고 딱딱한 오디오 출력이었습니다.
반면 우리가 새롭게 구축하고자 한 제어형 멀티모달 오디오 아키텍처는 실시간으로 연주의 템포, 톤, 감정선을 지휘하는 '전지전능한 지휘자'를 도입하는 과정이었습니다. 텍스트 모달리티와 오디오 모달리티를 분리된 단계로 처리하지 않고, 하나의 거대 언어모델(LLM) 백본 안에서 토큰 단위로 함께 학습시키고 생성하는 구조입니다.
이를 가능하게 만든 핵심 키워드는 바로 오디오 토크나이저(Audio Tokenizer)와 조건부 억양 제어(Prosody Conditioning) 모듈입니다. 오디오 파형을 연속적인 벡터가 아닌 이산적인(Discrete) 음향 토큰으로 압축한 뒤, 이를 텍스트 토큰과 교차 배열(Interleaved)하여 모델에 입력하는 방식입니다.
- 이산 오디오 토큰화(Discrete Audio Tokenization): 연속적인 오디오 파형을 고성능 코덱 기반으로 이산적 수치 코드로 변환하여 언어모델이 글자처럼 오디오를 이해하게 만드는 기술
- 운율 제어(Prosody Control): 음의 높낮이(Pitch), 말하는 속도(Duration), 에너지(Energy) 등의 음향 파라미터를 텍스트 문맥과 결합하여 컨트롤하는 기법
- 통합 멀티모달 트랜스포머(Unified Multimodal Transformer): 텍스트 이해와 오디오 생성을 단일 인공신경망 백본 내부에서 자가주의(Self-Attention) 메커니즘으로 처리하는 구조
이 아키텍처를 통해 모델은 "이 문장은 슬픈 어조로 천천히 말해줘"라는 지시어뿐만 아니라, "이 부분은 살짝 노래하듯 읊조려줘"라는 정교한 지시까지 정확히 이행할 수 있게 되었습니다.
실제 시스템 고도화 후 가시적인 성과가 즉각적으로 나타났습니다. 기존 파이프라인 대비 주요 성능 지표가 대폭 개선되었습니다.
- RTF(Real-Time Factor): 0.38에서 0.14로 63% 단축 (1초 분량의 음성을 생성하는 데 0.14초만 소요)
- 화자 유사도 점수(SIM-COS): 기존 0.71에서 0.89로 대폭 향상
- 사용자 주관적 음질 평가(MOS): 3.4점에서 4.5점으로 대폭 상승
- 추임새 및 자연스러운 가창 변환 성공률: 42% 수준에서 91%로 도약
2. 메모리 폭발과 음조 이탈: 오디오 토크나이저 도입 잔혹사
하지만 전환 과정이 결코 순탄치만은 않았습니다. 새로운 아키텍처를 구축하며 맞닥뜨린 첫 번째 대형 장애는 오디오 토큰의 폭발적인 길이로 인한 'GPU OOM(Out of Memory) 잔혹사'였습니다.
1초의 오디오 신호를 24kHz 샘플링 레이트로 수집할 때, 이를 50Hz 단위의 이산 토큰으로 변환하더라도 1초당 50개 이상의 오디오 토큰이 생성됩니다. 10초 분량의 음성만 다루더라도 텍스트 토큰 수십 개에 비해 오디오 토큰은 500개를 훌쩍 넘어섰습니다. 시퀀스 길이가 길어질수록 트랜스포머의 셀프 어텐션 연산량은 제곱으로 증가했고, 서빙 인프라는 순식간에 비명을 질렀습니다.
첫 번째 시도에서는 오디오 토크나이저의 코드북(Codebook) 개수를 무작정 줄여보았습니다. 결과는 참담했습니다. 메모리 사용량은 줄었지만 생성된 목소리가 마치 물속에서 말하는 것처럼 뭉개지고, 가창 시 음정이 완전히 틀어지는 음조 이탈 현상이 발생했습니다.
[초기 잔혹사 구조]
Text Tokens + High-rate Audio Tokens (50개/초 * 8개 코드북 = 400개 토큰/초)
→ Transformer Attention Cost: O(N²) 폭증
→ GPU 메모리 80GB 초과 및 Latency 2.5초 폭발
[개선된 아키텍처]
Text Tokens + Residual Vector Quantization(RVQ) 계층적 토큰화 (표현층/세부층 분리)
→ 백본 LLM은 상위 표현층(50개 토큰/초)만 예측
→ 하위 세부 음향 토큰은 경량화된 오디오 디코더가 병렬 복원
→ Latency 60% 절감 및 메모리 안정화
우리는 이 문제를 해결하기 위해 잔여 벡터 양자화(Residual Vector Quantization, RVQ) 계층을 분리하는 이중화 전략을 선택했습니다. 상위 레벨의 거대 언어모델은 오디오의 뼈대가 되는 '의미 및 프로소디 토큰'만을 생성하게 하고, 하위 레벨의 촘촘한 세부 음향 텍스트는 훨씬 가벼운 별도의 오디오 디코더 네트워크가 병렬로 복원하도록 아키텍처를 분리했습니다.
두 번째 난관은 '가창(Singing)과 대화(Speech) 간의 도메인 이탈' 문제였습니다. 평소처럼 말하다가 자연스럽게 노래로 넘어가는 구간에서 음높이(F0) 추적기가 널뛰기를 뛰며 괴성이 출력되는 현상이 발생했습니다. 대화 데이터셋과 가창 데이터셋의 음향적 특성이 완전히 달랐기 때문이었습니다.
이 문제는 오디오 토큰 생성 시 'F0(기본 주파수) Explicit Conditioning' 레이어를 추가하여 해결했습니다. 모델에게 단순히 오디오 토큰을 예측하게 만드는 것이 아니라, 입력받은 텍스트에 포함된 타겟 피치와 템포 정보를 명시적 힌트로 주입함으로써 말하듯 부르는 자연스러운 가창 전환을 완벽히 통제할 수 있었습니다.
3. 현장 적용을 위한 3단계 제어형 오디오 파이프라인 구축 가이드
실무 인프라에서 원하는 대로 말하고 노래하는 AI 오디오 엔진을 성공적으로 안착시키기 위해 우리가 직접 검증한 3단계 핵심 개편 가이드를 공유합니다.
1단계: 텍스트-오디오 교차 토큰화 및 RVQ 아키텍처 정립
- RVQ 레벨 분리: 메인 LLM은 RVQ의 첫 번째~두 번째 수퍼바이저 토큰만 예측하도록 설정하여 시퀀스 길이를 최소화하세요.
- Special Token 설계: 대화 시작, 끝뿐만 아니라
<laughter>,<sigh>,<singingstart>,<singingend>와 같은 제어용 특수 토큰을 프롬프트에 정의하여 명시적 제어권을 확보해야 합니다. - 스트리밍 분할: 오디오 토큰이 10개(약 0.2초 분량) 쌓일 때마다 실시간으로 보코더에 스트리밍 푸시하는 패킷 파이프라인을 구축하세요.
2단계: 프로소디 & F0 콘텍스트 인젝션 파이프라인 구축
- 음조(Pitch) 및 에너지는 별도 벡터로 인코딩: 오디오 생성 직 전 텍스트 임베딩 레이어에 피치 Contour 데이터를 나비처럼 부드럽게 Add/Concat 해줍니다.
- 화자 임베딩(Speaker Embedding) 고정: 화자의 정체성을 유지하는 Speaker Encoder 벡터를 Cross-Attention 키-밸류로 지속 주입하여 장문 생성 시에도 목소리가 변하지 않도록 고정합니다.
3단계: 실시간 추론 레이턴시 최적화 및 엣지 서빙
- KV 캐시 최적화: 오디오 토큰 생성 시 기존 토큰들의 Key-Value 캐시를 효율적으로 재사용하도록 PagedAttention 아키텍처를 결합하세요.
- Speculative Decoding 도입: 작은 경량 오디오 모델이 토큰 후보군을 먼저 빠르게 생성하고, 메인 모델이 이를 검증하는 추측적 해독 기법을 적용하여 TTFT(Time to First Token)를 최소화합니다.
4. 내일 출근해서 당장 활용하는 오디오 아키텍처 무기 팩
팀에 돌아가 제어형 오디오 모델 도입을 검토하거나, 기존 TTS의 답답함을 해결하고 싶은 엔지니어분들을 위해 현장용 실전 체크리스트와 제어 프롬프트 템플릿을 준비했습니다. 아래 단일 마크다운 코드 블록을 그대로 복사해서 엔지니어링 미팅과 LLM 파이프라인 구축에 활용해 보세요.
====================================================================
1. 제어형 오디오 모델 아키텍처 점검 체크리스트 (Audio Architecture Checklist)
====================================================================
[ ] 토크나이저 시퀀스 압축률 검증
- 1초당 오디오 토큰 수가 50~100개 이하로 유지되는가?
- RVQ(Residual Vector Quantization) 계층 분리를 통해 백본 LLM 부하를 줄였는가?
[ ] 프로소디 및 감정 제어성 확보
- 텍스트 프롬프트를 통해 억양(Prosody), 속도(Speed), 톤(Tone)을 제어할 수 있는가?
- 감정 태그(<happy>, <sad>, <whisper> 등) 삽입 시 오디오 파형 변화가 즉각 반영되는가?
[ ] 실시간 스트리밍 및 Latency KPI
- TTFT(Time to First Token)가 300ms 이내로 도달하는가?
- RTF(Real-Time Factor)가 0.2 이하 수준으로 운영 가능한가?
- Chunk 단위 스트리밍 시 클릭음(Pop noise)이나 불연속 구간이 발생하지 않는가?
[ ] 화자 일관성 및 가창 전환 성능
- 1분 이상의 장문 생성 시 화자의 정체성(Speaker Identity)이 변질되지 않는가?
- 대화(Speech)에서 가창(Singing) 모드로 전환 시 음조(F0) 이탈 현상이 없는가?
====================================================================
2. 오디오 제어 프롬프트 템플릿 (Audio Generation System Prompt)
====================================================================
[역할 정의]
당신은 텍스트의 맥락에 맞춰 감정, 억양, 호흡, 가창을 정밀하게 표현하는 차세대 오디오 생성 엔진입니다.
제시된 입력 텍스트와 스타일 제어 태그를 분석하여 적절한 오디오 토큰 코드를 생성하세요.
[요청 사항]
1. 텍스트 내 포함된 제어 태그(<sigh>, <soft>, <singing_start> 등)를 수신하면 음향 파라미터를 아래와 같이 변경하세요.
- <sigh>: 0.5초간의 호흡 음향 토큰 삽입 후 템포를 15% 감속
- <whisper>: 피치 에너지를 40% 감소시키고 고주파 노이즈 성분을 강조
- <singing_start key="C_Major" bpm="90">: 입력 텍스트를 정해진 조성과 템포에 맞춰 멜로디형 오디오 토큰으로 전환
2. 대화의 마지막 문장에는 자연스러운 억양 내림(Falling Intonation)을 적용하세요.
[입력 예시]
"오늘 너무 고생 많았어. <sigh> 휴, 이제 좀 쉬어볼까? <singing_start> 잘 자라 우리 아기, 앞뜰과 뒷동산에... <singing_end>"
[출력 가이드라인]
- Output Format: Audio Token Sequence Interleaved with Control Tokens
- Target RTF: < 0.15
- Speaker Embedding ID: "spk_female_kr_01"
단순히 글자를 소리로 바꾸는 시대는 이미 지났습니다. 우리가 마주한 AI 음성 기술의 다음 고지는 인간의 감정과 억양, 심지어 가창 영역까지 부드럽게 넘나드는 '완합형 오디오 멀티모달'입니다.
오늘 소개한 오디오 토큰화와 계층적 제어 아키텍처는 단순한 기술적 호기심이 아닙니다. 사용자에게 더 깊은 몰입감을 선사하고, 서비스의 인간적 접점을 완성하기 위한 필수 아키텍처입니다.
여러분도 기존의 딱딱했던 TTS 엔진에서 벗어나, 원하는 대로 말하고 노래하는 차세대 오디오 파이프라인 구축에 도전해 보시길 권합니다.
원문 참고 자료
이 글의 사실 확인과 추가 읽기를 위한 원문입니다. 카카오 기술 블로그
댓글 0