- चीनी उच्चारण और tones के अभ्यास में मदद के लिए लगभग 300 घंटे के speech data पर प्रशिक्षित 9M-parameter CTC-आधारित speech model खुद बनाया गया
- Conformer encoder संरचना का उपयोग कर स्थानीय speech features और global context दोनों को पकड़ा गया, और Pinyin+tone unit tokenization के जरिए उच्चारण की गलतियों को साफ़ तौर पर अलग किया गया
- CTC loss के माध्यम से उपयोगकर्ता ने वास्तव में क्या उच्चारित किया, इसका frame-level पर मूल्यांकन किया जाता है, और Viterbi algorithm से time alignment किया जाता है
- मॉडल का आकार 75M→9M तक घटाने पर भी accuracy loss लगभग नहीं हुआ, और INT8 quantization के बाद इसे लगभग 11MB तक छोटा कर वेब ब्राउज़र में तुरंत चलाना संभव हुआ
- ब्राउज़र-आधारित demo on-device pronunciation correction system की संभावना दिखाता है, और data quality में सुधार भविष्य के performance improvement की कुंजी है
उच्चारण मूल्यांकन मॉडल का अवलोकन
- चीनी उच्चारण सीखने की कठिनाई को हल करने के लिए उच्चारण को score करने वाला एक छोटा speech model सीधे प्रशिक्षित किया गया
- लगभग 300 घंटे के transcribed speech data (AISHELL-1, Primewords) का उपयोग किया गया
- इसे ऐसे रूप में उपलब्ध कराया गया कि यह सीधे browser में चल सके
- मौजूदा pitch visualization approach noise, बोलने के अंतर आदि के कारण अस्थिर था, और data-driven approach अधिक प्रभावी होने की पुष्टि हुई
- लक्ष्य commercial API के बिना on-device Computer-Assisted Pronunciation Training (CAPT) system बनाना था
मॉडल संरचना और training method
- Conformer encoder + CTC loss संरचना अपनाई गई
- CNN छोटे समय-अंतराल के acoustic features (जैसे: zh vs z) को पकड़ता है
- Transformer contextual tone patterns (जैसे: tone sandhi) को संभालता है
- CTC method frame-by-frame probability distribution आउटपुट करता है और वास्तव में बोले गए phonemes का सीधे मूल्यांकन करता है
- `` token का उपयोग कर repetition और blanks को align किया जाता है
- auto-correction के बिना वास्तव में उच्चारित सामग्री को ज्यों का त्यों दर्शाता है
tokenization और alignment
- Pinyin+tone combination को एक single token के रूप में परिभाषित किया गया
- उदाहरण:
zhong1 और zhong4 अलग-अलग tokens हैं
- neutral tone को tone 5 (
ma5) के रूप में एकरूप किया गया
- कुल 1,254 tokens +
, का संयोजन
- Viterbi algorithm से speech frames और tokens के बीच optimal path निकाला गया
- उदाहरण: “Nǐ hǎo” के उच्चारण में
ni3 और hao3 खंडों को अलग किया जाता है
मॉडल का हल्कापन और performance
- शुरुआती 75M-parameter मॉडल से 9M तक downsizing किया गया
- 75M: TER 4.83%, Tone Accuracy 98.47%
- 9M: TER 5.27%, Tone Accuracy 98.29%
- accuracy loss बहुत कम रहा, जो यह संकेत देता है कि यह data-bound task है
- FP32 model (37MB) को INT8 quantization से 11MB तक घटाया गया
onnxruntime-web के माध्यम से browser में तुरंत load किया जा सकता है
alignment errors और fixes
- silence segments के कारण pronunciation evaluation के बिगड़ने की समस्या आई
- उदाहरण: “我喜欢…” बोलने से पहले 1 सेकंड की चुप्पी
wo3 के साथ गलत align हो गई और 0 score मिला
- समाधान: silence frames को score calculation से बाहर किया गया
- जिन frames में `` probability 0.7 से अधिक थी, उन्हें filter किया गया
- सुधार के बाद पहले syllable का confidence score 0.0 → 0.99 हो गया
परिणाम और सीमाएँ
- beta test के दौरान pronunciation correction का असर महसूस हुआ
- मॉडल बहुत सख्ती से scoring करता है
- native speakers और बच्चों की speech पर accuracy कम हुई
- AISHELL data मुख्यतः read speech होने के कारण speed और intonation में अंतर मौजूद है
- आगे Common Voice जैसी conversational data जोड़ने की ज़रूरत है
- वेब demo लगभग 13MB का है, और ज़्यादातर websites से भी हल्के आकार में पूर्ण pronunciation correction functionality देता है
1 टिप्पणियां
Hacker News की राय
इतने शानदार प्रोजेक्ट के लिए धन्यवाद
लेकिन “我想学中文” वाक्य में “wén” को “guó” के रूप में पहचानना अजीब लगा
यह इस बात का संकेत लगता है कि मॉडल ने tones से ज़्यादा शब्द संरचना सीखी है। शायद ट्रेनिंग डेटा में “Zhōng guó” बहुत ज़्यादा आया, इसलिए ऐसा bias बना
जैसा ब्लॉग पोस्ट में कहा गया है, यह “मैंने वास्तव में क्या उच्चारण किया” बताने वाला मॉडल कम और 1254 संभावित syllables में से सबसे नज़दीकी पर mapping करने वाली संरचना ज़्यादा लगता है
फिर भी यह speech-केंद्रित learning approach मुझे पसंद आई। text-आधारित learning में हर देश की लिखावट अलग होती है, जिससे भ्रम होता है। beginners के लिए pinyin भी कई बार उलझाऊ संकेतों से भरा होता है
आइडिया और UI सहज हैं, इसलिए काफ़ी प्रभावशाली लगा
लेकिन मैं बीजिंग का हूँ और standard Chinese पूरी तरह बोल सकता हूँ, फिर भी मेरे लिए आसान सवाल पार करना मुश्किल था
उदाहरण “你好吃饭了吗” में tone पहचान ग़लत थी, और संदर्भ के हिसाब से “了” का उच्चारण “liǎo” नहीं बल्कि “le” होना चाहिए
tones को लेकर बहुत चिंता दिख रही है, लेकिन वास्तव में tones पूरी तरह सही न भी हों तो communication में हमेशा बड़ी समस्या नहीं आती
हर क्षेत्र की intonation अलग होती है, इसलिए tones मिले-जुले हों तब भी लोग अक्सर समझ लेते हैं। tones पर बहुत अटकने के बजाय context-केंद्रित learning बेहतर है
अलग-अलग regional dialects के बावजूद लोग संवाद कर पाते हैं क्योंकि 1) पड़ोसी इलाकों के tones में अंतर बहुत बड़ा नहीं होता, और 2) जब समझ न आए तो वे standard language (Putonghua) पर स्विच कर जाते हैं
Chinese के बने रहने की एक बड़ी वजह ही इसका tone system है। tones ग़लत हों तो communication लगभग असंभव हो सकता है
लेकिन Chinese में text-केंद्रित communication होने की एक वजह यह भी है कि हर क्षेत्र का उच्चारण और tones अलग हैं, इसलिए सिर्फ speech से बात हमेशा नहीं बनती
लोगों को tones नज़रअंदाज़ करने के लिए प्रेरित करना ख़तरनाक है। अगर tones सच में इतने महत्वहीन होते, तो वे अब तक ग़ायब हो चुके होते
context सीमित हो तो भ्रम पैदा होता है, इसलिए tones अब भी मूलभूत हैं। साथ ही “吃” को “shi2” पहचानना बताता है कि और data augmentation की ज़रूरत है
एक intermediate learner के रूप में feedback देने के लिए मैंने नया account बनाया
तेज़ बोलने पर phoneme tracking ठीक से नहीं होती और tone recognition बिगड़ जाता है
उदाहरण के लिए “他是我的朋友” को अगर natural speed में बोलें, तो “我” को “de” समझ लेता है या “是” को “si” मान लेता है
धीरे-धीरे और साफ़ बोलने पर यह सही पहचानता है
लगातार तीसरे tone का बदलना (tone sandhi) जैसी घटनाओं को भी ध्यान में रखना होगा। natural conversation के उच्चारण को संभालने वाली क्षमता चाहिए
यूरोपीय भाषाएँ बोलने वालों के लिए Chinese या दूसरी tonal languages सीखना बहुत कठिन होता है
कान tones के आदी नहीं होते, इसलिए उन्हें लगता है कि वे सही बोल रहे हैं, लेकिन native speakers समझ नहीं पाते
English में हर क्षेत्र के vowel अलग होते हैं, और “done vs down”, “beat vs bit” जैसे फ़र्क पहचानना मुश्किल होता है
वहीं Spanish में vowels सरल हैं, इसलिए उसे सीखना बहुत आसान लगा
Japanese pitch accent सीखते समय भी शुरुआत में मुझे कोई फ़र्क सुनाई नहीं देता था, लेकिन बार-बार अभ्यास के बाद वह सुनाई देने लगा
English में भी “uh-oh” जैसी pitch pattern होती है, यह समझने के बाद चीज़ें पकड़ में आनी शुरू हुईं
ख़ासकर English-style intonation से अनिश्चितता जताने की आदत समस्या बनती है
tones और grammar शुरुआती बुनियाद हैं, उसके बाद कई सालों तक ज़्यादातर मेहनत शब्द याद करने में जाती है
Chinese की असली कठिनाई shared vocabulary की कमी और ग़ैर-ध्वन्यात्मक writing system है
यह सिर्फ शब्द-स्तर पर बोलने पर ठीक काम करता है, लेकिन वाक्य-स्तर या natural speed पर काफ़ी misrecognition होते हैं
मैं Putonghua 2A certification वाला native speaker हूँ, फिर भी casual तरीके से बोलने पर errors आते हैं
मॉडल रोज़मर्रा की बातचीत और औपचारिक उच्चारण के बीच का अंतर नहीं समझ पा रहा
ताइवान में पढ़ाई करते समय tones याद रखने के लिए मैं हाथ से tone curve बनाकर अभ्यास करता था
मैं पागल विदेशी जैसा दिखता था, लेकिन असर पक्का था
regional accent का फ़र्क भी बड़ा होता है, इसलिए reference data native speakers के हिसाब से इकट्ठा करना अच्छा रहेगा
अफ़सोस है कि मैंने तब उसकी नकल नहीं की
मैं native speaker हूँ, लेकिन demo मेरा उच्चारण पहचान नहीं पाया
शायद यह background noise की वजह से था। बगल में मेरी बेटी cartoon देख रही थी
प्रोजेक्ट वाकई शानदार है, लेकिन मैं सलाह दूँगा कि बाहरी feedback पर ज़रूरत से ज़्यादा निर्भर न हों
pronunciation correction की असली कुंजी ear training है। adult learners में भी neuroplasticity बची रहती है, इसलिए minimal pair listening जैसे अभ्यासों से कान को train करना चाहिए
इससे सिर्फ pronunciation ही नहीं, बल्कि listening ability और vocabulary acquisition की speed भी बहुत सुधरती है
SST की तुलना में text-audio synchronization (karaoke style) कहीं अधिक प्रभावी रहा
जब users अपनी आवाज़ को original के ऊपर रखकर फ़र्क खुद सुनते हैं, तो वह learning के लिए बेहद उपयोगी होता है
शब्द-दर-शब्द tone याद करने के बजाय, native pronunciation को ज्यों-का-त्यों imitate करना कहीं ज़्यादा स्वाभाविक है
ONNX Runtime Web के साथ सब कुछ browser के भीतर चलना प्रभावशाली है
forced alignment के ज़रिए अर्थ का अनुमान हटाकर सिर्फ tone समस्या को अलग करना बहुत समझदारी भरा approach है
आगे के version में tone sandhi को post-processing stage में जोड़ दिया जाए, तो conversational speed practice के लिए यह और उपयोगी होगा
काश pinyin mode होता। मैं सिर्फ बोलना सीखता हूँ, characters पढ़ना नहीं
मैं अपनी flashcard webapp से vocabulary व्यवस्थित कर रहा हूँ