Web Analytics

ZipVoice

⭐ 661 stars Russian by k2-fsa

🌐 Язык

ZipVoice⚡

Быстрый и высококачественный текст-в-голос без обучения на примерах с Flow Matching

Обзор

ZipVoice — это серия быстрых и высококачественных моделей TTS с нулевым обучением, основанных на flow matching.

1. Ключевые особенности

2. Варианты моделей

Название модели Описание Статья Демо
ZipVoice Базовая модель, поддерживающая нулевое обучение TTS для одного говорящего на китайском и английском языках.
ZipVoice-Distill Дистиллированная версия ZipVoice, отличающаяся повышенной скоростью при минимальных потерях качества.
ZipVoice-Dialog Модель для генерации диалогов на основе ZipVoice, способная генерировать одноканальные диалоги между двумя собеседниками.
ZipVoice-Dialog-Stereo Стерео-версия ZipVoice-Dialog, позволяющая создавать диалоги с двумя каналами, при этом каждому собеседнику назначается отдельный канал.

Новости

2025/07/14: Вышли две модели генерации устных диалогов: ZipVoice-Dialog и ZipVoice-Dialog-Stereo. arXiv demo page

2025/07/14: Выпущен датасет OpenDialog — 6,8 тысяч часов устных диалогов. Скачать можно на hf, ms. Подробнее на arXiv.

2025/06/16: Выпущены ZipVoice и ZipVoice-Distill. arXiv demo page

Установка

1. Клонируйте репозиторий ZipVoice

git clone https://github.com/k2-fsa/ZipVoice.git

2. (Необязательно) Создайте виртуальное окружение Python

python3 -m venv zipvoice
source zipvoice/bin/activate

3. Установите необходимые пакеты

pip install -r requirements.txt

4. Установите k2 для обучения или эффективного вывода

k2 необходим для обучения и может ускорить вывод. Тем не менее, вы всё равно можете использовать режим вывода ZipVoice без установки k2.

Примечание: Убедитесь, что устанавливаете версию k2, соответствующую вашей версии PyTorch и CUDA. Например, если вы используете pytorch 2.5.1 и CUDA 12.1, вы можете установить k2 следующим образом:

pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Пожалуйста, ознакомьтесь с https://k2-fsa.org/get-started/k2/ для подробностей. Пользователи из материкового Китая могут обратиться к https://k2-fsa.org/zh-CN/get-started/k2/.

python3 -c "import k2; print(k2.__file__)"

Использование

1. Генерация речи одним говорящим

Чтобы сгенерировать речь от одного говорящего с помощью наших предобученных моделей ZipVoice или ZipVoice-Distill, используйте следующие команды (необходимые модели будут загружены с HuggingFace):

#### 1.1 Инференс одного предложения

python3 -m zipvoice.bin.infer_zipvoice \
    --model-name zipvoice \
    --prompt-wav prompt.wav \
    --prompt-text "I am the transcription of the prompt wav." \
    --text "I am the text to be synthesized." \
    --res-wav-path result.wav
#### 1.2 Инференс списка предложений

python3 -m zipvoice.bin.infer_zipvoice \
    --model-name zipvoice \
    --test-list test.tsv \
    --res-dir results

2. Диалоговая генерация речи

#### 2.1 Команда для инференса

Чтобы сгенерировать двухсторонние устные диалоги с помощью наших предобученных моделей ZipVoice-Dialogue или ZipVoice-Dialogue-Stereo, используйте следующие команды (необходимые модели будут загружены с HuggingFace):

python3 -m zipvoice.bin.infer_zipvoice_dialog \
    --model-name "zipvoice_dialog" \
    --test-list test.tsv \
    --res-dir results
которые генерируют соответственно моно- и стерео-диалоги.

#### 2.2 Форматы входных данных

Каждая строка файла test.tsv соответствует одному из следующих форматов:

(1) Формат объединённого запроса, где аудиозаписи и транскрипции двух реплик объединены в один wav-файл запроса:

{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}

(2) Формат разделённого запроса, где аудиофайлы и транскрипции двух говорящих существуют в отдельных файлах:

{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}

3 Руководство по лучшему использованию:

#### 3.1 Длина подсказки

