लैमैटाइज़ेशन सामान्यतः शब्दावली और शब्दों के रूपात्मक (morphological) विश्लेषण का उपयोग करते हुए विधिवत कार्य करने को संदर्भित करता है, जिसका लक्ष्य केवल रूप-परिवर्तनात्मक अंत हटाकर शब्द के मूल या शब्दकोशीय रूप, जिसे लेम्मा कहा जाता है, को लौटाना होता है
दूसरे शब्दों में, किसी दस्तावेज़ का लैमैटाइज़ेशन करना सही ढंग से कार्य करना है, क्योंकि इसमें शब्दावली का उपयोग और शब्दों का रूपात्मक विश्लेषण शामिल होता है ताकि केवल रूप-परिवर्तनात्मक अंत हटाकर शब्द का मूल या शब्दकोशीय रूप, जिसे “लेम्मा” कहा जाता है, लौटाया जा सके। उदाहरण के लिए, आप उम्मीद कर सकते हैं कि लैमैटाइज़ेशन एल्गोरिद्म “runs”, “running” और “ran” को लेम्मा “run” पर मैप करेगा.
लैमैटाइज़ेशन के फायदे
- सटीकता: लैमैटाइज़ेशन केवल शब्दों को काटता नहीं है जैसा कि स्टेमिंग एल्गोरिद्म में देखा जाता है। लेम्मा निकालते समय संदर्भ को ध्यान में रखने के लिए शब्द के POS के आधार पर विश्लेषण किया जाता है। साथ ही, लैमैटाइज़ेशन वास्तविक शब्दकोशीय शब्दों को उत्पन्न करता है।
लैमैटाइज़ेशन की कमियाँ
- समय-लेवा: स्टेमिंग की तुलना में, लैमैटाइज़ेशन धीमी और समय लेने वाली प्रक्रिया है। इसका कारण है कि इसमें रूपात्मक विश्लेषण करना और शब्दों का अर्थ शब्दकोश से निकालना शामिल होता है.
NLTK के साथ Python में स्टेमिंग और लैमैटाइज़ेशन के उदाहरण
अब आपके पास स्टेमिंग और लैमैटाइज़ेशन का एक अवलोकन है। इस खंड में, हम व्यवहारिक रूप से Python और NLTK नामक लाइब्रेरी का उपयोग करके दोनों तकनीकों के उदाहरण दिखाएंगे.
Python NLTK पैकेज
Natural Language Tool Kit (NLTK) एक Python लाइब्रेरी है जिसका उपयोग प्राकृतिक भाषा को प्रोसेस करने में सक्षम प्रोग्राम बनाने के लिए किया जाता है। यह लाइब्रेरी टोकनाइज़ेशन, स्टेमिंग, वर्गीकरण, पार्सिंग, टैगिंग, सिमेंटिक रीजनिंग, भाव विश्लेषण आदि जैसे विभिन्न कार्य कर सकती है।
नवीनतम संस्करण NLTK 3.9.x है, और इसे Python 3.10 या उच्चतर (3.14 तक) की आवश्यकता होती है, लेकिन आपको इसकी चिंता नहीं करनी चाहिए क्योंकि यह DataLab वर्कबुक में प्रीइंस्टॉल आता है—बस nltk इम्पोर्ट करें और आप तैयार हैं।
Python स्टेमिंग उदाहरण
सबसे लोकप्रिय स्टेमिंग एल्गोरिद्म में से एक “Porter stemmer” कहलाता है। Porter stemmer को पहली बार मार्टिन पोर्टर ने 1980 के पेपर "An algorithm for suffix stripping" में प्रस्तावित किया था। यह पेपर अंग्रेज़ी में स्टेमिंग के लिए सबसे सामान्य एल्गोरिद्म में से एक बन गया है।
आइए देखें यह कैसे काम करता है:
import nltk
from nltk.stem import PorterStemmer
nltk.download("punkt_tab") # Use punkt_tab in NLTK 3.9+; punkt is deprecated
# Initialize Python porter stemmer
ps = PorterStemmer()
# Example inflections to reduce
example_words = ["program","programming","programer","programs","programmed"]
# Perform stemming
print("{0:20}{1:20}".format("--Word--","--Stem--"))
for word in example_words:
print ("{0:20}{1:20}".format(word, ps.stem(word)))
"""
--Word-- --Stem--
program program
programming program
programer program
programs program
programmed program
"""
यह काफी सरल उदाहरण है; “स्टेमिंग” खंड में बताए अनुसार हमने अपने Porter stemmer से यही परिणाम अपेक्षित किए थे.
आइए एक पेचीदा उदाहरण आज़माएँ:
import string
from nltk.tokenize import word_tokenize
example_sentence = "Python programmers often tend like programming in python because it's like english. We call people who program in python pythonistas."
# Remove punctuation
example_sentence_no_punct = example_sentence.translate(str.maketrans("", "", string.punctuation))
# Create tokens
word_tokens = word_tokenize(example_sentence_no_punct)
# Perform stemming
print("{0:20}{1:20}".format("--Word--","--Stem--"))
for word in word_tokens:
print ("{0:20}{1:20}".format(word, ps.stem(word)))
"""
--Word-- --Stem--
Python python
programmers programm
often often
tend tend
like like
programming program
in in
python python
because becaus
its it
like like
english english
We we
call call
people peopl
who who
program program
in in
python python
pythonistas pythonista
"""
यहाँ आप देख सकते हैं कि कुछ आउटपुट शब्द अंग्रेज़ी शब्दकोश का हिस्सा नहीं हैं (जैसे “becaus”, “peopl” और “programm.”)। एक और बात ध्यान देने योग्य है कि संदर्भ पर विचार नहीं किया गया। उदाहरण के लिए, “programmers” बहुवचन संज्ञा है, लेकिन इसे घटाकर “program” कर दिया गया, जो संज्ञा या क्रिया—दोनों हो सकता है—अर्थात् मूल शब्द अस्पष्ट हैं.
Python लैमैटाइज़ेशन उदाहरण
संदर्भ-संवेदी लैमैटाइज़र के पीछे का उद्देश्य अनदेखे और अस्पष्ट शब्दों पर प्रदर्शन में सुधार करना था। अपने लैमैटाइज़ेशन उदाहरण में, हम WordNet lemmatizer नामक एक लोकप्रिय लैमैटाइज़र का उपयोग करेंगे.
WordNet अंग्रेज़ी भाषा के लिए एक बड़ा, निःशुल्क और सार्वजनिक रूप से उपलब्ध शब्दावली डेटाबेस है, जिसका उद्देश्य शब्दों के बीच संरचित सिमेंटिक संबंध स्थापित करना है।
आइए इसे क्रिया में देखें:
from nltk.stem import WordNetLemmatizer
nltk.download("wordnet")
nltk.download("omw-1.4")
# Initialize wordnet lemmatizer
wnl = WordNetLemmatizer()
# Example inflections to reduce
example_words = ["program","programming","programer","programs","programmed"]
# Perform lemmatization
print("{0:20}{1:20}".format("--Word--","--Lemma--"))
for word in example_words:
# pos="v" tells the lemmatizer to treat words as verbs
# Other options: "n" (noun), "a" (adjective), "r" (adverb)
print("{0:20}{1:20}".format(word, wnl.lemmatize(word, pos="v")))
"""
--Word-- --Lemma--
program program
programming program
programer programer
programs program
programmed program
"""
यदि इनपुट शब्द WordNet में नहीं मिलता है तो हमारा लैमैटाइज़र उसे अपरिवर्तित छोड़ देगा। इसका मतलब है कि संदर्भ प्रदान करना आवश्यक है, जो wordnet_lemmatizer.lemmatize में पार्ट-ऑफ-स्पीच पैरामीटर pos का मान देकर किया जाता है।
ध्यान दें कि “programmer” शब्द को हमारे लैमैटाइज़र ने “program” में नहीं घटाया: इसका कारण है कि हमने लैमैटाइज़र को केवल क्रियाओं को स्टेम (वास्तव में लेम्मा) करने के लिए कहा था.
आइए अपने लैमैटाइज़र को कुछ और जटिल दें और देखें यह कैसा प्रदर्शन करता है…
example_sentence = "Python programmers often tend like programming in python because it's like english. We call people who program in python pythonistas."
# Remove punctuation
example_sentence_no_punct = example_sentence.translate(str.maketrans("", "", string.punctuation))
word_tokens = word_tokenize(example_sentence_no_punct)
# Perform lemmatization
print("{0:20}{1:20}".format("--Word--","--Lemma--"))
for word in word_tokens:
print ("{0:20}{1:20}".format(word, wnl.lemmatize(word, pos="v")))
"""
--Word-- --Lemma--
Python Python
programmers programmers
often often
tend tend
like like
programming program
in in
python python
because because
its its
like like
english english
We We
call call
people people
who who
program program
in in
python python
pythonistas pythonistas
"""
लैमैटाइज़ेशन एल्गोरिद्म द्वारा लौटाए गए सभी शब्द अंग्रेज़ी शब्दकोश के हैं—“pythonistas” को छोड़कर, जो अधिक अनौपचारिक शब्द है और Python प्रोग्रामरों के लिए प्रयुक्त होता है.
Stemming बनाम Lemmatization
आपने दोनों तकनीकों को लागू करना देख लिया है, लेकिन वे एक-दूसरे की तुलना में कैसी हैं?
स्टेमिंग और लैमैटाइज़ेशन दोनों टेक्स्ट-प्रोसेसिंग तकनीकें हैं जिनका उद्देश्य रूप-परिवर्तित शब्दों को एक सामान्य मूल तक घटाना है। व्यापक उद्देश्य में समानता होने के बावजूद, दोनों तकनीकें समान नहीं हैं.
स्टेमिंग और लैमैटाइज़ेशन के बीच मुख्य अंतर इस बात में है कि प्रत्येक तकनीक रूप-परिवर्तित शब्दों को सामान्य मूल तक घटाने के उद्देश्य तक कैसे पहुँचती है.
स्टेमिंग एल्गोरिद्म विभिन्न रूप-परिवर्तनों के सामान्य मूल खोजने के लिए शब्द के अंत या शुरुआत को काटते हैं। यह काट-छांट प्रायः उन सामान्य उपसर्गों और प्रत्ययों की सूची पर आधारित होती है जो रूप-परिवर्तित शब्दों में मिलते हैं। शब्दों को बिना भेदभाव के काटने का यह तरीका कभी-कभी अर्थपूर्ण स्टेम तक पहुँचाता है, तो कभी नहीं.
दूसरी ओर, लैमैटाइज़ेशन एल्गोरिद्म रूपात्मक विश्लेषण करके रूप-परिवर्तित शब्दों से सामान्य मूल खोजने का प्रयास करते हैं। रूप-परिवर्तनों को सटीक रूप से घटाने के लिए एक विस्तृत शब्दकोश बनाए रखना आवश्यक है, ताकि एल्गोरिद्म उसमें खोज कर किसी रूप-परिवर्तित शब्द को उसके लेम्मा से जोड़ सके।
दोनों में यह फर्क भी हो सकता है कि स्टेमिंग प्रायः व्युत्पन्न रूप से संबंधित शब्दों को समेटती है, जबकि लैमैटाइज़ेशन सामान्यतः किसी लेम्मा के केवल विभिन्न रूप-परिवर्तनात्मक रूपों को समेटती है।
स्टेमिंग एल्गोरिद्म का मोटा-सा हेयुरिस्टिक दृष्टिकोण आमतौर पर उन्हें तेज़ और कुशल बनाता है, लेकिन वे हमेशा सटीक नहीं होते। इसके विपरीत, लैमैटाइज़ेशन एल्गोरिद्म सटीकता के लिए गति और दक्षता का त्याग करते हैं, और इस प्रकार अर्थपूर्ण मूल लौटाते हैं.
उदाहरण के लिए, कोई स्टेमिंग एल्गोरिद्म “saw” को घटाकर “s.” कर सकता है। लैमैटाइज़ेशन एल्गोरिद्म यह विचार करेगा कि संदर्भ के आधार पर “saw” संज्ञा (लकड़ी काटने का औज़ार) है या क्रिया (to see का भूतकाल) है, फिर लेम्मा लौटाने का निर्णय करेगा—यदि यह संज्ञा है तो “saw” लौटाएगा, और यदि क्रिया है तो “see” लौटाएगा।
ये बातें अब तक आपके लिए काफ़ी स्पष्ट हो गई होंगी, तो अब करोड़ों का प्रश्न—“टेक्स्ट प्रीप्रोसेसिंग के लिए मुझे स्टेमिंग उपयोग करनी चाहिए या लैमैटाइज़ेशन?”
जैसा कि सॉफ़्टवेयर से जुड़ी अधिकांश बातों में होता है; यह निर्भर करता है.
क्या आप गति और दक्षता की परवाह करते हैं? तो स्टेमिंग चुनें.
क्या आपके अनुप्रयोग के लिए संदर्भ महत्वपूर्ण है? यदि आपका उत्तर “हाँ” है, तो लैमैटाइज़ेशन का उपयोग करें।
आप किस तकनीक का उपयोग करते हैं, यह पूरी तरह उस अनुप्रयोग और आपके परियोजना के लक्ष्यों पर निर्भर करता है। आप दोनों तकनीकों के साथ प्रयोग चलाकर और परिणामों की तुलना करके देख सकते हैं कि कौन-सा तरीका आपके लक्ष्यों के साथ अधिक मेल खाता है.
एक बात जिस पर हमने इस ट्यूटोरियल में अधिक चर्चा नहीं की, वह है लैमैटाइज़ेशन एल्गोरिद्म कैसे बनाए जाते हैं; इसका कारण यह है कि कई लाइब्रेरियाँ (जैसे SpaCy, NLTK, आदि) विभिन्न भाषाओं के लिए उपलब्ध हैं। हालांकि, यदि आपको किसी अनुपलब्ध भाषा (जैसे Akan) के लिए अपना स्वयं का लैमैटाइज़र बनाना पड़े, तो लक्षित भाषा का अच्छा ज्ञान और समझ आवश्यक होगी। ऐसे परिदृश्यों में स्टेमिंग एल्गोरिद्म बनाना कहीं आसान होता है।
| Stemming | Lemmatization | |
|---|---|---|
| Speed | Fast | Slow |
| Accuracy | Lower | Higher |
| Output | May not be a real word | Always a real word |
| Uses context? | No | Yes |
| Best for | Search engines, spam filters | Chatbots, sentiment analysis, QA |
निष्कर्ष
संक्षेप में, स्टेमिंग और लैमैटाइज़ेशन NLP में टेक्स्ट प्रोसेसिंग के लिए इस्तेमाल की जाने वाली तकनीकें हैं। दोनों का लक्ष्य रूप-परिवर्तनों को सामान्य मूल शब्दों तक घटाना है, लेकिन दोनों यह काम अलग-अलग तरीकों से करती हैं.
लैमैटाइज़ेशन, स्टेमिंग की तुलना में कहीं अधिक सटीक है। यह हमेशा वास्तविक शब्दकोशीय शब्द लौटाता है और संदर्भ को ध्यान में रखता है। अधिकांश आधुनिक NLP पाइपलाइनों में, जब सटीकता मायने रखती है, तो लैमैटाइज़ेशन को प्राथमिकता दी जाती है। हालांकि, यदि आप बड़े पैमाने पर काम कर रहे हैं या एक त्वरित प्रोटोटाइप बना रहे हैं, तो स्टेमिंग पर्याप्त हो सकती है और काफ़ी तेज़ भी।

