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] سلام اریک."
3 راهنمایی برای استفاده بهتر:
#### 3.1 طول نمونه
ما یک فایل نمونه wav کوتاه (مثلاً کمتر از ۳ ثانیه برای تولید گفتار تکگوینده، کمتر از ۱۰ ثانیه برای تولید گفتار محاورهای) را برای افزایش سرعت استنتاج توصیه میکنیم. یک نمونه بسیار طولانی باعث کاهش سرعت استنتاج و افت کیفیت گفتار میشود.
#### 3.2 بهینهسازی سرعت
اگر سرعت استنتاج مطلوب نیست، میتوانید با روشهای زیر آن را افزایش دهید:
- مدل تقطیرشده و مراحل کمتر: برای مدل تولید گفتار تکگوینده، به طور پیشفرض از مدل
zipvoiceبرای کیفیت گفتار بهتر استفاده میکنیم. اگر سرعت بالاتر اولویت دارد، میتوانید بهzipvoice_distillسوئیچ کنید و مقدار--num-stepsرا تا حداقل4(پیشفرض ۸) کاهش دهید. - افزایش سرعت CPU با چندریسمانی: هنگام اجرا روی CPU، میتوانید با پارامتر
--num-thread(مثلاً--num-thread 4) تعداد ریسهها را برای سرعت بیشتر افزایش دهید. به طور پیشفرض از ۱ ریسه استفاده میکنیم. - افزایش سرعت CPU با ONNX: هنگام اجرا روی CPU، میتوانید از مدلهای ONNX با
zipvoice.bin.infer_zipvoice_onnxبرای سرعت بیشتر استفاده کنید (هنوز مدلهای تولید گفتار محاورهای از ONNX پشتیبانی نمیکنند). برای سرعت بالاتر، میتوانید مقدار--onnx-int8 Trueرا برای استفاده از مدل ONNX با کمیت INT8 تنظیم کنید. توجه داشته باشید که مدل کمیت شده باعث کاهش کیفیت گفتار میشود. از ONNX روی GPU استفاده نکنید، چون نسبت به PyTorch روی GPU کندتر است. - شتاب GPU با NVIDIA TensorRT: برای افزایش قابل توجه عملکرد روی کارتهای NVIDIA، ابتدا مدل را با zipvoice.bin.tensorrt_export به موتور TensorRT تبدیل کنید. سپس استنتاج را روی مجموعه داده خود (مثلاً مجموعه داده Hugging Face) با zipvoice.bin.infer_zipvoice انجام دهید. این کار میتواند تقریباً دو برابر عملکرد نسبت به پیادهسازی استاندارد PyTorch روی GPU داشته باشد.
متن داده شده بر اساس علائم نگارشی (برای تولید گفتار تکگوینده) یا نماد تغییر گوینده (برای تولید گفتار محاورهای) به بخشهایی تقسیم میشود. سپس، متنهای بخشبندی شده به صورت دستهای پردازش میشوند. بنابراین، مدل میتواند متنهای بسیار طولانی را با تقریباً حافظه ثابت پردازش کند. شما میتوانید با تنظیم پارامتر --max-duration میزان مصرف حافظه را کنترل کنید.
#### 3.4 ارزیابی "خام"
به طور پیشفرض، ورودیها (فایل نمونه wav، رونویسی نمونه، و متن) را برای استنتاج بهینه و عملکرد بهتر پیشپردازش میکنیم. اگر میخواهید عملکرد "خام" مدل را با ورودیهای دقیقاً داده شده ارزیابی کنید (مثلاً برای بازتولید نتایج مقاله ما)، میتوانید مقدار --raw-evaluation True را وارد کنید.
#### 3.5 متن کوتاه
هنگام تولید گفتار برای متنهای بسیار کوتاه (مثلاً یک یا دو کلمه)، ممکن است گفتار تولیدشده برخی تلفظها را حذف کند. برای رفع این مشکل، میتوانید مقدار --speed 0.3 (که عدد ۰.۳ قابل تنظیم است) را وارد کنید تا مدت زمان گفتار تولیدشده افزایش یابد.
#### 3.6 اصلاح تلفظ اشتباه نویسههای چندآوایی چینی
ما از pypinyin برای تبدیل حروف چینی به پینیین استفاده میکنیم. با این حال، گاهی اوقات ممکن است حروف چندآوایی (多音字) را اشتباه تلفظ کند.
برای اصلاح دستی این تلفظهای اشتباه، پینیین اصلاحشده را درون علامت زاویهای < > قرار دهید و علامت نغمه را نیز درج کنید.
مثال:
- متن اصلی:
这把剑长三十公分 - اصلاح پینیین واژه
长:这把剑三十公分
< > قرار دهید، مانند: 这把十公分 #### ۳.۷ حذف سکوتهای طولانی از گفتار تولیدشده
مدل به طور خودکار موقعیت و طول سکوتها در گفتار تولیدشده را تشخیص میدهد. گاهی اوقات سکوت طولانی در وسط گفتار ایجاد میشود. اگر این مورد را نمیخواهید، میتوانید با پارامتر --remove-long-sil سکوتهای طولانی در وسط گفتار تولیدشده را حذف کنید (سکوتهای لبهای به طور پیشفرض حذف خواهند شد).
#### ۳.۸ دانلود مدل
اگر هنگام دانلود مدلهای از پیش آموزشدیده از HuggingFace با مشکل اتصال مواجه شدید، میتوانید نقطه انتهایی را به سایت میرور تغییر دهید: export HF_ENDPOINT=https://hf-mirror.com.
آموزش مدل اختصاصی
برای مثالهای آموزش، تنظیم دقیق و ارزیابی به دایرکتوری egs مراجعه کنید.
استقرار در محیط تولید
اجرای GPU با NVIDIA Triton
برای استقرار آماده تولید با کارایی و مقیاسپذیری بالا، به ادغام سرور استنتاج Triton مراجعه کنید که موتورهای بهینهشده TensorRT، مدیریت درخواستهای همزمان و هر دو API گراف/HTTP برای استفاده سازمانی را ارائه میدهد.
استقرار روی CPU
برای راهحل استقرار 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-12-30 ---