Skip to content
Published on

tts-bench: 품질이 주관적일 때 로컬 TTS를 비교하는 법

공유하기
Authors

들어가며 — TTS 비교가 어려운 이유

이번 주 GeekNews에서 화제가 된 tts-bench는 개발자 5uck1ess가 만든 로컬 벤치마크다. 손에 있는 하드웨어에서 직접 여러 TTS(text-to-speech) 모델을 비교하게 해준다. 도구 이야기에 앞서 문제부터 짚자. 음성 합성은 벤치마크하기가 유난히 까다롭다. "좋다"는 게 한 축이 아니기 때문이다. 목소리가 아름다워도 발음을 뭉개거나 단어를 빠뜨릴 수 있고, 또렷하게 알아들려도 밋밋하고 기계적일 수 있으며, 둘 다 좋은데 실시간 에이전트에 쓰기엔 너무 느릴 수도 있다. 자연스러움·명료성·속도는 서로 다른 방향으로 당기고, 앞의 둘은 주관적이다. 음성 인식의 WER처럼 딱 떨어지는 정답 수치가 없다. 저자도 분명히 말한다. "품질은 주관적이라, 진짜 기준은 당신의 귀다." 이 벤치가 읽을 가치를 갖는 이유는, 그 사실을 덮지 않고 오히려 그 위에 설계됐다는 데 있다.

프로젝트의 윤곽을 한자리에 모으면 이렇다.

  • 3개 장비에서 55개 모델 (윈도우 + RTX 5090, 리눅스 + RTX 3090, 애플 M4)
  • 사전 정의 음성 엔진 16개 + 제로샷 복제 모델 39개
  • CPU·CUDA·애플 실리콘(MPS)에서 구동
  • 벤치 코드는 MIT, 각 모델은 자체 라이선스를 따름

tts-bench가 실제로 재는 것

벤치는 세 개의 렌즈로 구성된다.

속도(Speed) 는 객관적이고 공개 가능한 부분이다. 콜드/웜 TTFA(첫 오디오까지의 시간), RTF(실시간 계수, 높을수록 실시간보다 빠름), 메모리를 CPU·CUDA·애플 실리콘에서 측정한다. 2026년 6월 기준 선두를 보면 감이 온다.

  • CPU(Ryzen 9 9950X3D): Piper — 웜 TTFA 107ms, 실시간 59배
  • CUDA(RTX 5090): Kokoro — 웜 TTFA 67ms, 104배
  • 애플 M4(16GB): Piper — 웜 TTFA 208ms, 32배

재현 가능한 측정값이고, 벤치가 대놓고 순위를 매기는 유일한 영역이다.

청취(Listen) 는 갤러리다. 모든 모델을 모든 프롬프트에 대해, 기본 목소리와 음성 복제(cloning) 두 방식으로 들려주고, 각각 인라인 <audio> 플레이어가 붙어 귀로 판단할 수 있다. 샘플은 장비에 독립적이다 — 가장 고품질 장비에서 한 번만 생성한다 — 음색과 아티팩트가 어느 기계에서 렌더링됐는지에 좌우되면 안 되기 때문이다. README의 표현대로, 품질과 아티팩트는 5초면 드러난다. 표로는 보여줄 수 없는 것이다.

점수(Scores) 는 모델별 객관적 품질 대리지표다. 자연스러움은 UTMOS, 명료성은 WER, 복제 충실도는 SIM으로, 벤치 프롬프트에 대해 seed-tts-eval 방식의 ASR과 화자 검증으로 계산한다. 모델 목록은 경량 사전 정의 음성 엔진(82M의 Kokoro, 약 15M의 Piper)부터 제로샷 복제 계열(F5-TTS, Coqui XTTS-v2, ChatterBox 등 다수)까지 걸쳐 있고, 두 그룹을 기본/복제 토글로 나눠 본다.

정직한 대목 — 숫자가 말해주는 것과 못 하는 것

