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هو نص الموجه لملف wav الخاص بالمتحدث الأول، مثل "مرحباً"spk2_prompt_transcriptionهو نص الموجه لملف wav الخاص بالمتحدث الثاني، مثل "كيف حالك؟"spk1_prompt_wavهو مسار ملف wav الخاص بالموجه للمتحدث الأول.spk2_prompt_wavهو مسار ملف wav الخاص بالموجه للمتحدث الثاني.textهو النص المراد توليده، مثل "[S1] أنا بخير. [S2] ما اسمك؟ [S1] اسمي إريك. [S2] مرحباً إريك."
3 إرشادات للاستخدام الأفضل:
#### 3.1 طول الموجه
نوصي باستخدام ملف wav موجه قصير (على سبيل المثال، أقل من 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 على وحدة معالجة الرسومات، لأنه أبطأ من PyTorch على وحدة معالجة الرسومات.
سيتم تقسيم النص المقدم إلى أجزاء بناءً على علامات الترقيم (لتوليد الكلام للمتحدث الواحد) أو رمز تبديل المتحدث (لتوليد كلام الحوار). بعد ذلك، تتم معالجة النصوص المجزأة على دفعات. وبالتالي، يمكن للنموذج معالجة نص طويل جداً باستخدام ذاكرة شبه ثابتة. يمكنك التحكم في استخدام الذاكرة عن طريق ضبط معامل --max-duration.
#### 3.4 التقييم "الخام"
بشكل افتراضي، نقوم بمعالجة المدخلات مسبقاً (ملف wav للموجه، نص الموجه، والنص) لتحقيق استنتاج فعال وأداء أفضل. إذا رغبت في تقييم أداء النموذج "الخام" باستخدام المدخلات المقدمة بالضبط (مثل لإعادة إنتاج نتائج بحثنا)، يمكنك تمرير --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 لأمثلة التدريب، وضبط النموذج، والتقييم.
النشر باستخدام C++
راجع sherpa-onnx لحل النشر باستخدام لغة C++ على وحدة المعالجة المركزية.
المناقشة والتواصل
يمكنك المناقشة مباشرة عبر Github Issues.
يمكنك أيضًا مسح رمز الاستجابة السريعة للانضمام إلى مجموعة 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-10-06 ---