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 tệp wav đầu ra.spk1_prompt_transcriptionlà bản ghi lời nói của tệp wav nhắc nhở của người nói thứ nhất, ví dụ: "Hello"spk2_prompt_transcriptionlà bản ghi lời nói của tệp wav nhắc nhở của người nói thứ hai, ví dụ: "How are you?"spk1_prompt_wavlà đường dẫn đến tệp wav nhắc nhở của người nói thứ nhất.spk2_prompt_wavlà đường dẫn đến tệp wav nhắc nhở của người nói thứ hai.textlà đoạn 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 prompt
Chúng tôi khuyến nghị sử dụng tệp wav nhắc nhở ngắn (ví dụ, dưới 3 giây cho tạo giọng nói một người, dưới 10 giây cho tạo hội thoại) để tăng tốc độ suy luận. Tệp nhắc nhở quá dài sẽ làm chậm quá trình suy luận và giảm chất lượng giọng nói.
#### 3.2 Tối ưu hóa tốc độ
Nếu tốc độ suy luận chưa đạt yêu cầu, bạn có thể tăng tốc như sau:
- Rút gọn mô hình và giảm số bước: Với mô hình tạo giọ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 giọ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 tối thiểu 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ố luồng, giúp tăng tốc độ. Mặc định chúng tôi sử dụng 1 luồng. - Tăng tốc CPU với ONNX: Khi chạy trên CPU, bạn có thể sử dụng các mô hình ONNX với
zipvoice.bin.infer_zipvoice_onnxđể tăng tốc (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để dùng mô hình ONNX đã lượng tử hóa INT8. Lưu ý mô hình lượng tử hóa sẽ làm giảm chất lượng giọng nói nhất định. Không sử dụng ONNX trên GPU, vì nó chậm hơn PyTorch trên GPU. - Tăng tốc GPU với NVIDIA TensorRT: Để tăng hiệu suất đáng kể trên GPU NVIDIA, đầu tiên hãy xuất mô hình sang định dạng TensorRT bằng zipvoice.bin.tensorrt_export. Sau đó, chạy suy luận trên bộ dữ liệu của bạn (ví dụ, bộ dữ liệu Hugging Face) với zipvoice.bin.infer_zipvoice. Cách này có thể đạt tốc độ xử lý gấp đôi so với PyTorch tiêu chuẩn trên GPU.
Văn bản đầu vào sẽ được chia thành các đoạn nhỏ dựa trên dấu câu (cho tạo giọng nói một người) hoặc ký hiệu đổi người nói (cho tạo hội thoại). Sau đó, các đoạn văn bản sẽ được xử lý theo lô. Do đó, mô hình có thể xử lý văn bản dài bất kỳ 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"
Mặc định, chúng tôi sẽ tiền xử lý các đầu vào (wav nhắc nhở, bản ghi nhắc nhở và văn bản) để tối ưu hóa suy luận và hiệu suất. Nếu bạn muốn đánh giá hiệu suất "gốc" của mô hình bằng đúng đầu vào 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 giọng nói cho các văn bản rất ngắn (ví dụ, một hoặc hai từ), giọng nói tạo ra đôi khi có thể bị thiếu một số âm tiết. Để 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 của giọng nói tạo ra.
#### 3.6 Sửa lỗi phát âm sai các 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 chữ đa âm (多音字).
Để sửa các phát âm sai này một cách thủ công, hãy đặt pinyin đã chỉnh sửa trong dấu ngoặc nhọn < > và thêm dấu thanh.
Ví dụ:
- Văn bản gốc:
这把剑长三十公分 - Sửa pinyin cho
长:这把剑三十公分
<>, ví dụ: 这把十公分 #### 3.7 Loại bỏ khoảng lặng dài khỏi giọng nói đã tạo
Mô hình sẽ tự động xác định vị trí và độ dài của các khoảng lặng trong giọng nói đã tạo. Đôi khi có khoảng lặng dài ở giữa bài nói. Nếu bạn không muốn điều này, bạn có thể truyền --remove-long-sil để loại bỏ các khoảng lặng dài ở giữa giọng nói đã tạo (các khoảng lặng ở đầu/cuối sẽ được loại bỏ mặc định).
#### 3.8 Tải mô hình
Nếu bạn gặp sự cố khi kết nối với HuggingFace để tải các mô hình đã huấn luyện trước, 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 bạn
Xem thư mục egs để biết ví dụ về huấn luyện, fine-tuning và đánh giá.
Triển khai sản xuất
NVIDIA Triton GPU Runtime
Để triển khai sản xuất sẵn sàng với hiệu năng và khả năng mở rộng cao, hãy tham khảo Triton Inference Server integration cung cấp các engine TensorRT tối ưu, xử lý yêu cầu đồng thời và các API gRPC/HTTP cho doanh nghiệp.
Triển khai CPU
Xem sherpa-onnx để biết giải pháp triển khai 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 của chúng tôi hoặc theo dõi tài khoản wechat chính thức.
| Nhóm Wechat | Tài khoản Wechat chính thức |
| ------------ | ----------------------- |
|
|
|
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-12-30 ---