सभी लेख

· Casimiro Ferreira· 5 मिनट पढ़ें

ऐसे TTS मॉडल जो आलू पर भी चलें

  • phoonnx
  • TTS
  • ONNX
  • VITS
  • self-hosted
  • OVOS

अच्छे टेक्स्ट-टू-स्पीच के लिए किसी GPU या क्लाउड सब्सक्रिप्शन की ज़रूरत नहीं होती। एक प्राकृतिक, बहुभाषी आवाज़ किसी ऐसी चीज़ में समा सकती है जिसे सर्वर कहते हुए आपको शर्म आएगी — वह किस्म का बोर्ड जिसे आप “बस ज़रूरत पड़ने पर” दराज़ में रखते हैं। एक आलू।

phoonnx ठीक इसी लक्ष्य के लिए हमारा शोध फ़्रेमवर्क है: छोटी VITS-आधारित आवाज़ें जो पूरी तरह ऑफ़लाइन, CPU पर, सस्ते हार्डवेयर पर चलती हैं, और जिन्हें हम शुरू से खुद प्रशिक्षित भी कर सकते हैं।

छोटा कितना छोटा?

हाथ हिलाकर बात करने के बजाय एक असली संख्या रखते हैं। हमने एक उत्पादन-स्तर की phoonnx आवाज़ — बास्क “Miro” आवाज़ (OpenVoiceOS/phoonnx_eu-ES_miro_espeak) — सीधे Hugging Face से उठाई और ONNX ग्राफ़ में वज़नों की गिनती की:

import onnx, numpy as np
m = onnx.load("miro_eu-ES.onnx")
print(sum(int(np.prod(i.dims)) for i in m.graph.initializer))
# 15650459

~1.565 करोड़ पैरामीटर। यही पूरी आवाज़ है — encoder, decoder, सब कुछ — एक 63 MB की फ़ाइल में। उसी रिलीज़ की महिला “Dii” आवाज़ बिल्कुल उसी संख्या तक पहुँचती है, क्योंकि वे मानक phoonnx VITS आर्किटेक्चर साझा करती हैं; व्यक्तित्व वज़नों में बसता है, अतिरिक्त क्षमता में नहीं।

परिप्रेक्ष्य के लिए: एक “छोटे” आधुनिक भाषा मॉडल की एक अकेली परत इस पूरे स्पीच सिंथेसाइज़र से अधिक पैरामीटर ले जा सकती है, और फिर भी यह धाराप्रवाह बोलता है।

VITS क्यों, और ONNX क्यों

VITS हर phoonnx आवाज़ की रीढ़ है। यह एक एंड-टू-एंड आर्किटेक्चर है — टेक्स्ट (यानी फ़ोनीम) अंदर, वेवफ़ॉर्म बाहर — जिसमें संभालने के लिए कोई अलग vocoder नहीं और एक-एक सैंपल रेंगने वाला कोई autoregressive लूप नहीं। वही एंड-टू-एंड डिज़ाइन ठीक वह चीज़ है जो इसे आलू पर व्यवहार्य बनाती है: एक forward pass, समानांतर सिंथेसिस, हो गया।

हम edge पर PyTorch नहीं भेजते। प्रशिक्षित आवाज़ें ONNX में निर्यात की जाती हैं और CPU पर onnxruntime के ज़रिए चलती हैं — कोई CUDA नहीं, कोई GPU नहीं, कोई ड्राइवर की रूलेट नहीं। onnxruntime एक कसा हुआ, पोर्टेबल C++ इंजन है, और डेढ़ करोड़ पैरामीटर वाला एक ग्राफ़ उसी दायरे में है जिसे एक Raspberry-Pi-श्रेणी का कोर रीयल-टाइम से तेज़ चबा जाता है। नतीजा एक ऐसा वॉयस असिस्टेंट है जो तब भी बोलता रहता है जब आपकी इंटरनेट बंद हो, जब क्लाउड प्रदाता के यहाँ आउटेज हो, या जब आप बस कभी नहीं चाहते थे कि आपके घर का ऑडियो घर से बाहर जाए।

चतुराई फ़ोनीम में छिपी है

एक नन्हा ध्वनिक मॉडल नन्हा होने की गुंजाइश रखता है क्योंकि phoonnx कठिन भाषाई काम पहले ही, phonemizer में कर लेता है। एक phonemizer (ग्राफ़ीम-टू-फ़ोनीम, या G2P) लिखित टेक्स्ट को उन ध्वनि-इकाइयों के अनुक्रम में बदलता है जिन्हें मॉडल असल में बोलता है — ताकि VITS नेटवर्क को कभी वर्तनी सीखनी न पड़े, बस ध्वनि।

हमारा फ़ोनीम-कार्य 350+ भाषाओं के लिए ग्राफ़ीम-टू-IPA और शास्त्रीय पुर्तगाली ध्वन्यात्मकता पर आधारित है, जो कम-संसाधन वाली भाषाओं के लिए हफ़्तों की विशेषज्ञ एनोटेशन के बिना आवाज़ें प्रशिक्षित करना संभव बनाते हैं।

