ZipVoice⚡
تحويل النص إلى كلام سريع وعالي الجودة بدون تدريب مسبق باستخدام مطابقة التدفق
نظرة عامة
ZipVoice هي سلسلة من نماذج تحويل النص إلى كلام (TTS) السريعة وعالية الجودة بدون تدريب مسبق، تعتمد على تقنية مطابقة التدفق.
1. الميزات الرئيسية
- صغيرة وسريعة: تحتوي فقط على 123 مليون معامل.
- استنساخ صوت عالي الجودة: أداء متقدم في تشابه المتحدث، والوضوح، والطبيعية.
- متعددة اللغات: تدعم الصينية والإنجليزية.
- متعددة الأنماط: تدعم توليد الكلام لمتحدث واحد أو الحوار.
2. أنواع النماذج
الأخبار
2025/07/14: تم إصدار ZipVoice-Dialog و ZipVoice-Dialog-Stereo، وهما نموذجان لتوليد الحوارات المنطوقة.
2025/07/14: تم إصدار قاعدة بيانات OpenDialog، وهي قاعدة بيانات للحوارات المنطوقة مدتها 6.8 ألف ساعة. يمكن التحميل من ،
. تفاصيل إضافية على
.
2025/06/16: تم إصدار ZipVoice و ZipVoice-Distill.
التثبيت
1. استنساخ مستودع ZipVoice
git clone https://github.com/k2-fsa/ZipVoice.git
2. (اختياري) إنشاء بيئة افتراضية في بايثون
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,
#### 2.2 تنسيقات الإدخال
كل سطر في ملف test.tsv يكون بأحد التنسيقات التالية:
(1) تنسيق الموجه المدمج حيث يتم دمج ملفات الصوت والنصوص الخاصة بمتحدثين اثنين في ملف موجه واحد:
{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هو نص التفريغ الصوتي لمقطع المتحدث الأول، مثلاً، "مرحبًا"spk2_prompt_transcriptionهو نص التفريغ الصوتي لمقطع المتحدث الثاني، مثلاً، "كيف حالك؟"spk1_prompt_wavهو مسار ملف wav لمقطع المتحدث الأول.spk2_prompt_wavهو مسار ملف wav لمقطع المتحدث الثاني.textهو النص المطلوب توليفه، مثلاً: "[S1] أنا بخير. [S2] ما اسمك؟ [S1] أنا إيريك. [S2] مرحبًا إيريك."
3 إرشادات للاستخدام الأفضل:
#### 3.1 طول المقطع الصوتي
ننصح باستخدام ملف مقطع صوتي قصير (مثلاً، أقل من 3 ثوانٍ لتوليد الكلام لمتحدث واحد، وأقل من 10 ثوانٍ لتوليد الحوار) للحصول على سرعة استنتاج أعلى. المقطع الطويل جدًا سيبطئ عملية الاستنتاج ويؤثر سلبًا على جودة الصوت.
#### 3.2 تحسين السرعة
إذا كانت سرعة الاستنتاج غير مرضية، يمكنك تسريعها كما يلي:
- اختيار نموذج مبسط وعدد خطوات أقل: بالنسبة لنموذج توليد الكلام لمتحدث واحد، نستخدم افتراضيًا نموذج
zipvoiceلجودة صوت أفضل. إذا كانت السرعة أولوية، يمكنك التبديل إلىzipvoice_distillوتقليل قيمة--num-stepsحتى4(القيمة الافتراضية 8). - تسريع وحدة المعالجة المركزية بالخيوط المتعددة: عند التشغيل على وحدة المعالجة المركزية، يمكنك تمرير معامل
--num-thread(مثلاً،--num-thread 4) لزيادة عدد الخيوط وتسريع التنفيذ. نستخدم خيطًا واحدًا افتراضيًا. - تسريع وحدة المعالجة المركزية باستخدام ONNX: عند التشغيل على وحدة المعالجة المركزية، يمكنك استخدام نماذج ONNX مع
zipvoice.bin.infer_zipvoice_onnxلسرعة أعلى (لم يتم دعم ONNX بعد لنماذج توليد الحوار). لسرعة أكبر، يمكنك أيضًا ضبط--onnx-int8 Trueلاستخدام نموذج ONNX من نوع INT8. لاحظ أن النموذج المضغوط سيؤثر على جودة الصوت بدرجة معينة. لا تستخدم ONNX على وحدة معالجة الرسومات (GPU) لأنه أبطأ من PyTorch على GPU. - تسريع وحدة معالجة الرسومات باستخدام NVIDIA TensorRT: لتحقيق أداء أعلى على وحدات NVIDIA GPU، قم أولاً بتصدير النموذج إلى محرك TensorRT باستخدام zipvoice.bin.tensorrt_export. ثم نفذ الاستنتاج على مجموعة البيانات الخاصة بك (مثلاً، مجموعة بيانات من Hugging Face) باستخدام zipvoice.bin.infer_zipvoice. يمكن أن تحقق هذه العملية تقريبًا ضعف الإنتاجية مقارنة بالتنفيذ القياسي عبر PyTorch على وحدة معالجة الرسومات.
سيتم تقسيم النص المقدم إلى أجزاء حسب علامات الترقيم (لتوليد الكلام لمتحدث واحد) أو رمز تبديل المتحدث (لتوليد الحوار). بعد ذلك ستتم معالجة النصوص المجزأة على دفعات. وبالتالي، يمكن للنموذج معالجة نصوص طويلة جدًا مع استخدام شبه ثابت للذاكرة. يمكنك التحكم في استهلاك الذاكرة عن طريق ضبط معامل --max-duration.
#### 3.4 التقييم "الخام"
افتراضيًا، نقوم بمعالجة المدخلات (ملف المقطع الصوتي، النص التفريغي، والنص) مسبقًا لاستنتاج فعال وأداء أفضل. إذا أردت تقييم أداء النموذج "الخام" باستخدام المدخلات المقدمة بالضبط (مثلاً، لإعادة إنتاج النتائج في ورقتنا)، يمكنك تمرير --raw-evaluation True.
#### 3.5 النصوص القصيرة
عند توليد الكلام لنصوص قصيرة جدًا (مثل كلمة أو كلمتين)، قد يتم أحيانًا حذف بعض النطق في الكلام الناتج. لحل هذه المشكلة، يمكنك تمرير --speed 0.3 (حيث 0.3 قيمة قابلة للتعديل) لإطالة مدة الكلام الناتج.
#### 3.6 تصحيح نطق الأحرف الصينية متعددة الأصوات
نستخدم pypinyin لتحويل الحروف الصينية إلى بينيين. ومع ذلك، قد يخطئ أحيانًا في نطق الأحرف متعددة النطق (多音字).
لتصحيح هذه الأخطاء يدويًا، ضع البينيين المصحح بين علامتي زاوية < > وتضمين علامة النغمة.
مثال:
- النص الأصلي:
这把剑长三十公分 - تصحيح بينيين
长:这把剑三十公分
< >، مثل: 这把十公分 #### 3.7 إزالة الصمت الطويل من الكلام الناتج
سيقوم النموذج تلقائيًا بتحديد أماكن وطول الصمت في الكلام الناتج. أحيانًا يوجد صمت طويل في منتصف الكلام. إذا لم ترغب في ذلك، يمكنك تمرير الخيار --remove-long-sil لإزالة الصمت الطويل من منتصف الكلام الناتج (سيتم إزالة الصمت عند الأطراف تلقائيًا).
#### 3.8 تنزيل النموذج
إذا واجهت مشاكل في الاتصال بموقع HuggingFace أثناء تنزيل النماذج المدربة مسبقًا، حاول تغيير نقطة النهاية إلى موقع المرآة: export HF_ENDPOINT=https://hf-mirror.com.
تدريب نموذجك الخاص
راجع دليل egs للحصول على أمثلة حول التدريب، التخصيص والتقييم.
النشر في بيئة الإنتاج
وقت التشغيل على وحدة معالجة الرسوميات NVIDIA Triton
للنشر الجاهز للإنتاج مع أداء عالي وقابلية للتوسع، راجع اندماج خادم الاستدلال Triton الذي يوفر محركات TensorRT محسنة، معالجة طلبات متزامنة، ودعم واجهات gRPC/HTTP للاستخدام المؤسسي.
النشر على وحدة المعالجة المركزية
راجع sherpa-onnx لحل النشر بلغة C++ على وحدة المعالجة المركزية.
النقاش والتواصل
يمكنك النقاش مباشرة على مشاكل Github.
يمكنك أيضًا مسح رمز الاستجابة السريعة للانضمام إلى مجموعة 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 ---