कोड-मिक्सिंग: हिंग्लिश और उसके साथी
लोग अक्सर एक ही वाक्य में कई भाषाएँ मिला देते हैं और उन्हें रोमन अक्षरों में टाइप करते हैं। सीखें कि ऐसे मिले-जुले इनपुट को कैसे संभालें, उसे सावधानी से नॉर्मलाइज़ करें, और असली वाक्यों के साथ टेस्ट करें।
60 सेकंड में
कोड-मिक्सिंग: हिंग्लिश और उसके साथी
लोग अक्सर एक ही वाक्य में कई भाषाएँ मिला देते हैं और उन्हें रोमन अक्षरों में टाइप करते हैं। सीखें कि ऐसे मिले-जुले इनपुट को कैसे संभालें, उसे सावधानी से नॉर्मलाइज़ करें, और असली…
मिला-जुला इनपुट कैसा दिखता है
| पैटर्न | उदाहरण | इसे समझना मुश्किल क्यों है |
|---|---|---|
| मिले-जुले शब्द | "Mera order cancel kar do" | मॉडल को एक साथ दो भाषाओं के शब्दों को समझना होता है |
| रोमनाइज़्ड लिपि | "kya aap delivery date bata sakte ho" | रोमन अक्षरों में लिखी गई कोई भारतीय भाषा, जिसकी कोई तय स्पेलिंग नहीं होती |
| मिली-जुली लिपियाँ | "मेरा order अभी तक नहीं आया" | एक ही वाक्य में दो लिपियाँ |
| स्पेलिंग के अलग-अलग रूप | "nahi" / "nahin" / "nai" / "nhi" | एक ही शब्द की कई तरह की स्पेलिंग |
| चैट स्टाइल | "plz jaldi bhejo!!! 😡" | शॉर्ट फॉर्म, दोहराए गए अक्षर, इमोजी और विराम चिह्न |
सावधानी से नॉर्मलाइज़ करना
import re
import unicodedata
# A small, hand-checked list. Real systems learn variants from real user data.
VARIANTS = {
"nahin": "nahi", "nai": "nahi", "nhi": "nahi",
"kyaa": "kya",
"h": "hai",
"pls": "please", "plz": "please",
}
def normalise(text: str) -> str:
text = unicodedata.normalize("NFC", text).lower() # same letters, same code points
text = re.sub(r"(.)\1{2,}", r"\1\1", text) # "bohottt" -> "bohott"
# Remove punctuation and emoji by Unicode category, so Indic vowel signs survive.
text = "".join(" " if unicodedata.category(c)[0] in "PS" else c for c in text)
return " ".join(VARIANTS.get(w, w) for w in text.split())
for msg in ["Mera order abhi tak nahin aaya!!!", "order nhi aaya h, plz check",
"Order NAI aayaaa 😡", "मेरा ऑर्डर नहीं आया"]:
print(f"{msg!r:40} -> {normalise(msg)!r}")- भारतीय लिपियों के लिए Unicode NFC बहुत ज़रूरी है: कुछ अक्षरों को एक से ज़्यादा तरीकों से स्टोर किया जा सकता है (उदाहरण के लिए नुक्ते वाला अक्षर), और NFC दोनों रूपों को एक जैसा बना देता है।
- Unicode कैटेगरी के हिसाब से विराम चिह्नों को हटाने से भारतीय भाषाओं की मात्राएँ बची रहती हैं। पायथन के
reमें\w+जैसे आसान पैटर्न भारतीय शब्दों को टुकड़ों में काट सकते हैं। - वेरिएंट लिस्ट जानबूझकर बहुत छोटी रखी गई है। हर एंट्री की जाँच उस भाषा को बोलने वाले व्यक्ति से करवाई जानी चाहिए।
ऐप में मिले-जुले इनपुट को संभालना
- 1
इसे स्वीकार करें
यूज़र्स को कोई एक भाषा या लिपि चुनने के लिए मजबूर न करें। उन्हें उसी तरह लिखने दें जैसे वे बात करते हैं। - 2
असली टेक्स्ट को सुरक्षित रखें
यूज़र ने जो लिखा है उसे स्टोर करें। सर्च और मैचिंग के लिए नॉर्मलाइज़ की गई कॉपी का इस्तेमाल करें। - 3
उन्हीं के स्टाइल में जवाब दें
यूज़र ने जिस भाषा और लिपि का इस्तेमाल किया है, उसी में जवाब दें, या उन्हें चुनने का विकल्प दें। टेस्ट करें कि मॉडल ऐसा कर रहा है या नहीं। - 4
नामों और नंबरों को सुरक्षित रखें
नामों, ऑर्डर आईडी, रकम या फ़ोन नंबरों को ट्रांसलिट्रेट या "सही" न करें। - 5
असली वाक्यों के साथ टेस्ट करें
अपना टेस्ट सेट असली, सहमति से लिए गए और व्यक्तिगत पहचान हटाए गए (anonymised) यूज़र मैसेज से तैयार करें, न कि सिर्फ किताबी वाक्यों से।
- सिर्फ एक ही लिपि में साफ-सुथरे वाक्य
- मीटिंग में डेवलपर्स द्वारा लिखे गए
- हर शब्द की सिर्फ एक स्पेलिंग
- मिली-जुली भाषाएँ, मिली-जुली लिपियाँ, इमोजी और शॉर्ट फॉर्म
- असली मैसेज से लिए गए, पर्सनल डेटा हटाकर और इस्तेमाल करने की अनुमति के साथ
- अलग-अलग इलाकों से आए आम शब्दों की कई स्पेलिंग
और देखें और पढ़ें
लैब
एक 20-वाक्यों का कोड-मिक्स टेस्ट सेट, जिसमें एक नॉर्मलाइज़र शामिल हो जिसे आपने आगे बढ़ाया और जाँचा हो।
समस्या
किसी ऐसे शहर के लिए फ़ूड डिलीवरी ऐप के सपोर्ट बॉट की कल्पना करें जिसे आप जानते हैं।
- ग्राहकों के 20 ऐसे स्वाभाविक मैसेज लिखें जैसे लोग वास्तव में टाइप करते हैं: मिली-जुली भाषाएँ, रोमनाइज़्ड और अपनी लिपि, शॉर्ट फॉर्म, इमोजी। असली लोगों के मैसेज कॉपी न करें।
- प्रत्येक के लिए, इंटेंट (उदाहरण के लिए: देर से आया ऑर्डर, रिफ़ंड, गलत सामान) और कोई भी मुख्य जानकारी (ऑर्डर आईडी, रकम) लिखें।
- पाठ में दिए गए नॉर्मलाइज़र को इन सभी 20 पर चलाएँ। लिस्ट में ज़्यादा से ज़्यादा पाँच नए वेरिएंट जोड़ें, और उस भाषा को बोलने वाले व्यक्ति से हर एक की जाँच कराएँ।
- कम से कम दो ऐसे मैसेज खोजें जहाँ नॉर्मलाइज़ेशन ने कुछ ज़रूरी बदल दिया हो या खो दिया हो। समझाएँ कि क्या गड़बड़ हुई।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आपका इंटेंट क्लासिफ़ायर देवनागरी हिंदी पर तो अच्छा काम करता है लेकिन रोमनाइज़्ड हिंदी पर खराब। इसे ठीक करने के दो अलग-अलग तरीके और हर एक का एक जोखिम बताइए।दिखाएं
(1) क्लासिफ़ाई करने से पहले रोमनाइज़्ड इनपुट को देवनागरी में ट्रांसलिट्रेट करें। जोखिम: अंग्रेज़ी शब्द, नाम और अलग-अलग स्पेलिंग गलत बदल सकते हैं। (2) ट्रेनिंग या टेस्ट डेटा में रोमनाइज़्ड उदाहरण जोड़ें, या ऐसे मॉडल का इस्तेमाल करें जो दोनों को संभाल सके। जोखिम: आपको सहमति के साथ जुटाए गए पर्याप्त असली और अलग-अलग तरह के उदाहरणों की ज़रूरत होगी। दोनों को एक असली रोमनाइज़्ड टेस्ट सेट पर टेस्ट करें।
Q2किसी कोड-मिक्स चैटबॉट का मूल्यांकन केवल इस आधार पर करना जोखिम भरा क्यों है कि वह कितनी बार "सही" भाषा में जवाब देता है?दिखाएं
भाषा का चुनाव क्वालिटी का सिर्फ एक छोटा सा हिस्सा है। जवाब सही भाषा में होने के बावजूद गलत, रूखा या यूज़र की समस्या को नज़रअंदाज़ करने वाला हो सकता है। इसके अलावा, "सही" भाषा यूज़र की पसंद पर भी निर्भर कर सकती है। टास्क की सफलता और जवाब के सही होने को भी मापें, और यूज़र्स से पूछें कि वे क्या पसंद करते हैं।
अक्सर पूछे जाने वाले सवाल
क्या कोड-मिक्सिंग कमज़ोर भाषा कौशल की निशानी है?
नहीं। द्विभाषी (दो भाषाएँ बोलने वाले) लोगों पर अध्ययन करने वाले शोधकर्ता कोड-मिक्सिंग को बातचीत का एक सामान्य और अक्सर कुशल तरीका मानते हैं। प्रोडक्ट्स को इसका समर्थन करना चाहिए, इसे सुधारने की कोशिश नहीं करनी चाहिए।
अगर यूज़र हिंग्लिश में लिखता है, तो क्या मेरे बॉट को भी हिंग्लिश में जवाब देना चाहिए?
अक्सर हाँ, क्योंकि यह स्वाभाविक लगता है। लेकिन कुछ यूज़र्स अपनी भाषा की मूल लिपि में या अंग्रेज़ी में जवाब पाना पसंद करते हैं। यूज़र्स के साथ टेस्ट करें और उन्हें खुद चुनने का विकल्प देने पर विचार करें।
पहले सब कुछ भारतीय लिपि में ट्रांसलिट्रेट ही क्यों न कर लिया जाए?
यह कुछ कामों में मदद कर सकता है, लेकिन गड़बड़ भी हो सकती है: अंग्रेज़ी शब्द, नाम और ब्रांड के नाम अजीब तरीके से बदल सकते हैं, और अलग-अलग स्पेलिंग से अलग नतीजे मिलते हैं। इसे किसी असली टेस्ट सेट पर आज़माएँ और असली टेक्स्ट को सुरक्षित रखें।
प्राइवेसी का उल्लंघन किए बिना मैं असली वाक्य कैसे जुटा सकता हूँ?
यूज़र्स से अनुमति लें, किसी के भी डेटा पढ़ने से पहले नाम, फ़ोन नंबर, पते और आईडी हटा दें, केवल वही रखें जिसकी आपको ज़रूरत है, और इसे सुरक्षित रूप से स्टोर करें। अगला पाठ सहमति पर और गहराई से चर्चा करता है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।