phoonnx जानबूझकर phonemizer के प्रति अज्ञेयवादी है और उनकी एक छोटी सेना साथ लाता है: espeak-ng, gruut, epitran, misaki, transphone (जो Glottolog में सूचीबद्ध हज़ारों भाषाओं तक पहुँचता है), साथ ही अरबी के लिए mantoq, गैलिशियन के लिए cotovia, जापानी के लिए OpenJTalk, और कोरियाई के लिए KoG2P जैसे विशेषज्ञ। वे IPA, ARPA, Pinyin, Hangul, Buckwalter उत्सर्जित करते हैं — जो भी भाषा को चाहिए। एक ByT5 पर बना मॉडल-आधारित बहुभाषी G2P भी है, जो बाकी सब की तरह ONNX में निर्यात किया गया है।

वर्तनी को phonemizer पर छोड़ देना वह तरकीब है जो एक डेढ़ करोड़ पैरामीटर वाले मॉडल को एक कम-संसाधन वाली भाषा में अच्छा सुनाने देती है जिसे उसने लिखा हुआ कभी नहीं देखा।

आवाज़ें बनाने का फ़्रेमवर्क, न कि केवल चलाने का

phoonnx केवल एक इन्फ़रेंस टूलकिट नहीं है। साथी फ़्रेमवर्क phoonnx_train वह तरीका है जिससे हम सबसे पहले आवाज़ें बनाते हैं।

phoonnx_train पूरे पाइपलाइन को कवर करता है:

  • एक LJSpeech-शैली के डेटासेट का प्रीप्रोसेसिंग फ़ोनीमीकृत प्रशिक्षण डेटा में।
  • एक अकेले उपभोक्ता या मिड-रेंज GPU पर VITS जनरेटर (वे ~1.565 करोड़ पैरामीटर) का प्रशिक्षण — इतने छोटे मॉडल को किसी प्रशिक्षण क्लस्टर की ज़रूरत नहीं होती।
  • तैयार checkpoint को एक ही स्क्रिप्ट से ONNX में निर्यात, जो किसी डिवाइस पर onnxruntime में सीधे डालने के लिए तैयार है।

चूँकि नुस्खा खुला है और मॉडल छोटे हैं, ऐसी भाषा के लिए एक बिल्कुल नई आवाज़ बनाना जिसके पास कोई खुला ऑफ़लाइन विकल्प नहीं है, एक सप्ताहांत-स्तर की परियोजना है, न कि शोध-अनुदान-स्तर की। इसी तरह हम कम-सेवित भाषाओं के लिए खाई पाट रहे हैं — बास्क, मिरांडीज़, यूरोपीय पुर्तगाली और अन्य — बजाय इसके कि किसी विक्रेता के यह तय करने का इंतज़ार करें कि कोई भाषा व्यावसायिक रूप से दिलचस्प है।

पहले से ही आपके असिस्टेंट से जुड़ा

आपको इनमें से किसी को हाथ से चिपकाना नहीं पड़ता। phoonnx एक मूल OpenVoiceOS प्लगइन, ovos-tts-plugin-phoonnx साथ लाता है, जो आपके लिए आवाज़ें लाता और लोड करता है:

"tts": {
  "module": "ovos-tts-plugin-phoonnx",
  "ovos-tts-plugin-phoonnx": {
    "voice": "OpenVoiceOS/phoonnx_pt-PT_miro_tugaphone"
  }
}

voice छोड़ दें और यह पहला मॉडल चुन लेता है जो आपकी भाषा से मेल खाता है। किसी असिस्टेंट के बाहर आवाज़ें प्रबंधित करने के लिए एक CLI है, phoonnx-voices, जो भाषाएँ सूचीबद्ध करती है, आवाज़ें ब्राउज़ करती है, और मॉडल पहले से डाउनलोड करती है:

phoonnx-voices list-voices --lang pt-PT
phoonnx-voices download OpenVoiceOS/phoonnx_pt-PT_miro_tugaphone

और चूँकि phoonnx सादा VITS-ऑवर-ONNX बोलता है, इसका इन्फ़रेंस इंजन Piper, Mimic3, Coqui, और MMS द्वारा प्रशिक्षित आवाज़ें भी चलाता है — कुल मिलाकर एक हज़ार से अधिक भाषाएँ और आवाज़ें। एक छोटा रनटाइम, एक विशाल कैटलॉग, और इसमें से कुछ भी घर फ़ोन नहीं करता।

मुद्दा

वह वॉयस तकनीक जो आपका सम्मान करती है, उसे वहाँ चलना होगा जहाँ आप हैं — आपके हार्डवेयर पर, आपके नियंत्रण में, चाहें तो नेटवर्क केबल निकाली हुई। phoonnx हमारा दाँव है कि वहाँ पहुँचने का रास्ता बड़े मॉडल नहीं, बल्कि सही आर्किटेक्चर को छोटा बनाना है: रीढ़ के लिए VITS, भाषाई भार उठाने के लिए चतुर phonemizer, पोर्टेबिलिटी के लिए ONNX, और एक खुला प्रशिक्षण फ़्रेमवर्क ताकि कोई भी कैटलॉग को बढ़ा सके।

डेढ़ करोड़ पैरामीटर, CPU पर चलते हुए, ऐसे हार्डवेयर पर प्रशिक्षित जिसे कोई भी अपना सकता है: यही वह प्रशिक्षण पाइपलाइन है जो हर phoonnx आवाज़ के पीछे है।