ZipVoice⚡
ระบบแปลงข้อความเป็นเสียงคุณภาพสูงและรวดเร็วแบบ Zero-Shot ด้วย Flow Matching
ภาพรวม
ZipVoice เป็นชุดโมเดล TTS แบบ zero-shot ที่รวดเร็วและคุณภาพสูงโดยใช้ flow matching
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 จำเป็นสำหรับการฝึก และสามารถเพิ่มความเร็วในการอนุมานได้ อย่างไรก็ตาม คุณยังสามารถใช้โหมดอนุมานของ ZipVoice ได้โดยไม่ต้องติดตั้ง k2
หมายเหตุ: โปรดตรวจสอบให้แน่ใจว่าคุณติดตั้ง k2 เวอร์ชันที่ตรงกับเวอร์ชันของ PyTorch และ CUDA ของคุณ ตัวอย่างเช่น หากคุณใช้ 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ซึ่งจะสร้างบทสนทนาแบบโมโนและสเตอริโอตามลำดับ
แต่ละบรรทัดของ 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] ฉันชื่อเอริค [S2] สวัสดีเอริค"
{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 ความยาวของ prompt
แนะนำให้ใช้ไฟล์ prompt wav ที่สั้น (เช่น น้อยกว่า 3 วินาทีสำหรับการสร้างเสียงพูดแบบผู้พูดเดียว น้อยกว่า 10 วินาทีสำหรับการสร้างเสียงพูดแบบสนทนา) เพื่อความเร็วในการประมวลผลที่สูงขึ้น ถ้า prompt ยาวเกินไปจะทำให้ประมวลผลช้าลงและคุณภาพเสียงลดลง
#### 3.2 การเพิ่มประสิทธิภาพความเร็ว
หากความเร็วในการประมวลผลไม่เป็นที่น่าพอใจ สามารถเร่งความเร็วได้ดังนี้:
- Distill model และลดจำนวนขั้นตอน: สำหรับโมเดลสร้างเสียงพูดแบบผู้พูดเดียว เราจะใช้โมเดล
zipvoiceเป็นค่าเริ่มต้นเพื่อคุณภาพเสียงที่ดีกว่า หากต้องการความเร็วสูงกว่า สามารถเปลี่ยนเป็นzipvoice_distillและลด--num-stepsลงเหลือเพียง4(ค่าเริ่มต้นคือ 8) - เร่งความเร็วบน CPU ด้วย multi-threading: เมื่อรันบน CPU สามารถเพิ่มจำนวนเธรดด้วยพารามิเตอร์
--num-thread(เช่น--num-thread 4) เพื่อเพิ่มความเร็ว ค่าเริ่มต้นใช้ 1 เธรด - เร่งความเร็วบน CPU ด้วย ONNX: เมื่อรันบน CPU สามารถใช้โมเดล ONNX กับ
zipvoice.bin.infer_zipvoice_onnxเพื่อความเร็วที่สูงขึ้น (ยังไม่รองรับ ONNX สำหรับโมเดลสร้างเสียงแบบสนทนา) หากต้องการความเร็วสูงขึ้นอีก สามารถตั้งค่า--onnx-int8 Trueเพื่อใช้โมเดล ONNX แบบ INT8-quantized แต่คุณภาพเสียงจะลดลงบางส่วน อย่าใช้ ONNX บน GPU เพราะจะช้ากว่า PyTorch บน GPU - เร่งความเร็วด้วย NVIDIA TensorRT บน GPU: เพื่อเพิ่มประสิทธิภาพบน NVIDIA GPU อย่างมาก ให้ export โมเดลเป็น TensorRT engine โดยใช้ zipvoice.bin.tensorrt_export จากนั้นรันประมวลผลกับชุดข้อมูล (เช่น Hugging Face dataset) ด้วย zipvoice.bin.infer_zipvoice วิธีนี้จะได้ throughput ประมาณ 2 เท่าของการใช้ PyTorch ปกติบน GPU
ข้อความที่ให้มาจะถูกแบ่งเป็นส่วน ๆ ตามเครื่องหมายวรรคตอน (สำหรับสร้างเสียงพูดแบบผู้พูดเดียว) หรือสัญลักษณ์เปลี่ยนผู้พูด (สำหรับสร้างเสียงพูดแบบสนทนา) หลังจากนั้นจะประมวลผลเป็น batch ดังนั้นโมเดลสามารถประมวลผลข้อความที่ยาวได้โดยใช้หน่วยความจำคงที่ สามารถควบคุมการใช้หน่วยความจำด้วยการปรับค่าพารามิเตอร์ --max-duration
#### 3.4 การประเมิน "Raw"
โดยค่าเริ่มต้น ระบบจะ preprocess อินพุต (prompt wav, prompt transcription และ text) เพื่อการประมวลผลที่มีประสิทธิภาพและประสิทธิผลที่ดีขึ้น หากต้องการประเมินผลแบบ "raw" โดยใช้ข้อมูลที่ป้อนเข้ามาโดยตรง (เช่น เพื่อทำซ้ำผลลัพธ์ในงานวิจัย) สามารถตั้งค่า --raw-evaluation True
#### 3.5 ข้อความสั้น
เมื่อสร้างเสียงสำหรับข้อความที่สั้นมาก (เช่น หนึ่งหรือสองคำ) อาจเกิดปัญหาเสียงที่สร้างขึ้นขาดบางเสียงออกไป สามารถแก้ไขได้โดยตั้งค่า --speed 0.3 (0.3 เป็นค่าที่ปรับได้) เพื่อขยายระยะเวลาของเสียงที่สร้างขึ้น
#### 3.6 การแก้ไขการออกเสียงผิดของตัวอักษรจีนพ้องเสียง
เราใช้ pypinyin เพื่อแปลงอักษรจีนเป็นพินอิน อย่างไรก็ตาม บางครั้งอาจออกเสียง อักษรหลายเสียง (多音字) ผิดได้
หากต้องการแก้ไขการออกเสียงที่ผิดเอง ให้ใส่ พินอินที่ถูกต้อง ไว้ในเครื่องหมายมุมเหลี่ยม < > และรวม สัญลักษณ์วรรณยุกต์ ด้วย
ตัวอย่าง:
- ข้อความต้นฉบับ:
这把剑长三十公分 - แก้ไขพินอินของ
长:这把剑三十公分
<> เช่น 这把十公分 #### 3.7 ลบช่วงเงียบยาวออกจากเสียงที่สร้าง
โมเดลจะกำหนดตำแหน่งและความยาวของช่วงเงียบในเสียงที่สร้างโดยอัตโนมัติ บางครั้งอาจมีช่วงเงียบยาวตรงกลางเสียง หากไม่ต้องการ ให้ใช้ --remove-long-sil เพื่อลบช่วงเงียบยาวตรงกลางเสียงที่สร้าง (ช่วงเงียบที่ขอบจะถูกลบโดยค่าเริ่มต้น)
#### 3.8 การดาวน์โหลดโมเดล
หากมีปัญหาในการเชื่อมต่อกับ HuggingFace ขณะดาวน์โหลดโมเดลที่ฝึกมาแล้ว ให้ลองเปลี่ยน endpoint เป็นเว็บไซต์มิเรอร์: export HF_ENDPOINT=https://hf-mirror.com
ฝึกโมเดลของคุณเอง
ดูที่ไดเรกทอรี egs สำหรับตัวอย่างการฝึก, ปรับแต่ง และประเมินผล
การปรับใช้ในงานจริง
NVIDIA Triton GPU Runtime
สำหรับการปรับใช้ในงานจริงที่มีประสิทธิภาพสูงและรองรับการขยายระบบ ดู Triton Inference Server integration ซึ่งมี TensorRT engine ที่ปรับแต่งแล้ว รองรับการจัดการคำขอพร้อมกัน และมีทั้ง gRPC/HTTP API สำหรับองค์กร
การปรับใช้บน CPU
ดู sherpa-onnx สำหรับโซลูชันการปรับใช้ C++ บน CPU
การพูดคุย & การสื่อสาร
คุณสามารถพูดคุยโดยตรงที่ Github Issues
คุณยังสามารถสแกน QR code เพื่อเข้าร่วมกลุ่ม wechat ของเรา หรือกดติดตามบัญชีทางการ wechat ของเราได้
| กลุ่ม Wechat | บัญชีทางการ Wechat |
| ------------ | ----------------------- |
|
|
|
การอ้างอิง
@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 ---