Рекомендуем использовать короткий wav-файл подсказки (например, менее 3 секунд для генерации речи одного говорящего, менее 10 секунд для генерации диалога), чтобы ускорить процесс вывода. Очень длинная подсказка замедлит вывод и ухудшит качество речи.

#### 3.2 Оптимизация скорости

Если скорость вывода неудовлетворительная, вы можете ускорить процесс следующим образом:

#### 3.3 Контроль памяти

Введённый текст будет разбит на части по знакам препинания (для генерации речи одного говорящего) или по символу смены говорящего (для генерации диалога). Затем части текста будут обработаны пакетами. Таким образом, модель может обрабатывать текст любой длины при почти постоянном использовании памяти. Вы можете управлять использованием памяти с помощью параметра --max-duration.

#### 3.4 "Сырой" режим оценки

По умолчанию мы предварительно обрабатываем входные данные (wav-файл подсказки, транскрипцию подсказки и текст) для эффективного вывода и лучшей производительности. Если вы хотите оценить "сырое" качество модели на точных предоставленных входных данных (например, для воспроизведения результатов из нашей статьи), передайте параметр --raw-evaluation True.

#### 3.5 Короткий текст

При генерации речи для очень коротких текстов (например, одно-два слова), сгенерированная речь может иногда пропускать некоторые произношения. Чтобы решить эту проблему, передайте параметр --speed 0.3 (0.3 — настраиваемое значение), чтобы увеличить длительность сгенерированной речи.

#### 3.6 Исправление неправильного произношения китайских многозначных иероглифов

Мы используем pypinyin для преобразования китайских иероглифов в пиньинь. Однако иногда он может неправильно произносить многозначные иероглифы (多音字).

Чтобы вручную исправить эти ошибки произношения, заключайте исправленный пиньинь в угловые скобки < > и добавляйте обозначение тона.

Пример:

> Примечание: Если вы хотите вручную назначить несколько вариантов пиньиня, заключайте каждый пиньинь в <>, например: 这把十公分

#### 3.7 Удаление длинных пауз из сгенерированной речи

Модель автоматически определяет позиции и длительность пауз в сгенерированной речи. Иногда в середине речи появляются длинные паузы. Если вы хотите их убрать, передайте флаг --remove-long-sil для удаления длинных пауз в середине сгенерированной речи (краевые паузы удаляются по умолчанию).

#### 3.8 Загрузка модели

Если у вас возникают проблемы с подключением к HuggingFace при загрузке предобученных моделей, попробуйте переключить endpoint на зеркальный сайт: export HF_ENDPOINT=https://hf-mirror.com.

Обучение собственной модели

Смотрите директорию egs для примеров обучения, дообучения и оценки.

Развертывание на C++

Посмотрите sherpa-onnx для решения по развертыванию на C++ на CPU.

Обсуждение и коммуникация

Вы можете напрямую обсуждать на Github Issues.

Вы также можете отсканировать QR-код для вступления в нашу группу в WeChat или подписаться на официальный аккаунт WeChat.

| Группа Wechat | Официальный аккаунт Wechat | | ------------- | -------------------------- | |wechat |wechat |

Цитирование

@article{zhu2025zipvoice,
      title={ZipVoice: Fast and High-Quality Zero-Shot Text-to-Speech with Flow Matching},
      author={Zhu, Han and Kang, Wei and Yao, Zengwei and Guo, Liyong and Kuang, Fangjun and Li, Zhaoqing and Zhuang, Weiji and Lin, Long and Povey, Daniel},
      journal={arXiv preprint arXiv:2506.13053},
      year={2025}
}

@article{zhu2025zipvoicedialog, title={ZipVoice-Dialog: Non-Autoregressive Spoken Dialogue Generation with Flow Matching}, author={Zhu, Han and Kang, Wei and Guo, Liyong and Yao, Zengwei and Kuang, Fangjun and Zhuang, Weiji and Li, Zhaoqing and Han, Zhifeng and Zhang, Dong and Zhang, Xin and Song, Xingchen and Lin, Long and Povey, Daniel}, journal={arXiv preprint arXiv:2507.09318}, year={2025} }

--- Tranlated By Open Ai Tx | Last indexed: 2025-10-06 ---