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, "Hello"spk2_prompt_transcriptionadalah transkripsi dari file wav prompt pembicara kedua, misalnya, "How are you?"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] I'm fine. [S2] What's your name? [S1] I'm Eric. [S2] Hi Eric."
3 Panduan untuk penggunaan lebih baik:
#### 3.1 Panjang prompt
Kami merekomendasikan file wav prompt yang pendek (misalnya, kurang dari 3 detik untuk generasi ucapan satu pembicara, kurang dari 10 detik untuk generasi ucapan dialog) untuk mempercepat kecepatan inferensi. Prompt yang terlalu panjang akan memperlambat inferensi dan menurunkan kualitas ucapan.
#### 3.2 Optimasi kecepatan
Jika kecepatan inferensi kurang memuaskan, Anda dapat mempercepatnya dengan cara berikut:
- Model distilasi dan langkah lebih sedikit: Untuk model generasi ucapan satu pembicara, kami menggunakan model
zipvoicesecara default untuk kualitas suara yang lebih baik. Jika kecepatan lebih diutamakan, Anda dapat beralih kezipvoice_distilldan mengurangi--num-stepshingga serendah4(default 8). - Percepatan CPU dengan multi-threading: Saat berjalan di CPU, Anda dapat menggunakan parameter
--num-thread(misal,--num-thread 4) untuk menambah jumlah thread agar lebih cepat. Default-nya adalah 1 thread. - Percepatan CPU dengan ONNX: Saat berjalan di CPU, Anda dapat menggunakan model ONNX dengan
zipvoice.bin.infer_zipvoice_onnxuntuk kecepatan lebih tinggi (belum mendukung ONNX untuk model generasi dialog). Untuk kecepatan lebih tinggi lagi, Anda dapat mengatur--onnx-int8 Trueuntuk menggunakan model ONNX yang di-kuantisasi INT8. Perlu diperhatikan, model kuantisasi akan menurunkan kualitas suara hingga tingkat tertentu. Jangan gunakan ONNX di GPU, karena lebih lambat daripada PyTorch di GPU.
Teks yang diberikan akan dibagi menjadi beberapa bagian berdasarkan tanda baca (untuk generasi ucapan satu pembicara) atau simbol pergantian pembicara (untuk generasi ucapan dialog). Kemudian, bagian-bagian teks tersebut akan diproses secara batch. Dengan demikian, model dapat memproses teks sepanjang apapun dengan penggunaan memori yang hampir tetap. Anda dapat mengontrol penggunaan memori dengan mengatur parameter --max-duration.
#### 3.4 Evaluasi "Raw"
Secara default, kami melakukan pra-pemrosesan pada input (prompt wav, transkripsi prompt, dan teks) untuk inferensi yang efisien dan performa yang lebih baik. Jika Anda ingin mengevaluasi performa "raw" model menggunakan input yang diberikan secara persis (misalnya, untuk mereproduksi hasil pada paper kami), Anda dapat menggunakan --raw-evaluation True.
#### 3.5 Teks pendek
Saat menghasilkan ucapan untuk teks yang sangat pendek (misal, satu atau dua kata), ucapan yang dihasilkan kadang-kadang dapat menghilangkan beberapa pelafalan. Untuk mengatasi masalah ini, Anda dapat menggunakan --speed 0.3 (di mana 0.3 adalah nilai yang dapat diatur) untuk memperpanjang durasi ucapan yang dihasilkan.
#### 3.6 Koreksi pelafalan karakter polifonik bahasa Mandarin yang salah
Kami menggunakan pypinyin untuk mengonversi karakter Mandarin ke pinyin. Namun, terkadang dapat salah melafalkan karakter polifonik (多音字).
Untuk memperbaiki pengucapan yang salah secara manual, sertakan pinyin yang sudah dikoreksi di dalam tanda kurung sudut < > dan tambahkan tanda nada.
Contoh:
- Teks asli:
这把剑长三十公分 - Koreksi pinyin dari
长:这把剑三十公分
<>, misal: 这把十公分 #### 3.7 Hapus jeda panjang dari suara yang dihasilkan
Model akan secara otomatis menentukan posisi dan durasi jeda dalam suara yang dihasilkan. Kadang-kadang terdapat jeda panjang di tengah suara. Jika Anda tidak menginginkannya, Anda dapat menggunakan --remove-long-sil untuk menghapus jeda panjang di tengah suara yang dihasilkan (jeda di tepi akan dihapus secara default).
#### 3.8 Pengunduhan model
Jika Anda mengalami kesulitan terhubung ke HuggingFace saat mengunduh model pra-latih, coba ganti 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 C++
Lihat sherpa-onnx untuk solusi deployment C++ di 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 |
| ------------ | ----------------------- |
|
|
|
Kutipan
@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 ---