ZipVoice⚡
極速且高品質的零樣本文本轉語音,採用流匹配技術
概述
ZipVoice 是一系列基於流匹配的快速且高品質零樣本 TTS 模型。
1. 主要特點
- 小巧且快速:僅有 123M 參數。
- 高品質語音克隆:在說話人相似度、可懂度和自然度上均達到最先進水平。
- 多語言:支援中文和英文。
- 多模式:支援單一說話人及對話語音生成。
2. 模型變體
最新消息
2025/07/14:ZipVoice-Dialog 和 ZipVoice-Dialog-Stereo 兩款語音對話生成模型正式釋出。
2025/07/14:OpenDialog 資料集,包含 6.8k 小時語音對話資料,正式釋出。下載連結:,
。詳情請見
。
2025/06/16:ZipVoice 和 ZipVoice-Distill 模型正式釋出。
安裝
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 是訓練所必需的,並且可以加速推理。然而,即使不安裝 k2,你仍然可以使用 ZipVoice 的推理模式。
注意: 請確保安裝與你的 PyTorch 和 CUDA 版本相符的 k2 版本。例如,如果你使用的是 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/。- 檢查 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
--model-name可以是zipvoice或zipvoice_distill,分別代表蒸餾前和蒸餾後的模型。- 若文字中出現
<>或[],則被括號包住的字串將被視為特殊標記。<>表示中文拼音,[]表示其他特殊標籤。
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
test.tsv的每一行格式為{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}。
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
--model-name可以是zipvoice_dialog或zipvoice_dialog_stereo,
#### 2.2 輸入格式
test.tsv 的每一行都是以下格式之一:
(1) 合併提示格式,其中兩位說話者的提示音訊和轉錄被合併為一個提示 wav 檔案:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_name是輸出 wav 檔案的名稱。prompt_transcription是對話提示 wav 的文字轉錄,例如:「[S1] 你好。 [S2] 你好嗎?」prompt_wav是提示 wav 的路徑。text是要合成的文字,例如:「[S1] 我很好。 [S2] 你叫什麼名字? [S1] 我叫 Eric。 [S2] 嗨 Eric。」
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}
wav_name是輸出 wav 檔案的名稱。spk1_prompt_transcription是第一位說話者的提示 wav 音檔的文字稿,例如 "Hello"。spk2_prompt_transcription是第二位說話者的提示 wav 音檔的文字稿,例如 "How are you?"。spk1_prompt_wav是第一位說話者的提示 wav 音檔路徑。spk2_prompt_wav是第二位說話者的提示 wav 音檔路徑。text是要合成的文字,例如 "[S1] I'm fine. [S2] What's your name? [S1] I'm Eric. [S2] Hi Eric."
3 使用指引:
#### 3.1 提示長度
我們建議提示 wav 檔案較短(例如,單人語音生成時少於 3 秒,對話語音生成時少於 10 秒),以加快推論速度。過長的提示會降低推論速度並影響語音品質。
#### 3.2 速度優化
若推論速度不理想,可按以下方式加快:
- 模型蒸餾與減少步數:單人語音生成模型預設使用
zipvoice模型以提高語音品質。如需優先速度,可切換至zipvoice_distill並將--num-steps降至最低4(預設為 8)。 - CPU 多線程加速:在 CPU 上運行時,可傳入
--num-thread參數(如--num-thread 4)以增加線程數提高速度。預設為 1 線程。 - CPU 使用 ONNX 加速:在 CPU 上運行時,可使用 ONNX 模型搭配
zipvoice.bin.infer_zipvoice_onnx以加快速度(目前對話生成模型尚不支援 ONNX)。如需更快速度,可再設--onnx-int8 True使用 INT8 量化 ONNX 模型。請注意,量化模型會導致語音品質略微下降。不要在 GPU 上使用 ONNX,因為在 GPU 上會比 PyTorch 慢。
輸入的文字將根據標點符號(單人語音生成)或說話者切換符號(對話語音生成)分割為片段。這些片段會以批次處理,因此模型可用幾乎固定的記憶體處理任意長度的文字。可藉由調整 --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,請嘗試將端點切換至鏡像網站:export HF_ENDPOINT=https://hf-mirror.com。
訓練您自己的模型
請參閱 egs 目錄以獲得訓練、微調和評估的範例。
C++ 部署
請參考 sherpa-onnx 以獲得 CPU 上的 C++ 部署解決方案。
討論與交流
您可以直接在 Github Issues 上討論。
您也可以掃描二維碼加入我們的微信交流群或關注我們的微信公眾號。
| 微信交流群 | 微信公眾號 |
| ------------ | ----------------------- |
|
|
|
引用
@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 ---