tts-bench에서 가장 흥미로운 건 무엇을 주장하지 않는가다. "가장 좋게 들리는" 단일 순위는 없다. NAQ라는 객관적 품질 점수를 시제품으로 만들었다가 걷어냈는데, 저자 말로는 "주관적 순위를 충분히 잘 따라가지 못해 공개할 수 없었다"고 한다. 그래서 별도로 재설계 중이다. 벤치는 속도만 순위 매기고, 품질은 청취 렌즈와, 실시간 인간 선호 Elo 리더보드로 이어지는 블라인드 A/B 투표 아레나에 맡긴다. UTMOS·WER·SIM은 판결이 아니라 "객관적 백스톱"이라고 표현된다.

이 신중함이 왜 정당한지는 복제 결과에서 드러난다. 32개 복제 모델 중 28개에 대한 397건의 블라인드 투표에서 음성 일치 상위 세 모델은 이랬다.

  • OmniVoice — 음성 일치 1위(24-1-3), 다만 "단어를 뭉개거나 빠뜨릴 수 있음"
  • Echo-TTS — 근소차 공동 1위(21-1-6), 깨끗한 44.1kHz
  • IndexTTS-2 — 3위(16-2-5), 억양 유지

함정은 첫 줄에 있다. 음색 중심의 A/B 투표는 뭉개진 단어를 벌하지 않는다. 즉 레퍼런스와 가장 비슷하게 들리는 모델이 동시에 올바른 단어를 말하는 데서는 질 수 있다는 뜻이고, 이게 바로 객관적 WER 점수가 잡아내려는 간극이다. 숫자 하나만 보면 엉뚱한 모델을 고르게 된다.

새겨둘 주의점이 하나 더 있다. 벤치는 공정성을 위해 모든 모델에 같은 평범한 프롬프트를 먹인다. 그래서 감정 태그, 음성 묘사, 스타일 노브 같은 표현 기능은 어떤 점수에도 반영되지 않는다. 당신의 용도가 바로 그런 기능에 기댄다면, 리더보드는 정작 가장 중요한 것에 대해 침묵한다.

로컬에서 돌려 보고, 내 용도로 평가하기

설치에는 uv와 Python 3.11이 필요하고 10~15분쯤 걸린다. 전체 세트는 무겁다.

  • 모델별 가상환경 약 39GB (저장소 안)
  • 모델 가중치 약 125GB (Hugging Face 캐시, 저장소 아님)
  • 다 합쳐 약 165GB

하지만 55개를 다 깔라는 게 아니다. 원하는 것만 넘기면 된다. ./install.sh kokoro piper miso(윈도우는 .ps1), 그리고 bench.py는 가상환경이 있는 모델만 돌린다. 빠른 감 잡기용으로 python speak.py kokoro, 한 방 A/B 비교로 python compare.py "문장"이 있다.

이 부분 설치 방식이 핵심이다. 전역 리더보드를 믿는 대신 로컬에서 돌려야 하는 이유는, TTS 품질이 용도에 따라 달라지기 때문이다. 당신의 프롬프트, 목표 목소리, 언어, 지연 예산, 하드웨어에 달려 있다. 깨끗한 영어 문장에서 Elo 1위인 모델이 당신 도메인의 전문 용어나 특정 복제 레퍼런스에서는 무너질 수 있다. 익숙한 "자기 데이터로 평가하라"는 원칙을 도구로 옮긴 셈이다. 벤치는 하네스를 손에 쥐여주고, 솔직하게, 직접 들어보라고 말한다.

마치며

tts-bench의 진짜 미덕은 객관성이 어디서 끝나는지에 대한 절제다. 속도는 재고 순위를 매기고, 품질은 보여주되 판단은 맡기며, 복제 선호는 블라인드 투표로 모으되 명료성이 아니라 선호라고 이름 붙인다. 주관적인 것을 벤치마크하는 정직한 방법이다.

실용적 교훈은 작고 구체적이다. 점수 하나 보고 승자를 정하지 마라. 실제로 고려 중인 두세 모델만 깔아, 배포할 바로 그 기계에서 당신의 텍스트와 레퍼런스 목소리를 먹여 보고, 귀로 결정하라. WER과 RTF는 정답이 아니라 백스톱으로 두고.

참고 자료