Phonon TTS 릴리스: 고품질 온디바이스 음성 합성

개요

Phonon은 서버 왕복이나 네트워크 연결 없이 작동하도록 설계된 소형 온디바이스 텍스트 음성 변환(TTS) 모델입니다. Pocket TTS 계보에서 파생된 플로우 매칭(flow matching) 기술을 활용하여, Phonon은 작은 메모리 점유율 내에서 고품질 오디오 합성을 구현하며 모바일 기기, 노트북, 웹 브라우저에 배포하기에 적합합니다.

기술 아키텍처 및 기능

Phonon은 65MB와 75MB 두 가지 주요 크기로 제공됩니다. 이 모델은 영어, 프랑스어, 독일어, 스페인어, 포르투갈어 등 5개 언어를 지원합니다.

  • 추론 효율성: 이 모델은 속도에 최적화되어 있으며, Hugging Face Open TTS 리더보드의 CPU 스트리밍 부문, 특히 첫 오디오 생성 시간(TTFA) 지표에서 1위를 차지했습니다. 31m 버전은 28ms, 40m 버전은 38ms의 TTFA를 달성합니다.
  • 추론 프레임워크: 팀은 CPU(Intel, Arm, WebAssembly), GPU(CUDA, Vulkan, Metal, WebGPU), NPU(Apple Core ML, Snapdragon)를 포함한 10개 이상의 백엔드를 지원하는 전용 추론 프레임워크인 ptts를 개발했습니다.
  • Transformers 통합: Phonon은 Hugging Face Transformers(v5.21 이상)에 통합되어 있습니다. 모델이 오디오 잠재 변수(latents)를 자기회귀적으로 처리하는 모듈식 설계를 사용합니다. 오디오 코덱은 토크나이저 역할을 하며, 음성은 원시 오디오 녹음이 아닌 화자 잠재 변수의 텐서로 표현됩니다.

라이선스 및 접근성

  • Phonon 31m: Apache 2.0 라이선스가 적용되어 상용 제품에서 무료로 사용할 수 있습니다.
  • Phonon 40m: CC BY-NC 라이선스가 적용되어 비상용 프로젝트를 대상으로 합니다.
  • 배포: 이 모델은 Gradium Studio를 통한 음성 복제 및 맞춤형 음성 설계를 지원하여, 개발자가 로컬 애플리케이션에 개인화된 음성을 통합할 수 있도록 합니다.

성능 및 벤치마크

Phonon은 명료도(단어 오류율), 속도(역실시간 계수 및 TTFA), 자연스러움(UTMOS/KOMOS)을 기준으로 모델을 평가하는 Hugging Face Open TTS 리더보드에서 평가되었습니다.

  • 명료도: Phonon은 독일어와 스페인어 부문에서 1위를 차지했으며, 평가된 모든 언어에서 상위 3위권을 유지하여 훨씬 더 큰 규모의 모델들과 경쟁하고 있습니다.
  • 속도: 현재 첫 오디오 생성 시간(TTFA)에 대한 CPU 스트리밍 벤치마크를 선도하고 있으며, 실시간 저지연 애플리케이션에 적합함을 입증했습니다.

Transformers에서의 구현

개발자는 GradiumPhononTTSForConditionalGeneration 클래스를 활용하여 Transformers 생태계 내에서 Phonon을 사용할 수 있습니다. 이 모델은 오디오 프롬프트가 텐서로 주입되는 채팅 템플릿 형식을 사용합니다.

from transformers import AutoProcessor, GradiumPhononTTSForConditionalGeneration

model_id = "gradium/phonon-31m-en"
processor = AutoProcessor.from_pretrained(model_id, device_map="auto")
model = GradiumPhononTTSForConditionalGeneration.from_pretrained(model_id, device_map="auto")

# The processor handles audio tokenization and chat template formatting
inputs = processor.apply_chat_template(
    conversation,
    tokenize=True,
    return_dict=True,
    add_generation_prompt=True,
    processor_kwargs={"audio_prompt_latents": [voice]},
).to(model.device)

outputs = model.generate(**inputs)
audio = processor.decode(outputs.audio_latents, outputs.audio_latents_mask)

이 구현은 배치 생성 및 전체 그래프 torch.compile 지원을 가능하게 하여 대규모 음성 데이터셋을 대규모로 합성할 수 있도록 합니다.

Sources