ZipVoice⚡
تبدیل متن به گفتار سریع و باکیفیت بدون نمونهگیری با تطبیق جریان
مرور کلی
ZipVoice مجموعهای از مدلهای TTS سریع و با کیفیت بالا به صورت zero-shot است که بر پایه flow matching توسعه یافتهاند.
۱. ویژگیهای کلیدی
- کوچک و سریع: تنها ۱۲۳ میلیون پارامتر دارد.
- کلونینگ صدای با کیفیت بالا: عملکرد پیشرفته در شباهت گوینده، وضوح و طبیعی بودن.
- چندزبانه: پشتیبانی از زبانهای چینی و انگلیسی.
- چندحالته: پشتیبانی از تولید گفتار تکگوینده و دیالوگ.
۲. انواع مدل
اخبار
۱۴۰۴/۰۴/۲۳: ZipVoice-Dialog و ZipVoice-Dialog-Stereo، دو مدل تولید گفتگوی گفتاری منتشر شدند.
۱۴۰۴/۰۴/۲۳: مجموعه داده OpenDialog، یک مجموعه داده گفتگوی گفتاری با مدت زمان ۶.۸ هزار ساعت منتشر شد. دانلود از ،
. جزئیات در
.
۱۴۰۴/۰۳/۲۶: ZipVoice و ZipVoice-Distill منتشر شدند.
نصب
۱. مخزن ZipVoice را کلون کنید
git clone https://github.com/k2-fsa/ZipVoice.git
۲. (اختیاری) ایجاد یک محیط مجازی پایتون
python3 -m venv zipvoice
source zipvoice/bin/activate
۳. بستههای مورد نیاز را نصب کنید
pip install -r requirements.txt
۴. نصب 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__)"
نحوه استفاده
۱. تولید گفتار تکگوینده
برای تولید گفتار تکگوینده با مدلهای ZipVoice یا ZipVoice-Distill آموزشدیده ما، از دستورات زیر استفاده کنید (مدلهای مورد نیاز از HuggingFace دانلود خواهند شد):
#### ۱.۱ استنتاج یک جمله منفرد
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متن رونویسی شده فایل صوتی مکالمهی ورودی است، مثلاً "[S1] سلام. [S2] حالت چطوره؟"prompt_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] سلام اریک."
۳ راهنمای استفاده بهتر:
#### ۳.۱ طول نمونه
پیشنهاد میکنیم فایل wav نمونه کوتاه باشد (مثلاً کمتر از ۳ ثانیه برای تولید گفتار تکگوینده، کمتر از ۱۰ ثانیه برای تولید گفتار دیالوگ) تا سرعت استنتاج بیشتر شود. نمونه بسیار طولانی باعث کندی استنتاج و افت کیفیت گفتار خواهد شد.
#### ۳.۲ بهینهسازی سرعت
اگر سرعت استنتاج رضایتبخش نیست، میتوانید به روشهای زیر آن را افزایش دهید:
- مدل تقطیر شده و کاهش مراحل: برای مدل تولید گفتار تکگوینده، به طور پیشفرض از مدل
zipvoiceبرای کیفیت بهتر گفتار استفاده میکنیم. اگر سرعت بیشتر اولویت دارد، میتوانید بهzipvoice_distillسوییچ کنید و مقدار--num-stepsرا تا حداقل4کاهش دهید (پیشفرض 8). - افزایش سرعت CPU با چندریسمانی: هنگام اجرای روی CPU، میتوانید پارامتر
--num-thread(مثلاً--num-thread 4) را برای افزایش تعداد ریسمانها و سرعت بیشتر وارد کنید. به طور پیشفرض ۱ ریسمان استفاده میشود. - افزایش سرعت CPU با ONNX: هنگام اجرا روی CPU، میتوانید از مدلهای ONNX با
zipvoice.bin.infer_zipvoice_onnxبرای سرعت بیشتر استفاده کنید (هنوز برای مدلهای تولید دیالوگ از ONNX پشتیبانی نشده). برای سرعت بیشتر، میتوانید مقدار--onnx-int8 Trueرا جهت استفاده از مدل ONNX با INT8 تنظیم کنید. توجه داشته باشید که مدل کوانتیزه شده باعث افت کیفیت گفتار خواهد شد. از ONNX روی GPU استفاده نکنید، زیرا روی GPU کندتر از PyTorch است.
متن داده شده بر اساس علائم نگارشی (برای تولید گفتار تکگوینده) یا نماد تغییر گوینده (برای تولید گفتار دیالوگ) به بخشهایی تقسیم میشود. سپس متنهای بخشبندی شده به صورت دستهای پردازش میشوند. بنابراین مدل میتواند متن بسیار طولانی را با مصرف حافظه تقریباً ثابت پردازش کند. با تنظیم پارامتر --max-duration میتوانید مصرف حافظه را کنترل کنید.
#### ۳.۴ ارزیابی "خام"
به طور پیشفرض، ورودیها (فایل wav نمونه، رونوشت نمونه، و متن) را برای استنتاج بهینه و عملکرد بهتر پیشپردازش میکنیم. اگر میخواهید عملکرد "خام" مدل را با ورودیهای دقیق ارائهشده ارزیابی کنید (مثلاً برای بازتولید نتایج مقاله ما)، میتوانید پارامتر --raw-evaluation True را وارد کنید.
#### ۳.۵ متن کوتاه
هنگام تولید گفتار برای متنهای بسیار کوتاه (مثلاً یک یا دو واژه)، گفتار تولیدشده گاهی برخی تلفظها را حذف میکند. برای رفع این مشکل، میتوانید پارامتر --speed 0.3 (که مقدار قابل تنظیم است) را وارد کنید تا مدت زمان گفتار تولیدی افزایش یابد.
#### ۳.۶ اصلاح تلفظ اشتباه حروف چندآوایی چینی
ما از pypinyin برای تبدیل کاراکترهای چینی به پینیین استفاده میکنیم. با این حال، گاهی اوقات حروف چندآوایی (多音字) را اشتباه تلفظ میکند.
برای اصلاح دستی این تلفظهای اشتباه، پینیین اصلاحشده را در داخل علامت زاویهدار < > قرار دهید و علامت نوا را اضافه کنید.
مثال:
- متن اصلی:
这把剑长三十公分 - اصلاح پینیین
长:这把剑三十公分
<> قرار دهید، مانند: 这把十公分 #### 3.7 حذف سکوتهای طولانی از گفتار تولید شده
مدل به طور خودکار موقعیتها و طول سکوتها را در گفتار تولیدشده تعیین میکند. گاهی اوقات سکوت طولانی در وسط گفتار ایجاد میشود. اگر نمیخواهید این اتفاق بیفتد، میتوانید --remove-long-sil را استفاده کنید تا سکوتهای طولانی وسط گفتار حذف شوند (سکوتهای ابتدا و انتها به طور پیشفرض حذف میشوند).
#### 3.8 دانلود مدل
اگر هنگام دانلود مدلهای از پیش آموزشدیده با HuggingFace مشکل اتصال داشتید، سعی کنید نقطه انتهایی را به سایت آینه تغییر دهید: export HF_ENDPOINT=https://hf-mirror.com.
آموزش مدل شخصی خودتان
برای نمونههای آموزش، تنظیم و ارزیابی، به دایرکتوری egs مراجعه کنید.
استقرار C++
راهحل استقرار C++ روی CPU را در sherpa-onnx بررسی کنید.
بحث و ارتباط
میتوانید مستقیماً در Github Issues بحث کنید.
همچنین میتوانید کد QR را برای پیوستن به گروه ویچت ما یا دنبال کردن حساب رسمی ویچت اسکن کنید.
| گروه ویچت | حساب رسمی ویچت |
| ------------ | ----------------------- |
|
|
|
ارجاع
@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 ---