ZipVoice⚡
Teks-ke-Ucapan Zero-Shot yang Cepat dan Berkualitas Tinggi dengan Flow Matching
Ikhtisar
ZipVoice adalah serangkaian model TTS zero-shot yang cepat dan berkualitas tinggi berbasis flow matching.
1. Fitur utama
- Kecil dan cepat: hanya 123M parameter.
- Kloning suara berkualitas tinggi: performa terbaik dalam kemiripan pembicara, kejelasan, dan kealamian.
- Multi-bahasa: mendukung Bahasa Mandarin dan Inggris.
- Multi-mode: mendukung generasi ucapan pembicara tunggal dan dialog.
2. Varian model
Berita
2025/07/14: ZipVoice-Dialog dan ZipVoice-Dialog-Stereo, dua model generasi dialog lisan, telah dirilis.
2025/07/14: Dataset OpenDialog, dataset dialog lisan berdurasi 6.8k-jam, telah dirilis. Unduh di ,
. Lihat detailnya di
.
2025/06/16: ZipVoice dan ZipVoice-Distill telah dirilis.
Instalasi
1. Clone repositori ZipVoice
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Opsional) Buat lingkungan virtual Python
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Instal paket yang diperlukan
pip install -r requirements.txt
4. Instal k2 untuk pelatihan atau inferensi efisien
k2 diperlukan untuk pelatihan dan dapat mempercepat inferensi. Namun demikian, Anda masih dapat menggunakan mode inferensi ZipVoice tanpa menginstal k2.
Catatan: Pastikan untuk menginstal versi k2 yang sesuai dengan versi PyTorch dan CUDA Anda. Sebagai contoh, jika Anda menggunakan pytorch 2.5.1 dan CUDA 12.1, Anda dapat menginstal k2 sebagai berikut:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Silakan merujuk ke https://k2-fsa.org/get-started/k2/ untuk detailnya.
Pengguna di Tiongkok daratan dapat merujuk ke https://k2-fsa.org/zh-CN/get-started/k2/.- Untuk memeriksa instalasi k2:
python3 -c "import k2; print(k2.__file__)"
Penggunaan
1. Pembuatan Ucapan Satu Pembicara
Untuk menghasilkan ucapan satu pembicara dengan model pra-latih ZipVoice atau ZipVoice-Distill kami, gunakan perintah berikut (Model yang diperlukan akan diunduh dari HuggingFace):
#### 1.1 Inferensi satu kalimat
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-namedapat berupazipvoiceatauzipvoice_distill, yang masing-masing adalah model sebelum dan sesudah distilasi.- Jika
<>atau[]muncul dalam teks, string yang diapit olehnya akan diperlakukan sebagai token khusus.<>menunjukkan pinyin Tiongkok dan[]menunjukkan tag khusus lainnya.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Setiap baris dari
test.tsvmemiliki format{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Generasi Ucapan Dialog
#### 2.1 Perintah Inferensi
Untuk menghasilkan dialog lisan dua pihak dengan model ZipVoice-Dialogue atau ZipVoice-Dialogue-Stereo pra-latih kami, gunakan perintah berikut (Model yang diperlukan akan diunduh dari HuggingFace):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-namedapat berupazipvoice_dialogatauzipvoice_dialog_stereo,
#### 2.2 Format Input
Setiap baris dari test.tsv menggunakan salah satu format berikut:
(1) Format prompt gabungan di mana audio dan transkripsi dari dua pembicara digabungkan menjadi satu file wav prompt:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_nameadalah nama file wav output.prompt_transcriptionadalah transkripsi dari prompt percakapan wav, misalnya, "[S1] Halo. [S2] Apa kabar?"prompt_wavadalah path menuju prompt wav.textadalah teks yang akan disintesis, misalnya "[S1] Saya baik-baik saja. [S2] Siapa nama Anda? [S1] Saya Eric. [S2] Hai Eric."
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}wav_nameadalah nama file wav keluaran.spk1_prompt_transcriptionadalah transkripsi dari file wav prompt pembicara pertama, misalnya, "Halo"spk2_prompt_transcriptionadalah transkripsi dari file wav prompt pembicara kedua, misalnya, "Apa kabar?"spk1_prompt_wavadalah path ke file wav prompt pembicara pertama.spk2_prompt_wavadalah path ke file wav prompt pembicara kedua.textadalah teks yang akan disintesis, misalnya, "[S1] Saya baik-baik saja. [S2] Siapa namamu? [S1] Saya Eric. [S2] Hai Eric."
3 Panduan penggunaan yang lebih baik:
#### 3.1 Panjang prompt
Kami merekomendasikan file wav prompt yang pendek (misalnya, kurang dari 3 detik untuk generasi suara satu pembicara, kurang dari 10 detik untuk generasi suara dialog) untuk kecepatan inferensi yang lebih cepat. Prompt yang sangat panjang akan memperlambat inferensi dan menurunkan kualitas suara.
#### 3.2 Optimasi kecepatan
Jika kecepatan inferensi tidak memuaskan, Anda dapat mempercepatnya sebagai berikut:
- Model distilasi dan langkah lebih sedikit: Untuk model generasi suara satu pembicara, kami menggunakan model
zipvoicesecara default untuk kualitas suara yang lebih baik. Jika kecepatan menjadi prioritas, Anda dapat beralih kezipvoice_distilldan dapat mengurangi--num-stepsserendah4(default 8). - CPU lebih cepat dengan multi-threading: Saat berjalan di CPU, Anda dapat menambahkan parameter
--num-thread(misalnya,--num-thread 4) untuk meningkatkan jumlah thread agar lebih cepat. Secara default kami menggunakan 1 thread. - CPU lebih cepat dengan ONNX: Saat berjalan di CPU, Anda dapat menggunakan model ONNX dengan
zipvoice.bin.infer_zipvoice_onnxuntuk kecepatan yang lebih tinggi (belum mendukung ONNX untuk model generasi dialog). Untuk kecepatan lebih tinggi lagi, Anda dapat mengatur--onnx-int8 Trueuntuk menggunakan model ONNX INT8-kuantisasi. Perlu diperhatikan bahwa model kuantisasi akan menyebabkan penurunan kualitas suara tertentu. Jangan gunakan ONNX di GPU, karena lebih lambat daripada PyTorch di GPU. - Akselerasi GPU dengan NVIDIA TensorRT: Untuk peningkatan performa signifikan di GPU NVIDIA, ekspor model ke engine TensorRT menggunakan zipvoice.bin.tensorrt_export terlebih dahulu. Kemudian, lakukan inferensi pada dataset Anda (misal, dataset Hugging Face) dengan zipvoice.bin.infer_zipvoice. Ini dapat mencapai throughput sekitar 2x dibandingkan implementasi PyTorch standar di GPU.
Teks yang diberikan akan dipotong menjadi beberapa bagian berdasarkan tanda baca (untuk generasi suara satu pembicara) atau simbol pergantian pembicara (untuk generasi suara dialog). Kemudian, teks yang sudah dipotong akan diproses secara batch. Oleh karena itu, model dapat memproses teks sepanjang apapun dengan penggunaan memori yang hampir konstan. Anda dapat mengontrol penggunaan memori dengan mengatur parameter --max-duration.
#### 3.4 Evaluasi "Raw"
Secara default, kami memproses input (prompt wav, transkripsi prompt, dan teks) untuk inferensi yang efisien dan kinerja lebih baik. Jika Anda ingin mengevaluasi performa "raw" model menggunakan input persis seperti yang diberikan (misalnya, untuk mereproduksi hasil di makalah kami), Anda dapat menambahkan --raw-evaluation True.
#### 3.5 Teks pendek
Saat menghasilkan suara untuk teks yang sangat pendek (misalnya, satu atau dua kata), suara yang dihasilkan kadang-kadang dapat melewatkan beberapa pelafalan. Untuk mengatasi masalah ini, Anda dapat menambahkan --speed 0.3 (di mana 0.3 adalah nilai yang dapat diubah) untuk memperpanjang durasi suara yang dihasilkan.
#### 3.6 Koreksi pelafalan karakter polifon Tiongkok yang salah
Kami menggunakan pypinyin untuk mengonversi karakter Tiongkok ke pinyin. Namun, terkadang dapat salah mengucapkan karakter polifonik (多音字).
Untuk memperbaiki pengucapan yang salah secara manual, lampirkan pinyin yang dikoreksi dalam tanda sudut < > dan sertakan tanda nada.
Contoh:
- Teks asli:
这把剑长三十公分 - Koreksi pinyin untuk
长:这把剑三十公分
<>, misalnya 这把十公分 #### 3.7 Hapus keheningan panjang dari suara yang dihasilkan
Model secara otomatis akan menentukan posisi dan durasi keheningan pada suara yang dihasilkan. Kadang-kadang terdapat keheningan panjang di tengah suara. Jika Anda tidak menginginkan ini, Anda dapat menambahkan --remove-long-sil untuk menghapus keheningan panjang di tengah suara yang dihasilkan (keheningan pada tepi akan dihapus secara default).
#### 3.8 Pengunduhan model
Jika Anda mengalami masalah saat menghubungkan ke HuggingFace ketika mengunduh model pra-latih, coba ubah endpoint ke situs mirror: export HF_ENDPOINT=https://hf-mirror.com.
Latih Model Anda Sendiri
Lihat direktori egs untuk contoh pelatihan, fine-tuning, dan evaluasi.
Deployment Produksi
NVIDIA Triton GPU Runtime
Untuk deployment siap produksi dengan performa tinggi dan skalabilitas, lihat integrasi Triton Inference Server yang menyediakan engine TensorRT yang telah dioptimalkan, penanganan permintaan secara bersamaan, dan API gRPC/HTTP untuk penggunaan enterprise.
Deployment CPU
Lihat sherpa-onnx untuk solusi deployment C++ pada CPU.
Diskusi & Komunikasi
Anda dapat berdiskusi langsung di Github Issues.
Anda juga dapat memindai kode QR untuk bergabung dengan grup wechat kami atau mengikuti akun resmi wechat kami.
| Grup Wechat | Akun Resmi Wechat |
| ------------ | ----------------------- |
|
|
|
Sitasi
@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-12-30 ---