आज हम चीनी में खोज कार्यक्षमता की चुनौती को उजागर करना चाहते हैं। इस लेख में, हम CJK भाषा के लिए पूर्ण-पाठ खोज कार्यान्वयन की मुख्य कठिनाइयों के बारे में चर्चा करेंगे और उन्हें Manticore Search की मदद से कैसे पार किया जा सकता है।
चीनी खोज में कठिनाइयाँ
चीनी भाषा को तथाकथित CJK भाषा परिवार (चीनी, जापानी, और कोरियाई) में रखा गया है। ये शायद पूर्ण-पाठ खोज कार्यान्वयन के लिए सबसे जटिल भाषाएँ हैं क्योंकि इनमें शब्दों के अर्थ कई चेहरे-पंक्तियों के रूपों और उनकी अनुक्रमों पर निर्भर करते हैं और वर्णों को शब्दों में विभाजित नहीं किया जाता है।
चीनी भाषाओं की विशेषताएँ:
- चीनी चेहरे-पंक्तियों में कोई ऊपरी या निचली मात्रा नहीं होती। इनमें केवल एक धारण होती है, संदर्भ की परवाह किए बिना।
- अक्षरों के लिए कोई अतिरिक्त सजावट नहीं होती, जैसे कि अरबिक में, उदाहरणार्थ।
- वाक्यों में शब्दों के बीच कोई स्थान नहीं होता।
तो मुद्दा क्या है? पूर्ण-पाठ खोज में सटीक मेल खोजने के लिए, हमें tokenization की चुनौती का सामना करना पड़ता है जिसका मुख्य कार्य पाठ को निम्न-स्तरीय मूल्यताओं की इकाइयों में विभाजित करना है जिन्हें उपयोगकर्ता द्वारा खोजा जा सकता है।
चीनी का Tokenization/Segmentation
विशेष रूप से, tokenization एक अर्थपूर्ण डेटा के टुकड़े को, उदाहरण के लिए, एक शब्द को, एक अद्वितीय पहचानकर्ता में बदलने की प्रक्रिया है जिसे टोकन कहा जाता है जो प्रणाली में डेटा के एक टुकड़े का प्रतिनिधित्व करता है। पूर्ण-पाठ खोज इंजनों में टोकन मूल डेटा के लिए एक संदर्भ के रूप में कार्य करते हैं, लेकिन उपयोगकर्ता द्वारा उन वास्तविक मानों का अनुमान लगाने के लिए उपयोग नहीं किया जा सकता।
अधिकांश भाषाओं में, हम पाठ को टुकड़ों में विभाजित करने के लिए स्थानों या विशेष वर्णों का उपयोग करते हैं। हालाँकि, चीनी और अन्य CJK भाषाओं में, इसकी रूपात्मक विशेषताओं के कारण ऐसा करना संभव नहीं है। फिर भी, हमें इसे करने की आवश्यकता है। और उस प्रक्रिया को segmentation कहा जाता है।
दूसरे शब्दों में, चीनी के लिए segmentation, tokenization के लिए एक पूर्व शर्त है।
यहाँ अंग्रेज़ी और चीनी tokenization के बीच का अंतर दिखाने वाला एक उदाहरण है।
जैसा कि आप देख सकते हैं, चीनी वाक्य आधा छोटा है और इसमें कोई स्थान, अल्पविराम नहीं है, और यह शब्दों में विभाजित नहीं है, प्रत्येक शब्द यहाँ एक चेहरे-पंक्ति के चरित्र या कुछ द्वारा प्रतिनिधित्व किया गया है। यहाँ एक मात्रात्मक तुलना है:
एक और चुनौती यह है कि चीनी चेहरे-पंक्तियाँ उनके अनुक्रमों और संयोजनों के आधार पर विभिन्न अर्थों रख सकती हैं। आइए चेहरे-पंक्तियों के संयोजनों के विभिन्न अर्थों पर एक नज़र डालें:
यहाँ हम दो चेहरे-पंक्ति “简单” के संयोजन को देख सकते हैं जिसका अर्थ है “सरलता”, लेकिन यदि हम प्रत्येक चेहरे-क्रम को अलग से लें, तो उनके विभिन्न अर्थ होंगे “简” (सरल) और “单” (एकल)
कुछ मामलों में, आप जहाँ शब्दों के बीच सीमा रखते हैं वहाँ के आधार पर अर्थ भिन्न हो सकते हैं। उदाहरण के लिए:
जैसा कि आप देख सकते हैं, समस्याएँ यह हैं कि वर्णों के समूह को विभिन्न तरीकों से विभाजित किया जा सकता है, जिसके परिणामस्वरूप विभिन्न मान होते हैं।
आइए चीनी tokenization/segmentation की समस्याओं को हल करने के संभव तरीकों पर नज़र डालें।
कार्यान्वयन
चीनी पाठों के विभाजन के लिए कुछ दृष्टिकोण हैं, लेकिन मुख्य दो हैं:
- N-grams: “N” पड़ोसी चीनी वर्णों के ओवरलैपिंग समूहों को टोकन के रूप में मानता है, जहाँ “N” 1 - यूनी; 2 - बाई; 3 - ट्राई; और इसी तरह “-grams” हो सकता है।
- डिक्शनरी-आधारित: एक डिक्शनरी के आधार पर शब्द विभाजन करता है।
चीनी पाठ के विभाजन का सबसे सरल तरीका N-grams के उपयोग को मानता है। एल्गोरिदम सीधा है, लेकिन यह गुणवत्ता में कमी के लिए जाना जाता है और इसमें काफी ओवरहेड होता है जो कि संसाधित किए जा रहे पाठ की लंबाई के साथ बढ़ता है क्योंकि प्रत्येक N-gram एक अलग टोकन है, जिससे टोकनों का डिक्शनरी बड़ा होता है और खोज क्वेरी को संसाधित करना बहुत अधिक जटिल हो जाता है। यह ऐतिहासिक रूप से Manticore Search में CJK पाठों के अनुक्रमण का सामान्य तरीका था।
Manticore Search संस्करण 3.1.0 में चीनी पाठों के विभाजन का एक नया तरीका पेश किया गया जो ICU पाठ विभाजन एल्गोरिदम पर आधारित है जो दूसरे दृष्टिकोण - डिक्शनरी-आधारित विभाजन का पालन करता है।
ICU का उपयोग करने के लाभ
ICU एक ओपन-सोर्स लाइब्रेरी का सेट है जो सॉफ़्टवेयर अनुप्रयोगों के लिए यूनिकोड और वैश्वीकरण समर्थन प्रदान करता है। कई अन्य सुविधाओं के साथ, यह पाठ सीमाओं के निर्धारण का कार्य हल करता है। ICU एल्गोरिदम शब्दों, वाक्यों, पेराग्राफों की स्थिति को पाठ की एक श्रृंखला के भीतर स्थानों का पता लगाते हैं, या उन स्थानों की पहचान करते हैं जो पाठ प्रदर्शित करते समय लाइन लपेटने के लिए उपयुक्त होंगे।
Manticore में ICU विभाजन कैसे कार्य करता है, उसका एल्गोरिदम संक्षेप में इस प्रकार वर्णित किया जा सकता है:
- मूल पाठ को प्रतीकों के एक सरणी के रूप में माना जाता है।
- फिर Manticore सरणी में जाता है और यदि यह चीनी प्रतीकों का एक सेट खोजता है, तो यह उन्हें संसाधित करने के लिए ICU पुस्तकालय को पास करता है।
- चीनी पाठ के विभाजित हिस्से मूल, अनविभाजित हिस्सों को बदल देते हैं।
- अन्य प्राकृतिक भाषा प्रसंस्करण एल्गोरिदम ( charset_table , wordforms , आदि) संशोधित पाठ पर सामान्य विभाजन कार्यप्रवाह की तरह लागू किए जाते हैं।
ICU-चीनी विभाजन को सक्षम करने के लिए, निम्नलिखित अनुक्रमण कॉन्फ़िगरेशन विकल्प सेट करने की आवश्यकता है:
morphology = icu_chinese
charset_table = cjk / chinese
इंटरैक्टिव कोर्स
देखें कि यह हमारे कोर्स में कैसे काम करता है
<img src="ICU_course-1-optimized.webp" alt="img">
आप हमारे “ICU-चीनी पाठ tokenization” इंटरैक्टिव कोर्स को आजमाकर चीनी tokenization के बारे में अधिक जान सकते हैं जिसमें आसान सीखने के लिए कमांड लाइन होती है।