CosyVoice3
Fun-CosyVoice3-0.5B एक 9-भाषा स्ट्रीमिंग टेक्स्ट-टू-स्पीच मॉडल है। यह टेक्स्ट इनपुट से प्राकृतिक 24 kHz स्पीच उत्पन्न करने के लिए तीन-चरण पाइपलाइन — LLM टोकन जेनरेशन, DiT flow matching, और HiFi-GAN vocoding — का उपयोग करता है। यह मॉडल — जिसे CosyVoice 3 भी लिखा जाता है — FunAudioLLM CosyVoice परिवार का नवीनतम संस्करण है।
समर्थित भाषाएँ
| भाषा | कोड |
|---|---|
| चीनी | chinese |
| अंग्रेज़ी | english |
| जापानी | japanese |
| कोरियाई | korean |
| जर्मन | german |
| स्पेनिश | spanish |
| फ़्रेंच | french |
| इतालवी | italian |
| रूसी | russian |
पाइपलाइन
CosyVoice3 तीन चरणों में स्पीच सिंथेसाइज़ करता है:
- LLM — Qwen2.5-0.5B बैकबोन टेक्स्ट से FSQ (Finite Scalar Quantization) स्पीच टोकन जेनरेट करता है
- DiT Flow Matching — एक 22-लेयर Diffusion Transformer Euler ODE इंटीग्रेशन के माध्यम से स्पीच टोकन को mel spectrograms में बदलता है
- HiFi-GAN — Neural Source Filter vocoder mel spectrograms को 24 kHz वेवफ़ॉर्म में बदलता है
आर्किटेक्चर
LLM (Qwen2.5-0.5B)
भाषा मॉडल ऑटोरीग्रेसिव तरीके से डिस्क्रीट स्पीच टोकन जनरेट करता है। रनटाइम चार क्वांटिज़ेशन वेरिएंट में आता है — 4-bit, 8-bit, 8-bit-full (int8 LLM + int8 DiT), और bf16 (अनक्वांटाइज़्ड) — हर कॉल पर --cosyvoice-variant से चुनें।
| पैरामीटर | मान |
|---|---|
| लेयर | 24 |
| Hidden dimension | 896 |
| Query heads | 14 |
| Key/Value heads | 2 (GQA) |
| FSQ शब्दावली | 6561 |
| क्वांटिज़ेशन | 4-bit |
DiT Flow Matching
Diffusion Transformer classifier-free guidance के साथ conditional flow matching का उपयोग करके स्पीच टोकन को mel spectrograms में परिष्कृत करता है।
| पैरामीटर | मान |
|---|---|
| लेयर | 22 |
| Dimension | 1024 |
| Attention heads | 16 |
| Conditioning | AdaLN (Adaptive Layer Norm) |
| ODE solver | Euler, 10 steps |
| CFG rate | 0.7 |
HiFi-GAN Vocoder
एक Neural Source Filter (NSF) vocoder जो mel spectrograms को वेवफ़ॉर्म में बदलता है।
| पैरामीटर | मान |
|---|---|
| Harmonics | 8 |
| Upsample ratio | 480x (8 x 5 x 3 x ISTFT 4) |
| ISTFT | n_fft=16, hop=4 |
| आउटपुट सैंपल रेट | 24 kHz |
मॉडल वेट
| वेरिएंट | LLM | DiT | साइज़ | HuggingFace |
|---|---|---|---|---|
4bit (डिफ़ॉल्ट) | int4, group=64 | bf16 | ~1.2 GB | aufklarer/CosyVoice3-0.5B-MLX-4bit |
8bit | int8, group=64 | bf16 | ~1.4 GB | aufklarer/CosyVoice3-0.5B-MLX-8bit |
8bit-full | int8, group=64 | int8, group=64 | ~1.6 GB | aufklarer/CosyVoice3-0.5B-MLX-8bit-full |
bf16 | bf16 | bf16 | ~2.1 GB | aufklarer/CosyVoice3-0.5B-MLX-bf16 |
हर बंडल में LLM, DiT फ़्लो-मैचिंग डिकोडर, HiFi-GAN वोकोडर, और zero-shot वॉइस क्लोनिंग के लिए ज़रूरी S3-Tokenizer रेफरेंस एनकोडर शामिल हैं। छोटे डाउनलोड/डिस्क के लिए छोटे बंडल चुनें; जब LLM/DiT क्वांटिज़ेशन नॉइज़ समस्या बने (लॉन्ग-फ़ॉर्म सिंथेसिस, वॉइस क्लोनिंग फ़िडेलिटी) तो bf16 चुनें।
CLI उपयोग
.build/release/speech speak "Hallo Welt" --engine cosyvoice --language german -o output.wav
उदाहरण
# अंग्रेज़ी
.build/release/speech speak "Hello, how are you?" --engine cosyvoice -o hello_en.wav
# चीनी
.build/release/speech speak "你好世界" --engine cosyvoice --language chinese -o hello_cn.wav
# स्पेनिश
.build/release/speech speak "Hola, buenos días" --engine cosyvoice --language spanish -o hello_es.wav
# फ़्रेंच
.build/release/speech speak "Bonjour le monde" --engine cosyvoice --language french -o hello_fr.wav
वॉयस क्लोनिंग
--voice-sample फ़्लैग का उपयोग करके एक छोटे संदर्भ ऑडियो सैंपल से किसी भी वॉयस को क्लोन करें। CosyVoice3 एक 192-dim एम्बेडिंग निकालने के लिए CAM++ स्पीकर encoder का उपयोग करता है जो DiT flow मॉडल को conditioning करता है।
# वॉयस क्लोनिंग
.build/release/speech speak "Hello in your voice" --engine cosyvoice --voice-sample reference.wav -o cloned.wav
# क्रॉस-लैंग्वेज: वॉयस क्लोन करें, जर्मन में बोलें
.build/release/speech speak "Guten Tag" --engine cosyvoice --voice-sample reference.wav --language german -o german.wav
यह कैसे काम करता है
- CAM++ स्पीकर encoder CoreML (Neural Engine) के माध्यम से संदर्भ ऑडियो से 192-dim एम्बेडिंग निकालता है
- Affine projection (192 → 80) DiT flow matching decoder को लक्ष्य वॉयस पर conditioning करता है
- HiFi-GAN vocoder स्पीकर-conditioned mel spectrogram को 24kHz ऑडियो में बदलता है
स्पीकर Encoder
| गुण | मान |
|---|---|
| मॉडल | CAM++ (Context-Aware Masking++) |
| एम्बेडिंग | 192 dimensions |
| बैकएंड | CoreML (Neural Engine, FP16) |
| आकार | ~14 MB |
| HuggingFace | aufklarer/CamPlusPlus-Speaker-CoreML |
CAM++ मॉडल --voice-sample के पहले उपयोग पर स्वचालित रूप से डाउनलोड होता है। संदर्भ ऑडियो टिप्स और Swift API के लिए वॉयस क्लोनिंग गाइड देखें।
मल्टी-स्पीकर डायलॉग
इनलाइन स्पीकर टैग का उपयोग करके कई स्पीकरों के बीच वार्तालाप सिंथेसाइज़ करें। प्रत्येक स्पीकर को --speakers फ़्लैग के माध्यम से एक संदर्भ ऑडियो फ़ाइल से एक वॉयस सौंपी जाती है।
# वॉयस क्लोनिंग के साथ दो-स्पीकर डायलॉग
.build/release/speech speak "[S1] Hello there! [S2] Hey, how are you?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o dialogue.wav
# तीन स्पीकर
.build/release/speech speak "[A] Welcome. [B] Thanks! [C] Glad to be here." \
--engine cosyvoice --speakers a=host.wav,b=guest1.wav,c=guest2.wav -o panel.wav
टैग में स्पीकर नाम केस-असंवेदनशील हैं और मैपिंग की से मिलाए जाते हैं। टर्न के बीच एक कॉन्फ़िगर करने योग्य silence gap (डिफ़ॉल्ट 0.2s) डाला जाता है।
| विकल्प | डिफ़ॉल्ट | विवरण |
|---|---|---|
--speakers | स्पीकर मैपिंग: s1=file.wav,s2=file.wav | |
--turn-gap | 0.2 | टर्न के बीच silence (सेकंड) |
--crossfade | 0.0 | टर्न के बीच crossfade overlap (सेकंड) |
इमोशन और स्टाइल टैग
इनलाइन इमोशन टैग का उपयोग करके प्रति सेगमेंट बोलने की स्टाइल नियंत्रित करें। CosyVoice3 <|endofprompt|> टोकन से पहले टेक्स्ट प्रीफ़िक्स को एक स्टाइल इंस्ट्रक्शन के रूप में उपयोग करता है — इमोशन टैग प्राकृतिक भाषा निर्देशों से मैप होते हैं जो इस प्रीफ़िक्स को प्रतिस्थापित करते हैं।
# इमोशन टैग
.build/release/speech speak "(excited) Wow, amazing! (sad) But I have to go..." \
--engine cosyvoice -o emotion.wav
# स्पीकरों के साथ संयुक्त
.build/release/speech speak "[S1] (happy) Great news! [S2] (surprised) Really?" \
--engine cosyvoice --speakers s1=alice.wav,s2=bob.wav -o combined.wav
# टैग के रूप में फ़्रीफ़ॉर्म निर्देश
.build/release/speech speak "(Speak like a pirate) Ahoy matey!" \
--engine cosyvoice -o pirate.wav
# ग्लोबल निर्देश (बिना इमोशन टैग वाले सभी सेगमेंट पर लागू)
.build/release/speech speak "Hello world" \
--engine cosyvoice --cosy-instruct "Speak cheerfully" -o cheerful.wav
बिल्ट-इन इमोशन टैग
| टैग | निर्देश |
|---|---|
happy / excited | खुशी और उत्साह से बोलें। |
sad | उदास, उदासीन स्वर में बोलें। |
angry | क्रोध और तीव्रता से बोलें। |
whispers / whispering | नरम, कोमल फुसफुसाहट में बोलें। |
laughs / laughing | हँसते हुए बोलें। |
calm | शांति और आराम से बोलें। |
surprised | आश्चर्य और विस्मय से बोलें। |
serious | गंभीर, औपचारिक स्वर में बोलें। |
अज्ञात टैग फ़्रीफ़ॉर्म निर्देशों के रूप में पास होते हैं, इसलिए (Speak in a slow, dramatic voice) जैसा काम करता है।
मॉडल नियंत्रण टोकन (fl_ टोकन)
आंतरिक रूप से, CosyVoice3 LLM fl_ उपसर्ग वाले विशेष नियंत्रण टोकन का उपयोग मोड (शून्य-शॉट क्लोनिंग, निर्देश संश्लेषण, स्पीकर सहेजना आदि) के बीच स्विच करने के लिए करता है। ये टोकन अपस्ट्रीम FunAudioLLM टोकनाइज़र का हिस्सा हैं; Soniqo रनटाइम आपके द्वारा उपयोग किए जाने वाले CLI फ्लैग या Swift API कॉल के आधार पर सही टोकन को स्वचालित रूप से उत्सर्जित करता है, इसलिए आपको उन्हें कभी हाथ से नहीं लिखना पड़ता।
| नियंत्रण टोकन | मोड | Soniqo से कैसे इनवोक करें |
|---|---|---|
<|fl_speaker_clone|> | रेफ़रेंस ऑडियो सैंपल से शून्य-शॉट वॉइस क्लोनिंग | CLI पर --voice-sample reference.wav पास करें, या Swift API पर voiceSample: सेट करें। |
<|fl_speaker_instruct|> | डिफ़ॉल्ट आवाज़ के साथ निर्देश- या शैली-सशर्त संश्लेषण | --voice-sample के बिना --cosy-instruct "Speak cheerfully" पास करें या इनलाइन (happy) टैग का उपयोग करें। |
<|fl_speaker_instruct2|> | क्लोन की गई रेफ़रेंस आवाज़ के साथ संयुक्त निर्देश संश्लेषण | एक ही कॉल में --voice-sample reference.wav को --cosy-instruct "..." (या इनलाइन इमोशन टैग) के साथ मिलाएँ। |
<|fl_save_speaker|> | हर कॉल पर रेफ़रेंस ऑडियो को फिर से एनकोड किए बिना स्पीकर एम्बेडिंग को बरकरार रखता है | Soniqo CLI में सीधे उजागर नहीं — एम्बेडिंग प्रति कॉल गणना की जाती है। कैश करने के लिए, स्पीकर एम्बेडिंग मॉड्यूल के माध्यम से 192-आयामी CAM++ वेक्टर स्वयं निकालें और आगे पास करें। |
<|fl_speaker_clone_zh|>, <|fl_speaker_clone_en|>, … | अपस्ट्रीम टोकनाइज़र द्वारा उपयोग किए जाने वाले भाषा-विशिष्ट शून्य-शॉट क्लोनिंग संकेत | --voice-sample को --language german|spanish|chinese|... के साथ मिलाएँ। Soniqo --language फ्लैग से सही भाषा संकेत चुनता है। |
ऊपर की तालिका प्रत्येक अपस्ट्रीम fl_ नियंत्रण टोकन को उसके Soniqo समकक्ष पर मैप करती है। आपको कभी भी अपने प्रॉम्प्ट में fl_ टोकन स्वयं डालने की आवश्यकता नहीं है — उच्च-स्तरीय CLI फ्लैग या Swift API आर्ग्युमेंट पास करें, और रनटाइम सही अनुक्रम (clone → instruct → instruct2 → save_speaker) उत्सर्जित करेगा।
सैंपलिंग
LLM चरण निम्नलिखित सैंपलिंग कॉन्फ़िगरेशन का उपयोग करता है:
| पैरामीटर | मान |
|---|---|
| Top-k | 25 |
| Top-p | 0.8 |
| Repetition Aware Sampling | सक्षम (window=10, tau_r=0.1) |
Repetition Aware Sampling (RAS), VALL-E 2 से, उन टोकनों को दंडित करता है जो अंतिम 10 जेनरेट किए गए टोकनों में दिखाई दिए। यह दोहराए जाने वाले ऑडियो आर्टिफ़ैक्ट्स को रोकता है और आउटपुट स्थिरता में सुधार करता है।
प्रदर्शन
M2 Max पर, CosyVoice3 लगभग 0.5 का RTF प्राप्त करता है — रियल-टाइम से तेज़।
| चरण | लेटेंसी |
|---|---|
| LLM (compiled) | ~13 ms/token |
| DiT Flow Matching | 370 - 520 ms |
| HiFi-GAN | 50 - 170 ms |
LLM चरण ऑटोरिग्रेसिव लूप के लिए compile(shapeless: true) का उपयोग करता है, जो विभिन्न अनुक्रम लंबाई पर recompilation ओवरहेड को समाप्त करता है। Batch-doubled CFG DiT forward passes की संख्या को 20 से 10 तक आधा कर देता है।