ZipVoice⚡
Chuyển văn bản thành giọng nói nhanh và chất lượng cao với Flow Matching
Tổng quan
ZipVoice là một loạt các mô hình TTS zero-shot nhanh và chất lượng cao dựa trên flow matching.
1. Đặc điểm chính
- Nhỏ gọn và nhanh: chỉ 123 triệu tham số.
- Nhân bản giọng nói chất lượng cao: hiệu suất hàng đầu về độ tương đồng, độ rõ ràng và tự nhiên của giọng nói.
- Đa ngôn ngữ: hỗ trợ tiếng Trung và tiếng Anh.
- Đa chế độ: hỗ trợ cả tạo giọng nói một người và đối thoại.
2. Các biến thể mô hình
Tin tức
2025/07/14: ZipVoice-Dialog và ZipVoice-Dialog-Stereo, hai mô hình tạo hội thoại nói, đã được phát hành.
2025/07/14: Bộ dữ liệu OpenDialog, bộ dữ liệu hội thoại nói với thời lượng 6.8k giờ, đã được phát hành. Tải về tại ,
. Xem chi tiết tại
.
2025/06/16: ZipVoice và ZipVoice-Distill đã được phát hành.
Cài đặt
1. Nhân bản kho lưu trữ ZipVoice
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Tùy chọn) Tạo một môi trường ảo Python
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Cài đặt các gói cần thiết
pip install -r requirements.txt
4. Cài đặt k2 để huấn luyện hoặc suy luận hiệu quả
k2 là cần thiết cho việc huấn luyện và có thể tăng tốc quá trình suy luận. Tuy nhiên, bạn vẫn có thể sử dụng chế độ suy luận của ZipVoice mà không cần cài đặt k2.
Lưu ý: Đảm bảo cài đặt phiên bản k2 phù hợp với phiên bản PyTorch và CUDA của bạn. Ví dụ, nếu bạn đang sử dụng pytorch 2.5.1 và CUDA 12.1, bạn có thể cài đặt k2 như sau:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Vui lòng tham khảo https://k2-fsa.org/get-started/k2/ để biết chi tiết.
Người dùng tại Trung Quốc đại lục có thể tham khảo https://k2-fsa.org/zh-CN/get-started/k2/.- Để kiểm tra cài đặt k2:
python3 -c "import k2; print(k2.__file__)"
Sử dụng
1. Tạo giọng nói một người nói
Để tạo giọng nói một người nói với các mô hình ZipVoice hoặc ZipVoice-Distill đã được huấn luyện trước của chúng tôi, hãy sử dụng các lệnh sau (Các mô hình cần thiết sẽ được tải xuống từ HuggingFace):
#### 1.1 Suy luận một câu đơn lẻ
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-namecó thể làzipvoicehoặczipvoice_distill, lần lượt là các mô hình trước và sau khi chưng cất.- Nếu
<>hoặc[]xuất hiện trong văn bản, các chuỗi được bao quanh bởi chúng sẽ được xử lý như các token đặc biệt.<>biểu thị cho pinyin tiếng Trung và[]biểu thị cho các thẻ đặc biệt khác.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Mỗi dòng của
test.tsvcó định dạng{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Tạo sinh lời thoại
#### 2.1 Lệnh suy luận
Để tạo sinh các cuộc hội thoại hai người nói với các mô hình ZipVoice-Dialogue hoặc ZipVoice-Dialogue-Stereo đã được huấn luyện trước của chúng tôi, hãy sử dụng các lệnh sau (Các mô hình cần thiết sẽ được tải xuống từ HuggingFace):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-namecó thể làzipvoice_dialoghoặczipvoice_dialog_stereo,
#### 2.2 Định dạng đầu vào
Mỗi dòng của test.tsv sẽ thuộc một trong các định dạng sau:
(1) Định dạng prompt gộp trong đó âm thanh và bản ghi lời thoại của hai người nói được gộp vào một tệp wav prompt:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_namelà tên của file wav đầu ra.prompt_transcriptionlà bản phiên âm của file wav hội thoại gợi ý, ví dụ, "[S1] Xin chào. [S2] Bạn khỏe không?"prompt_wavlà đường dẫn đến file wav gợi ý.textlà văn bản cần tổng hợp, ví dụ: "[S1] Tôi khỏe. [S2] Bạn tên gì? [S1] Tôi là Eric. [S2] Chào Eric."
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}
wav_namelà tên của file wav đầu ra.spk1_prompt_transcriptionlà bản ghi âm lời nhắc của người nói thứ nhất, ví dụ: "Hello"spk2_prompt_transcriptionlà bản ghi âm lời nhắc của người nói thứ hai, ví dụ: "How are you?"spk1_prompt_wavlà đường dẫn tới file wav lời nhắc của người nói thứ nhất.spk2_prompt_wavlà đường dẫn tới file wav lời nhắc của người nói thứ hai.textlà văn bản cần tổng hợp, ví dụ: "[S1] I'm fine. [S2] What's your name? [S1] I'm Eric. [S2] Hi Eric."
3 Hướng dẫn sử dụng tốt hơn:
#### 3.1 Độ dài lời nhắc
Chúng tôi khuyến nghị sử dụng file wav lời nhắc ngắn (ví dụ, dưới 3 giây cho tạo tiếng nói một người, dưới 10 giây cho tạo tiếng nói hội thoại) để tăng tốc độ suy luận. Lời nhắc quá dài sẽ làm chậm quá trình suy luận và giảm chất lượng tiếng nói.
#### 3.2 Tối ưu hóa tốc độ
Nếu tốc độ suy luận không đạt yêu cầu, bạn có thể tăng tốc như sau:
- Mô hình distill và giảm bước: Đối với mô hình tạo tiếng nói một người, chúng tôi sử dụng mô hình
zipvoicemặc định để có chất lượng tiếng nói tốt hơn. Nếu ưu tiên tốc độ, bạn có thể chuyển sangzipvoice_distillvà giảm--num-stepsxuống thấp nhất là4(mặc định là 8). - Tăng tốc CPU với đa luồng: Khi chạy trên CPU, bạn có thể truyền tham số
--num-thread(ví dụ,--num-thread 4) để tăng số lượng luồng nhằm tăng tốc độ. Mặc định là 1 luồng. - Tăng tốc CPU với ONNX: Khi chạy trên CPU, bạn có thể sử dụng mô hình ONNX với
zipvoice.bin.infer_zipvoice_onnxđể tăng tốc (hiện chưa hỗ trợ ONNX cho mô hình tạo hội thoại). Để tăng tốc hơn nữa, bạn có thể đặt--onnx-int8 Trueđể sử dụng mô hình ONNX được lượng tử hóa INT8. Lưu ý rằng mô hình lượng tử hóa sẽ làm giảm chất lượng tiếng nói ở một mức độ nhất định. Không sử dụng ONNX trên GPU, vì nó chậm hơn PyTorch trên GPU.
Văn bản đầu vào sẽ được chia thành từng đoạn dựa trên dấu câu (cho tạo tiếng nói một người) hoặc ký hiệu chuyển người nói (cho tạo tiếng nói hội thoại). Sau đó, các đoạn văn bản này sẽ được xử lý theo lô. Do đó, mô hình có thể xử lý văn bản dài tùy ý với mức sử dụng bộ nhớ gần như không đổi. Bạn có thể kiểm soát bộ nhớ bằng cách điều chỉnh tham số --max-duration.
#### 3.4 Đánh giá "raw"
Theo mặc định, chúng tôi tiền xử lý các đầu vào (file wav lời nhắc, bản ghi lời nhắc, và văn bản) để tối ưu hóa suy luận và nâng cao hiệu năng. Nếu bạn muốn đánh giá hiệu năng "raw" của mô hình với các đầu vào chính xác được cung cấp (ví dụ, để tái tạo kết quả trong bài báo của chúng tôi), bạn có thể truyền --raw-evaluation True.
#### 3.5 Văn bản ngắn
Khi tạo tiếng nói cho các văn bản rất ngắn (ví dụ, một hoặc hai từ), tiếng nói tạo ra đôi khi có thể bỏ sót một số phát âm. Để khắc phục vấn đề này, bạn có thể truyền --speed 0.3 (trong đó 0.3 là giá trị có thể điều chỉnh) để kéo dài thời lượng tiếng nói tạo ra.
#### 3.6 Sửa lỗi phát âm ký tự đa âm tiếng Trung
Chúng tôi sử dụng pypinyin để chuyển đổi ký tự tiếng Trung sang pinyin. Tuy nhiên, đôi khi nó có thể phát âm sai ký tự đa âm (多音字).
Để chỉnh sửa thủ công các lỗi phát âm này, hãy đặt pinyin đã chỉnh sửa trong dấu ngoặc nhọn < > và bao gồm dấu thanh.
Ví dụ:
- Văn bản gốc:
这把剑长三十公分 - Sửa lại pinyin của
长:这把剑三十公分
<>, ví dụ: 这把十公分 #### 3.7 Loại bỏ khoảng lặng dài trong tiếng nói được tạo ra
Mô hình sẽ tự động xác định vị trí và độ dài của khoảng lặng trong tiếng nói được tạo ra. Đôi khi có khoảng lặng dài ở giữa đoạn nói. Nếu bạn không muốn điều này, bạn có thể thêm tùy chọn --remove-long-sil để loại bỏ khoảng lặng dài ở giữa đoạn nói (khoảng lặng ở hai đầu sẽ được loại bỏ mặc định).
#### 3.8 Tải mô hình
Nếu bạn gặp khó khăn khi kết nối tới HuggingFace để tải các mô hình đã huấn luyện sẵn, hãy thử chuyển endpoint sang trang mirror: export HF_ENDPOINT=https://hf-mirror.com.
Huấn luyện mô hình của riêng bạn
Xem thư mục egs để biết ví dụ về huấn luyện, tinh chỉnh và đánh giá.
Triển khai bằng C++
Xem sherpa-onnx để biết giải pháp triển khai bằng C++ trên CPU.
Thảo luận & Trao đổi
Bạn có thể thảo luận trực tiếp trên Github Issues.
Bạn cũng có thể quét mã QR để tham gia nhóm wechat hoặc theo dõi tài khoản chính thức của chúng tôi trên wechat.
| Nhóm Wechat | Tài khoản chính thức Wechat |
| ------------ | -------------------------- |
|
|
|
Trích dẫn
@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 ---