सही बोलना: TTS के लिए पुर्तगाली heterophones को स्पष्ट करना
जब एक टेक्स्ट-टू-स्पीच आवाज़ “Tenho sede” पढ़ती है, तो एक पुर्तगाली श्रोता प्यास सुनने की अपेक्षा करता है। पर वही वर्तनी, sede, मुख्यालय भी हो सकती है — और दोनों अलग स्वरों के साथ उच्चारित होते हैं। इसे गलत स्वर के साथ कहिए और आवाज़ न सिर्फ़ अटपटी लगती है; वह ज़ोर से एक अलग शब्द बोल देती है। किसी ऐसे व्यक्ति के लिए जो स्क्रीन पढ़वाने के लिए TTS पर निर्भर है, यही समझ में आने और भ्रमित होने के बीच की रेखा है।
यह एक फ़्रंट-एंड समस्या है — ग्राफ़ीम-टू-फ़ोनीम चरण जो तय करता है कि कोई शब्द किन ध्वनियों से मैप होता है, इससे बहुत पहले कि कोई न्यूरल vocoder उन ध्वनियों को ऑडियो में बदले। कोई भी vocoder गुणवत्ता इसे ठीक नहीं करती। अगर फ़्रंट-एंड गलत उच्चारण चुनता है, तो आवाज़ गलत शब्द को स्पष्ट रूप से उच्चारित करती है।
Heterophonic homographs: एक ही वर्तनी, अलग ध्वनि, अलग अर्थ
यूरोपीय पुर्तगाली ऐसे शब्दों से भरी है जिनकी वर्तनी एक-जैसी है पर उच्चारण अलग स्वर-गुणवत्ता के साथ होता है — एक खुला स्वर बनाम एक बंद स्वर — जहाँ सही चुनाव अर्थ पर निर्भर करता है, न कि केवल व्याकरण पर। कुछ उदाहरण:
sede— प्यास (बंद e,ˈsedɨ) बनाम मुख्यालय/स्थान (खुला e,ˈsɛdɨ)। दोनों संज्ञाएँ हैं।forma— साँचा / बेकिंग टिन (बंद o,ˈfoɾmɐ, fôrma लिखा जाता है) बनाम आकार / तरीका (खुला o,ˈfɔɾmɐ)।molho— सॉस (बंद o) बनाम गट्ठर (खुला o)।corte— राजदरबार (बंद o) बनाम एक कटाव (खुला o)।
एक भोला TTS सिस्टम प्रति वर्तनी एक ही उच्चारण पर टिक जाता है। तो वह प्यास को मुख्यालय वाले स्वर के साथ पढ़ता है — हर बार — और श्रोता गलत शब्द सुनता है।
“बस part of speech को टैग कर दो” क्यों काम नहीं करता
स्पष्ट उपाय है वाक्य पर एक part-of-speech (POS) tagger चलाना और POS से उच्चारण चुनना। यह कुछ जोड़ों के लिए मदद करता है, पर यह रचना से ही तब विफल हो जाता है जब दो अर्थ एक ही part of speech साझा करते हैं।
फिर से sede लें। प्यास और मुख्यालय दोनों संज्ञाएँ हैं। एक POS tagger उन्हें एक जैसा लेबल करता है — उन्हें अलग बताने के लिए कोई व्याकरणिक संकेत नहीं है — इसलिए वह केवल अधिक सामान्य अर्थ का अनुमान लगा सकता है। हमने ठीक यही मापा: हमारे परीक्षण सेट पर, spaCy और Stanza दोनों sede के प्यास अर्थ पर 0% स्कोर करते हैं। वे हमेशा मुख्यालय चुनते हैं। वही संरचनात्मक सीमा corte (कटाव बनाम दरबार), forma (साँचा बनाम आकार), और molho (सॉस बनाम गट्ठर) पर दिखती है: जब अर्थ एक ही part of speech के भीतर बँटता है, तो व्याकरण उसे देख नहीं सकता।
डेटासेट: व्याकरण नहीं, अर्थ को लेबल करना
तो हमने एक खुला डेटासेट बनाया जो उस चीज़ को लेबल करता है जो असल में मायने रखती है — अर्थ। bifonia-pt-homographs 56,891 यूरोपीय पुर्तगाली वाक्य हैं जो 27 heterophonic homographs को कवर करते हैं। हर वाक्य शब्द, उसके अर्थ (sense), उसके part of speech, उसके IPA उच्चारण, और एक diacritic-पुनर्स्थापित रूप (उदाहरण के लिए sêde बनाम séde) के साथ लेबल किया गया है जो पृष्ठ पर अभीष्ट पठन को असंदिग्ध बनाता है।
बकेट कुंजी अर्थ है — यही पूरी बात है। एक अकेला रिकॉर्ड ऐसा दिखता है:
{
"word": "sede",
"sense": "thirst",
"pos": "NOUN",
"ipa": "ˈsedɨ",
"sentence": "Depois da corrida tinha tanta sede que bebi um litro de água."
}
उच्चारण अनुमान के बजाय infopédia शब्दकोश (Porto Editora) के विरुद्ध सत्यापित किए गए, और train/test विभाजन प्रति (word, meaning) स्तरीकृत हैं ताकि एक डाउनस्ट्रीम मॉडल — मान लीजिए एक BiLSTM — हर अर्थ को दोनों हिस्सों में देखे। यह Hugging Face पर TigreGotico/bifonia-pt-homographs के रूप में प्रकाशित है।
इसे कितनी अच्छी तरह हल किया जा सकता है?
अर्थ-लेबल किए गए डेटा के साथ, हम माप सके कि विभिन्न तरीके सही अर्थ चुनने में कितना अच्छा करते हैं — और इसलिए सही उच्चारण:
| तरीका | सटीकता |
|---|---|
| हमेशा सबसे सामान्य अर्थ का अनुमान | ≈53% |
| spaCy POS → अर्थ | ≈66% |
| Stanza POS → अर्थ | ≈75% |
bifonia नियम + अर्थ resolver | ≈94% |
POS-आधारित तरीके ठीक वहीं ठहर जाते हैं जहाँ आप अपेक्षा करेंगे: वे व्याकरण से मार्ग तय कर सकते हैं पर अर्थ से कभी नहीं, इसलिए संज्ञा-के-भीतर के विभाजन पहुँच के बाहर हैं। हमारा resolver — bifonia लाइब्रेरी, हल्की और पूरी तरह निर्भरता-रहित — ≈94% तक पहुँचता है, और महत्वपूर्ण रूप से sede/प्यास वाले मामले पर 100% मारता है जिस पर POS taggers 0% पाते हैं।
मुख्य बात केवल संख्या नहीं है। बात यह है कि एक छोटा, तेज़, पूरी तरह खुला घटक इस काम पर भारी-भरकम न्यूरल POS taggers को हरा देता है — क्योंकि यह अर्थ को हल करता है, न कि केवल व्याकरण को। कोई GPU नहीं, कोई मॉडल डाउनलोड नहीं, कोई नेटवर्क कॉल नहीं।
यह क्यों मायने रखता है
सही उच्चारण बुनियादी है, सजावटी नहीं। स्क्रीन रीडर और वॉयस असिस्टेंट वही हैं जिनसे नेत्रहीन और केवल-वॉयस उपयोगकर्ता दुनिया पढ़ते हैं, और एक फ़्रंट-एंड जो सामान्य शब्दों का गलत उच्चारण करता है, वह छूने वाले हर वाक्य को चुपचाप बिगाड़ देता है। स्रोत पर heterophone स्पष्टीकरण ठीक करने का अर्थ है कि आवाज़ वही कहती है जो टेक्स्ट का अर्थ है।
चूँकि डेटासेट खुला है और resolver नन्हा और fork करने योग्य है, कोई भी पुर्तगाली TTS फ़्रंट-एंड बनाने वाला इसे एक विशाल मॉडल के बिना सही कर सकता है — और वही तरीका गैलिशियन जैसी संबंधित भाषा में साफ़-सुथरे ढंग से पोर्ट होता है, जहाँ खुला/बंद स्वर भेद वही जाल बनाता है। लेबल किया गया डेटा दोहरी भूमिका भी निभाता है: यह ठीक वही है जो सघन सांख्यिकीय मॉडल, जैसे एक प्रति-शब्द classifier, प्रशिक्षित करने के लिए चाहिए, उन टीमों के लिए जिनके पास corpus है और जो नियम-आधारित के साथ-साथ एक सीखा हुआ resolver भी चाहती हैं।
आज़माएँ
डेटासेट Hugging Face पर TigreGotico/bifonia-pt-homographs पर है, और resolver bifonia पर रहता है। यह पुर्तगाली के लिए शास्त्रीय NLP और 350+ भाषाओं के लिए ग्राफ़ीम-टू-IPA स्टैक के पीछे के व्यापक पुर्तगाली ध्वन्यात्मकता कार्य में बैठता है — छोटे, निर्धारणात्मक टुकड़े जो एक आवाज़ को किसी भाषा का उच्चारण उसी तरह कराते हैं जैसे उसके वक्ता असल में करते हैं।