FAQs
क्या NLTK के stemmer और lemmatizer का उपयोग करने के लिए मुझे कुछ अतिरिक्त डाउनलोड करना होगा?
Porter Stemmer के लिए, NLTK इंस्टॉल करने के अलावा किसी अतिरिक्त डाउनलोड की आवश्यकता नहीं है। WordNet Lemmatizer के लिए, उपयोग से पहले आपको एक बार nltk.download("wordnet") और nltk.download("omw-1.4") चलाना होगा। टोकनाइज़ेशन के लिए, NLTK 3.9+ में आपको nltk.download("punkt_tab") भी चाहिए।
मेरा lemmatizer वही शब्द क्यों लौटाता है जो मैंने इनपुट में दिया था, बिना किसी बदलाव के?
आम तौर पर इसका एक कारण यह होता है कि या तो शब्द WordNet के शब्दकोश में नहीं मिला, या आपने सही pos (part-of-speech) पैरामीटर निर्दिष्ट नहीं किया। उदाहरण के लिए, wnl.lemmatize("running") डिफ़ॉल्ट रूप से “running” लौटाता है क्योंकि यह संज्ञा मानता है। इसे क्रिया मानने के लिए pos="v" पास करें और बदले में “run” पाएँ।
खोज इंजनों के लिए स्टेमिंग बेहतर है या लैमैटाइज़ेशन?
खोज इंजनों के लिए सामान्यतः स्टेमिंग को प्राथमिकता दी जाती है क्योंकि उस पैमाने पर गति, पूर्ण सटीकता से अधिक मायने रखती है। जब कोई उपयोगकर्ता "running shoes" खोजता है, तो आप "run", "runner" और "runs" के परिणाम शीघ्रता से लौटाना चाहते हैं। कभी-कभार गैर-शब्दकोशीय स्टेम उपयोगकर्ता अनुभव को बहुत प्रभावित नहीं करता। अधिकांश खोज उपयोग मामलों के लिए लैमैटाइज़ेशन आवश्यकता से अधिक होता है।
क्या मैं इन तकनीकों को अंग्रेज़ी के अलावा अन्य भाषाओं में उपयोग कर सकता/सकती हूँ?
हाँ, लेकिन कठिनाई अलग-अलग होगी। NLTK में बॉक्स से बाहर अन्य भाषाओं के लिए सीमित समर्थन है। व्यापक बहुभाषी समर्थन के लिए spaCy या Stanza जैसी लाइब्रेरियाँ बेहतर विकल्प हैं—विशेषकर spaCy में जर्मन, फ्रेंच, स्पेनिश, पुर्तगाली और अन्य भाषाओं के लिए मज़बूत लैमैटाइज़ेशन समर्थन है। किसी कम-संसाधन भाषा (जैसे Akan) के लिए अपना स्टेमर या लैमैटाइज़र बनाना उस भाषा की रूपविज्ञान की गहन समझ मांगता है।
क्या लैमैटाइज़ेशन हमेशा स्टेमिंग से बेहतर NLP मॉडल परिणाम देता है?
ज़रूरी नहीं। यह आपके कार्य और डेटा सेट पर निर्भर करता है। जिन कार्यों में सटीक शब्दार्थ मायने रखता है—जैसे प्रश्नोत्तरी, भाव विश्लेषण या चैटबॉट्स—लैमैटाइज़ेशन सामान्यतः बेहतर प्रदर्शन करता है। जबकि सरल कार्यों, जैसे दस्तावेज़ वर्गीकरण या कीवर्ड निष्कर्षण में, स्टेमिंग अक्सर बहुत कम लागत पर उतने ही अच्छे परिणाम देती है। सबसे सुरक्षित तरीका है कि दोनों को परखें और अपने विशेष डेटा पर परिणामों की तुलना करें।
आधुनिक अंग्रेज़ी भाषा को कम रूप-परिवर्तन वाली (weakly inflected) भाषा माना जाता है। इसका अर्थ है कि अंग्रेज़ी में कई शब्द किसी अन्य शब्द से व्युत्पन्न होते हैं; उदाहरण के लिए, रूप-परिवर्तित शब्द “normality” मूल रूप “norm” से निकला है। सभी रूप-परिवर्तित भाषाओं में सामान्य मूल रूप वाले शब्द होते हैं, लेकिन रूप-परिवर्तन की मात्रा भाषा के अनुसार भिन्न होती है.
पाठ के साथ काम करते समय, कई बार शब्दों को उनके व्युत्पन्न रूपों से वापस मूल रूप में लाने के लिए सामान्यीकरण तकनीकें लागू करना आवश्यक होता है। इससे यादृच्छिकता कम होती है और कॉर्पस के शब्द पूर्वनिर्धारित मानक के करीब आते हैं, जिससे प्रसंस्करण दक्षता में सुधार होता है क्योंकि कंप्यूटर को कम विशेषताओं से निपटना पड़ता है.
Natural Language Processing (NLP) में पाठ सामान्यीकरण की दो सबसे लोकप्रिय तकनीकें स्टेमिंग और लैमैटाइज़ेशन हैं.
शोधकर्ता इन तकनीकों का वर्षों से अध्ययन करते आए हैं; NLP प्रैक्टिशनर सामान्यतः इन्हें विभिन्न कार्यों में शब्दों, पाठ और दस्तावेज़ों को आगे की प्रोसेसिंग के लिए तैयार करने में उपयोग करते हैं.
यह ट्यूटोरियल Python Natural Language ToolKit (NLTK) पैकेज का उपयोग करते हुए व्यावहारिक दृष्टिकोण से स्टेमिंग और लैमैटाइज़ेशन को कवर करेगा।
इस ट्यूटोरियल के सभी कोड का अवलोकन करने के लिए यह DataLab वर्कबुक देखें। कोड संपादित और चलाने के लिए, वर्कबुक की एक कॉपी बनाएं और उसमें यह कोड चलाएं।
Stemming क्या है?
स्टेमिंग एक तकनीक है जो रूप-परिवर्तित (inflected) शब्द को घटाकर उसके शब्द-स्टेम तक ले आती है। उदाहरण के लिए, “programming”, “programmer” और “programs” को घटाकर सामान्य शब्द-स्टेम “program” तक लाया जा सकता है। दूसरे शब्दों में, “program” को इन तीनों रूप-परिवर्तित शब्दों के समानार्थी के रूप में इस्तेमाल किया जा सकता है.
यह टेक्स्ट-प्रोसेसिंग तकनीक विरलता (sparsity) से निपटने और/या शब्दावली का मानकीकरण करने में उपयोगी होती है। यह न केवल अनावश्यकता को कम करती है—क्योंकि प्रायः शब्द-स्टेम और उनके रूप-परिवर्तित रूपों का अर्थ समान होता है—बल्कि यह NLP मॉडलों को रूप-परिवर्तित शब्दों और उनके स्टेम के बीच संबंध सीखने देती है, जिससे मॉडल समान संदर्भों में उनके उपयोग को बेहतर समझता है.
स्टेमिंग एल्गोरिद्म प्रायः रूप-परिवर्तित शब्दों में पाए जाने वाले बार-बार आने वाले उपसर्गों और प्रत्ययों की सूची का उपयोग करते हुए शब्द के आरंभ या अंत को काटने पर काम करते हैं। कभी-कभी इससे ऐसे शब्द-स्टेम मिलते हैं जो वास्तविक शब्द नहीं होते—यह एक सीमा है जिसे हम आगे कवर करेंगे।
स्टेमिंग के फायदे
स्टेमिंग की कमियाँ
Lemmatization क्या है?
लैमैटाइज़ेशन एक और तकनीक है जो रूप-परिवर्तित शब्दों को उनके मूल शब्द तक घटाती है। यह किसी रूप-परिवर्तित शब्द के अभिप्रेत अर्थ के आधार पर उसका “लेम्मा” (शब्दकोशीय रूप) पहचानने की एल्गोरिद्मिक प्रक्रिया का वर्णन करती है.
स्टेमिंग के विपरीत, लैमैटाइज़ेशन संदर्भ के आधार पर शब्द के आशयित पार्ट-ऑफ-स्पीच और अर्थ का सटीक निर्धारण करती है। यानी यह इस बात पर विचार करती है कि रूप-परिवर्तित शब्द वाक्य में कहाँ आता है, साथ ही उस वाक्य के व्यापक संदर्भ—पड़ोसी वाक्यों या पूरे दस्तावेज़—को भी ध्यान में रखती है।