evalstone/evalscope/docs/en/benchmarks/seed_tts_eval.md
2026-07-08 08:57:50 +00:00

4.7 KiB

Seed-TTS-Eval

Overview

Seed-TTS-Eval is an objective benchmark for zero-shot text-to-speech and voice conversion evaluation. It uses out-of-domain English and Mandarin samples from Common Voice and DiDiSpeech-2, and the official evaluation focuses on intelligibility and speaker consistency.

Task Description

  • Task Type: Zero-shot text-to-speech generation
  • Input: Reference speaker audio, prompt transcript, and target text
  • Output: Synthesized speech audio for the target text using the reference speaker
  • Languages: English and Mandarin

Evaluation Notes

  • Default subsets: en and zh
  • The evaluated TTS model must return generated audio as ContentAudio, or return an audio path, URL, or data URI as the completion text
  • EvalScope provides eval_type="text2speech" for HTTP TTS services.
    • Volcengine provider: configure model="seed-tts-2.0", api_url="https://openspeech.bytedance.com/api/v3/tts/unidirectional", and model_args={"speaker": "..."}
    • OpenAI provider: configure model="tts-1" (or tts-1-hd), api_url="https://api.openai.com/v1", and model_args={"provider": "openai", "voice": "nova"}
  • Default metric: audio_wer, which transcribes generated audio through an OpenAI-compatible /audio/transcriptions endpoint and computes WER/CER-style error rate with language-specific normalization
  • Configure the ASR endpoint via metric_list, or set SEED_TTS_EVAL_ASR_API_BASE, SEED_TTS_EVAL_ASR_API_KEY, SEED_TTS_EVAL_ASR_MODEL, and SEED_TTS_EVAL_ASR_API_PROTOCOL
  • For Volcengine Ark audio-understanding models, set api_protocol="responses" and use a model that supports audio input, such as doubao-seed-2-0-lite-260428
  • Speaker similarity is part of the official benchmark, but it requires a separate speaker verification backend and is not enabled by default

Properties

Property Value
Benchmark Name seed_tts_eval
Dataset ID evalscope/Seed-TTS-Eval
Paper Paper
Tags Audio, TextToSpeech
Metrics audio_wer
Default Shots 0-shot
Evaluation Split train

Data Statistics

Metric Value
Total Samples 3,108
Prompt Length (Mean) 243.31 chars
Prompt Length (Min/Max) 193 / 376 chars

Per-Subset Statistics:

Subset Samples Prompt Mean Prompt Min Prompt Max
en 1,088 304.3 224 376
zh 2,020 210.46 193 231

Audio Statistics:

Metric Value
Total Audio Files 3,108
Audio per Sample min: 1, max: 1, mean: 1
Formats wav

Sample Example

Subset: en

{
  "input": [
    {
      "id": "ffd452c5",
      "content": [
        {
          "audio": "[BASE64_AUDIO: wav, ~183.0KB]",
          "format": "wav"
        },
        {
          "text": "Use the reference audio and prompt transcript to synthesize the target text in the same speaker voice.\nPrompt transcript: We asked over twenty different people, and they all said it was his.\nTarget text: Get the trust fund to the bank early.\nReturn only the generated audio."
        }
      ]
    }
  ],
  "target": "Get the trust fund to the bank early.",
  "id": 0,
  "group_id": 0,
  "subset_key": "en",
  "metadata": {
    "filename": "common_voice_en_10119832-common_voice_en_10119840",
    "prompt_text": "We asked over twenty different people, and they all said it was his.",
    "text": "Get the trust fund to the bank early.",
    "prompt_audio_path": "prompt-wavs/common_voice_en_10119832.wav",
    "reference_audio_path": "wavs/common_voice_en_10119832-common_voice_en_10119840.wav",
    "language": "en",
    "wer_language": "en"
  }
}

Prompt Template

Prompt Template:

Use the reference audio and prompt transcript to synthesize the target text in the same speaker voice.
Prompt transcript: {prompt_text}
Target text: {text}
Return only the generated audio.

Usage

Using CLI

evalscope eval \
    --model YOUR_MODEL \
    --api-url OPENAI_API_COMPAT_URL \
    --api-key EMPTY_TOKEN \
    --datasets seed_tts_eval \
    --limit 10  # Remove this line for formal evaluation

Using Python

from evalscope import run_task
from evalscope.config import TaskConfig

task_cfg = TaskConfig(
    model='YOUR_MODEL',
    api_url='OPENAI_API_COMPAT_URL',
    api_key='EMPTY_TOKEN',
    datasets=['seed_tts_eval'],
    dataset_args={
        'seed_tts_eval': {
            # subset_list: ['en', 'zh']  # optional, evaluate specific subsets
        }
    },
    limit=10,  # Remove this line for formal evaluation
)

run_task(task_cfg=task_cfg)