एनएलटीके के साथ पीओएस टैगिंग और एनएलपी में चंकिंग [उदाहरण]

⚡ स्मार्ट सारांश

POS टैगिंग वाक्य के प्रत्येक शब्द को एक शब्द भेद प्रदान करती है, जबकि चंकिंग उन टैग किए गए शब्दों को संज्ञा वाक्यांशों जैसे सार्थक वाक्यांशों में समूहित करती है, जिससे सतही संरचना जुड़ जाती है जिसे NLTK नियमित अभिव्यक्तियों के साथ बनाता है। Python.

  • पीओएस टैगिंग: प्रत्येक शब्द को उसके संदर्भ से NN, VB, या JJ जैसे व्याकरणिक चिह्न प्राप्त होते हैं।
  • 🌿 चंकिंग: टैग किए गए शब्दों को वाक्यांशों में समूहित किया जाता है, इस प्रक्रिया को शैलो पार्सिंग भी कहा जाता है।
  • 🔤 कार्यप्रवाह: पहले टेक्स्ट को टोकनाइज़ करें, फिर pos_tag लागू करें, और फिर RegexpParser व्याकरण के साथ पार्स करें।
  • 📊 टैगों की गिनती: काउंटर और फ्रीक्वडिस्ट फीचर इंजीनियरिंग के लिए टैग और शब्द आवृत्तियों को प्रकट करते हैं।
  • 🔗 सहस्थापन: बिग्राम और ट्रिग्राम मजबूत टेक्स्ट विशेषताओं के लिए शब्द युग्मों और त्रिकों को कैप्चर करते हैं।
  • 🤖 एआई का उपयोग: मशीन लर्निंग और एचएमएम-आधारित टैगर संभाव्यता के आधार पर अस्पष्ट शब्दों को संभालते हैं।

एनएलपी में एनएलटीके और चंकिंग के साथ पीओएस टैगिंग

पीओएस टैगिंग

पीओएस टैगिंग (पार्ट्स ऑफ स्पीच टैगिंग) एक ऐसी प्रक्रिया है जिसमें शब्दों को उनके अर्थ और संदर्भ के आधार पर किसी विशेष शब्द भेद के रूप में चिह्नित किया जाता है। यह किसी भाषा में पाठ को पढ़कर प्रत्येक शब्द को एक विशिष्ट शब्द भेद प्रदान करने का कार्य करता है। इसे व्याकरणिक टैगिंग भी कहा जाता है।

आइए एनएलटीके के एक उदाहरण से सीखते हैं:

Input: Everything to permit us.
Output: [('Everything', NN),('to', TO), ('permit', VB), ('us', PRP)]

पीओएस टैगिंग उदाहरण में शामिल चरण

  • पाठ को टोकनाइज़ करें (word_tokenize)
  • उपरोक्त चरण में pos_tag लागू करें, यानी nltk.pos_tag(tokenize_text)

नीचे NLTK POS टैग के उदाहरण दिए गए हैं:

संक्षिप्त अर्थ
CC समन्वय संयोजन
CD कार्डिनल अंक
DT निर्धारक
EX वहाँ अस्तित्ववादी
FW विदेशी शब्द
IN पूर्वसर्ग/अधीनस्थ संयोजन
JJ विशेषण
जेजेआर विशेषण, तुलनात्मक
जेजेएस विशेषण, अतिशयोक्ति
LS सूची बाजार
MD मोडल
NN संज्ञा, एकवचन
एनएनएस संज्ञा बहुवचन
एनएनपी व्यक्तिवाचक संज्ञा, एकवचन
एनएनपीएस विशेष संज्ञा, बहुवचन
पीडीटी पूर्व-निर्धारक
स्थिति अधिकारवाचक अंत
पीआरपी व्यक्तिगत सर्वनाम
पीआरपी$ अधिकार सर्वनाम
RB क्रिया विशेषण
आरबीआर क्रियाविशेषण, तुलनात्मक
आरबीएस क्रियाविशेषण, अतिशयोक्ति
RP कण
सेवा मेरे अनंत मार्कर
UH विस्मयादिबोधक
VB क्रिया
वीबीजी क्रिया (जेरंड)
वीबीडी क्रिया का भूतकाल
वीबीएन क्रिया भूतकालिक कृदंत
वीबीपी क्रिया, वर्तमान काल (तीसरे व्यक्ति एकवचन नहीं)
वीबीजेड क्रिया, वर्तमान काल, तृतीय पुरुष एकवचन के साथ
डब्ल्यूडीटी wh-निर्धारक
WP wh-सर्वनाम
डब्ल्यूआरबी wh-क्रियाविशेषण

ऊपर दी गई NLTK POS टैग सूची में सभी NLTK POS टैग शामिल हैं। NLTK POS टैगर का उपयोग वाक्य के प्रत्येक शब्द को व्याकरणिक जानकारी प्रदान करने के लिए किया जाता है। POS NLTK के सभी पैकेजों को इंस्टॉल करना, इम्पोर्ट करना और डाउनलोड करना अब पूरा हो चुका है।

एनएलपी में चंकिंग क्या है?

बेडौल एनएलपी में चंकिंग एक ऐसी प्रक्रिया है जिसमें जानकारी के छोटे-छोटे टुकड़ों को लेकर उन्हें बड़े समूहों में बांटा जाता है। चंकिंग का मुख्य उपयोग संज्ञा वाक्यांशों के समूह बनाने में होता है। इसका उपयोग पीओएस टैगिंग और रेगुलर एक्सप्रेशन के संयोजन से वाक्य को संरचना प्रदान करने के लिए किया जाता है। शब्दों के इस समूह को चंक्स कहा जाता है। इसे शैलो पार्सिंग भी कहते हैं।

शैलो पार्सिंग में, रूट्स और लीव्स के बीच अधिकतम एक ही स्तर होता है, जबकि डीप पार्सिंग में एक से अधिक स्तर होते हैं। शैलो पार्सिंग को लाइट पार्सिंग या चंकिंग भी कहा जाता है।

चंकिंग के नियम

इसके लिए कोई पूर्वनिर्धारित नियम नहीं हैं, लेकिन आप आवश्यकतानुसार इन्हें संयोजित कर सकते हैं। उदाहरण के लिए, मान लीजिए कि आपको वाक्य से संज्ञा, क्रिया (भूतकाल), विशेषण और संयोजक शब्द को टैग करना है। आप नीचे दिए गए नियम का उपयोग कर सकते हैं:

chunk:{***?}

नीचे दी गई तालिका में विभिन्न प्रतीकों के अर्थ दर्शाए गए हैं:

प्रतीक का नाम विवरण
. नई पंक्ति को छोड़कर कोई भी वर्ण
* 0 या अधिक पुनरावृत्तियों का मिलान करें
? 0 या 1 पुनरावृत्तियों का मिलान करें

अब आइए इस नियम को बेहतर ढंग से समझने के लिए कोड लिखते हैं।

from nltk import pos_tag
from nltk import RegexpParser
text ="learn php from guru99 and make study easy".split()
print("After Split:",text)
tokens_tag = pos_tag(text)
print("After Token:",tokens_tag)
patterns= """mychunk:{***?}"""
chunker = RegexpParser(patterns)
print("After Regex:",chunker)
output = chunker.parse(tokens_tag)
print("After Chunking",output)

आउटपुट:

After Split: ['learn', 'php', 'from', 'guru99', 'and', 'make', 'study', 'easy']
After Token: [('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN'), ('and', 'CC'), ('make', 'VB'), ('study', 'NN'), ('easy', 'JJ')]
After Regex: chunk.RegexpParser with 1 stages:
RegexpChunkParser with 1 rules:
       '***?'>
After Chunking (S
  (mychunk learn/JJ)
  (mychunk php/NN)
  from/IN
  (mychunk guru99/NN and/CC)
  make/VB
  (mychunk study/NN easy/JJ))

उपरोक्त पार्ट ऑफ स्पीच टैगिंग से निष्कर्ष Python उदाहरण के लिए, "make" एक क्रिया है जो नियम में शामिल नहीं है, इसलिए इसे mychunk के रूप में टैग नहीं किया गया है।

चंकिंग का उपयोग मामला

चंकिंग का उपयोग एंटिटी डिटेक्शन के लिए किया जाता है। एंटिटी वाक्य का वह भाग है जिसके द्वारा मशीन किसी भी इरादे का मान प्राप्त करती है।

Example:
Temperature of New York.
Here Temperature is the intention and New York is an entity.

दूसरे शब्दों में, चंकिंग का उपयोग टोकन के उपसमूहों को चुनने के लिए किया जाता है। चंकिंग का उपयोग करके टोकन का चयन कैसे किया जाता है, यह समझने के लिए कृपया नीचे दिए गए कोड का अनुसरण करें। इस उदाहरण में, आप एक ग्राफ देखेंगे जो संज्ञा वाक्यांश के एक चंक से मेल खाता है।

 import nltk
text = "learn php from guru99"
tokens = nltk.word_tokenize(text)
print(tokens)
tag = nltk.pos_tag(tokens)
print(tag)
grammar = "NP: {
?*}" cp =nltk.RegexpParser(grammar) result = cp.parse(tag) print(result) result.draw() # It will draw the pattern graphically which can be seen in Noun Phrase chunking

आउटपुट:

['learn', 'php', 'from', 'guru99']  -- These are the tokens
[('learn', 'JJ'), ('php', 'NN'), ('from', 'IN'), ('guru99', 'NN')]   -- These are the pos_tag
(S (NP learn/JJ php/NN) from/IN (NP guru99/NN))        -- Noun Phrase Chunking

संज्ञा वाक्यांश चंकिंग ग्राफ

संज्ञा वाक्यांश चंकिंग ग्राफ

ग्राफ से हम यह निष्कर्ष निकाल सकते हैं कि "learn" और "guru99" दो अलग-अलग टोकन हैं, लेकिन इन्हें संज्ञा वाक्यांश के रूप में वर्गीकृत किया गया है, जबकि "from" टोकन संज्ञा वाक्यांश नहीं है। विभिन्न टोकनों को एक ही समूह में वर्गीकृत करने के लिए चंकिंग का उपयोग किया जाता है। परिणाम चयनित व्याकरण पर निर्भर करेगा। इसके अलावा, NLTK में चंकिंग का उपयोग पैटर्न को टैग करने और टेक्स्ट कॉर्पोरा का विश्लेषण करने के लिए किया जाता है।

पीओएस टैग की गिनती

हमने विभिन्न विषयों पर चर्चा की है pos_tag हमने पहले ही इन टैग्स की गिनती करना सीख लिया है। यहाँ आप इन टैग्स की गिनती करना सीखेंगे। टेक्स्ट क्लासिफिकेशन और नेचुरल लैंग्वेज ऑपरेशन्स के लिए फ़ीचर्स तैयार करने में टैग्स की गिनती बेहद ज़रूरी है। हम पहले वर्किंग कोड लिखेंगे और फिर चरणों को समझाएंगे।

from collections import Counter
import nltk
text = "Guru99 is one of the best sites to learn WEB, SAP, Ethical Hacking and much more online."
lower_case = text.lower()
tokens = nltk.word_tokenize(lower_case)
tags = nltk.pos_tag(tokens)
counts = Counter( tag for word,  tag in tags)
print(counts)

आउटपुट:

Counter({'NN': 5, ',': 2, 'TO': 1, 'CC': 1, 'VBZ': 1, 'NNS': 1, 'CD': 1, '.': 1, 'DT': 1, 'JJS': 1, 'JJ': 1, 'JJR': 1, 'IN': 1, 'VB': 1, 'RB': 1})

कोड का विस्तृत विवरण:

  1. collections मॉड्यूल से Counter पैकेज का उपयोग करें। Counter एक डिक्शनरी सबक्लास है जो तत्वों को कुंजी के रूप में और उनकी संख्या को मान के रूप में संग्रहीत करता है।
  2. टेक्स्ट को टोकनाइज़ करने के लिए nltk को इम्पोर्ट करें।
  3. वह पाठ लिखें जिसका pos_tag आप गिनना चाहते हैं.
  4. टोकनाइजेशन से पहले सभी शब्दों को छोटे अक्षरों में बदल दें।
  5. शब्दों को word_tokenize के माध्यम से गुजारें और प्रत्येक टोकन के pos_tag की गणना करें।
  6. इसके बाद काउंटर टेक्स्ट में प्रत्येक टैग की कुल संख्या की गणना करता है।

आवृत्ति वितरण

आवृत्ति वितरण से तात्पर्य किसी प्रयोग के परिणाम के घटित होने की संख्या से है। इसका उपयोग किसी दस्तावेज़ में प्रत्येक शब्द के घटित होने की आवृत्ति ज्ञात करने के लिए किया जाता है। यह निम्न कारकों का उपयोग करता है: FreqDist वर्ग को परिभाषित किया गया है एनएलटीके.संभावना मॉड्यूल। प्रत्येक बार सैंपल लेने पर गिनती एक से बढ़ जाती है।

किसी भी शब्द के लिए, हम यह जांच सकते हैं कि वह दस्तावेज़ में कितनी बार आया है। उदाहरण के लिए:

  • गणना विधि: freq_dist.count('and') 'and' शब्द के कितनी बार आने की संख्या लौटाता है। इसे काउंट विधि कहा जाता है।
  • आवृत्ति विधि: freq_dist.freq('and') दिए गए सैंपल की आवृत्ति लौटाता है।

हम एक छोटा प्रोग्राम लिखेंगे जो पाठ में प्रत्येक शब्द के आवृत्ति वितरण की गणना करेगा।

import nltk
a = "Guru99 is the site where you can find the best tutorials for Software Testing     Tutorial, SAP Course for Beginners. Java Tutorial for Beginners and much more. Please     visit the site guru99.com and much more."
words = nltk.tokenize.word_tokenize(a)
fd = nltk.FreqDist(words)
fd.plot()

कोड का स्पष्टीकरण:

  1. nltk मॉड्यूल आयात करें।
  2. वह पाठ लिखें जिसका शब्द वितरण आपको ज्ञात करना है।
  3. पाठ में प्रत्येक शब्द को टोकनाइज़ करें, जिसे nltk के FreqDist मॉड्यूल के लिए इनपुट के रूप में उपयोग किया जाता है।
  4. प्रत्येक शब्द को सूची के रूप में nltk.FreqDist में लागू करें।
  5. plot() फ़ंक्शन का उपयोग करके शब्दों को ग्राफ़ में प्लॉट करें।

नोट: ग्राफ देखने के लिए Matplotlib इंस्टॉल होना आवश्यक है। यह टेक्स्ट में प्रत्येक शब्द की आवृत्ति की गणना करता है और टेक्स्ट-आधारित भावना विश्लेषण में सहायक होता है। मुख्य शब्द है "टोकनाइज़": टोकनाइज़ करने के बाद, प्रत्येक शब्द की जाँच की जाती है कि वह कितनी बार आया है।

कोलोकेशन्स: बिग्रम्स और ट्रिग्राम्स

शब्द संयोजन उन शब्दों के जोड़ों को कहते हैं जो किसी दस्तावेज़ में कई बार एक साथ आते हैं। इनकी गणना ऐसे जोड़ों की संख्या और दस्तावेज़ के कुल शब्दों की संख्या के अनुपात से की जाती है।

पराबैंगनी किरणें और अवरक्त किरणें जैसे शब्दों पर विचार करें। पराबैंगनी और किरणें शब्द अलग-अलग प्रयोग नहीं किए जाते हैं, इसलिए इन्हें एक शब्द-समूह के रूप में माना जा सकता है। एक अन्य उदाहरण सीटी स्कैन है, क्योंकि हम सीटी और स्कैन को अलग-अलग नहीं कहते हैं। शब्द-समूह को दो प्रकारों में वर्गीकृत किया जा सकता है:

  • बिगग्राम: दो शब्दों का संयोजन
  • त्रिकोण: तीन शब्दों का संयोजन

बिग्राम और ट्रिग्राम फीचर एक्स के लिए अधिक सार्थक और उपयोगी विशेषताएं प्रदान करते हैं।tracये चरण विशेष रूप से पाठ-आधारित भावना विश्लेषण में उपयोगी होते हैं।

बिगग्राम का उदाहरण Code:

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.bigrams(Tokens))
print(output)

आउटपुट:

[('Guru99', 'is'), ('is', 'totally'), ('totally', 'new'), ('new', 'kind'), ('kind', 'of'), ('of', 'learning'), ('learning', 'experience'), ('experience', '.')]

त्रिकोणमिति का उदाहरण Code:

कभी-कभी सांख्यिकीय विश्लेषण और आवृत्ति गणना के लिए वाक्य में तीन शब्दों की जोड़ी देखना महत्वपूर्ण हो जाता है। यह फिर से बनाने में महत्वपूर्ण भूमिका निभाता है एनएलपी (प्राकृतिक भाषा प्रसंस्करण) विशेषताओं के साथ-साथ पाठ-आधारित भावना पूर्वानुमान के लिए भी यही कोड चलाया जाता है। ट्राइग्राम की गणना के लिए भी यही कोड चलाया जाता है।

import nltk
text = "Guru99 is a totally new kind of learning experience."
Tokens = nltk.word_tokenize(text)
output = list(nltk.trigrams(Tokens))
print(output)

आउटपुट:

[('Guru99', 'is', 'totally'), ('is', 'totally', 'new'), ('totally', 'new', 'kind'), ('new', 'kind', 'of'), ('kind', 'of', 'learning'), ('of', 'learning', 'experience'), ('learning', 'experience', '.')]

वाक्य टैग करना

किसी वाक्य को टैग करने का अर्थ है वाक्य के संदर्भ के आधार पर क्रिया या संज्ञा जैसे लेबल जोड़ना। पीओएस टैग की पहचान करना जटिल है, इसलिए मैन्युअल रूप से सामान्य टैगिंग संभव नहीं है, क्योंकि कुछ शब्दों के अर्थ वाक्य संरचना के आधार पर अस्पष्ट होते हैं। टैगिंग से पहले पाठ को सूची में बदलना एक महत्वपूर्ण चरण है, क्योंकि प्रत्येक शब्द को एक विशिष्ट टैग के लिए लूप किया जाता है और गिना जाता है।

import nltk
text = "Hello Guru99, You have to build a very good site, and I love visiting your site."
sentence = nltk.sent_tokenize(text)
for sent in sentence:
	 print(nltk.pos_tag(nltk.word_tokenize(sent)))

Code स्पष्टीकरण:

  1. Code एनएलटीके (प्राकृतिक) आयात करें Language Toolकिट, जिसमें वाक्य टोकनाइज़ और शब्द टोकनाइज़ जैसे सबमॉड्यूल शामिल हैं)।
  2. वह पाठ जिसके टैग मुद्रित किये जाने हैं।
  3. वाक्य का टोकनीकरण।
  4. एक फॉर लूप लागू किया गया है जिसमें वाक्य से शब्दों को टोकनाइज़ किया जाता है और प्रत्येक शब्द का टैग आउटपुट के रूप में प्रिंट किया जाता है।

एक कॉर्पस में, पीओएस टैगर दो प्रकार के होते हैं:

1. नियम-आधारित पीओएस टैगर: अस्पष्ट अर्थ वाले शब्दों के लिए, संदर्भ संबंधी जानकारी पर आधारित नियम-आधारित दृष्टिकोण अपनाया जाता है। यह पहले या बाद वाले शब्द के अर्थ का विश्लेषण करके किया जाता है। इसलिए शब्दों को किसी विशेष भाषा के व्याकरणिक नियमों, जैसे कि बड़े अक्षरों और विराम चिह्नों के आधार पर टैग किया जाता है। उदाहरण के लिए, ब्रिल का टैगर।

2. स्टोकेस्टिक पीओएस टैगर: इस पद्धति में आवृत्ति या संभाव्यता जैसे दृष्टिकोणों का प्रयोग किया जाता है। यदि प्रशिक्षण सेट में किसी शब्द को अधिकतर किसी विशेष टैग से टैग किया गया है, तो परीक्षण वाक्य में उसे वही टैग दिया जाता है। शब्द का टैग न केवल अपने टैग पर बल्कि पिछले टैग पर भी निर्भर करता है, इसलिए यह पद्धति हमेशा सटीक नहीं होती।

हिडन मार्कोव मॉडल के साथ पीओएस टैगिंग

टैगिंग समस्याओं को हिडन मार्कोव मॉडल (एचएमएम) का उपयोग करके भी मॉडल किया जा सकता है। यह इनपुट टोकन को एक अवलोकन योग्य अनुक्रम के रूप में मानता है, जबकि टैग को छिपी हुई अवस्था माना जाता है, और लक्ष्य छिपी हुई अवस्था अनुक्रम को निर्धारित करना है। उदाहरण के लिए, x = x1,x2,…,xn, जहाँ x टोकन का एक अनुक्रम है, जबकि y = y1,y2,y3,y4…yn छिपा हुआ अनुक्रम है।

हिडेन मार्कोव मॉडल (HMM) कैसे काम करता है?

एचएमएम संयुक्त वितरण P(x, y) का उपयोग करता है, जहाँ x इनपुट टोकन अनुक्रम है और y टैग अनुक्रम है। x के लिए टैग अनुक्रम, p(x1,x2,…xn,y1,y2,y3,…) का y1…yn पर आर्गमैक्स होगा। हमने पाठ से टैग्स को वर्गीकृत किया है, लेकिन इन टैग्स के आँकड़े महत्वपूर्ण हैं, इसलिए अगला भाग सांख्यिकीय अध्ययन के लिए इन टैग्स की गणना करना है।

अक्सर पूछे जाने वाले प्रश्न

POS टैगिंग प्रत्येक शब्द को उसके शब्द भेद (जैसे संज्ञा या क्रिया) के साथ लेबल करती है। चंकिंग एक कदम आगे बढ़कर उन टैग किए गए शब्दों को संज्ञा वाक्यांशों जैसे वाक्यों में समूहित करती है, जिससे वाक्य को सरल संरचना मिलती है।

शैलो पार्सिंग, जिसे चंकिंग या लाइट पार्सिंग भी कहा जाता है, रूट्स और लीव्स के बीच अधिकतम एक स्तर रखती है। यह पूर्ण पार्स ट्री बनाए बिना वाक्यांश सीमाओं की पहचान करती है, जिससे यह डीप पार्सिंग की तुलना में तेज़ होती है।

चंकिंग टैग किए गए शब्दों को वाक्यांशों में समूहित करता है, जिससे एक सिस्टम लोगों, स्थानों, तिथियों या उत्पादों जैसी संस्थाओं का पता लगा सकता है। नामित इकाई पहचान इन चंक्स पर निर्भर करती है।tracकच्चे पाठ से सार्थक मान निकालें।

nltk.pos_tag() फ़ंक्शन शब्द-रूप टैग निर्दिष्ट करता है। सबसे पहले आप word_tokenize फ़ंक्शन का उपयोग करके टेक्स्ट को टोकनाइज़ करते हैं, फिर टोकन सूची को pos_tag फ़ंक्शन में पास करते हैं, जो प्रत्येक शब्द को उसके टैग (जैसे NN, VB, या JJ) के साथ लौटाता है।

जी हां। मशीन लर्निंग और डीप न्यूरल नेटवर्क से प्रशिक्षित आधुनिक एआई टैगर बड़े डेटासेट से संदर्भ सीखकर अस्पष्ट शब्दों को हल करते हैं, जिससे वास्तविक दुनिया के टेक्स्ट पर नियम-आधारित तरीकों की तुलना में उच्च सटीकता प्राप्त होती है।

स्टोकेस्टिक टैगर प्रशिक्षण डेटा से प्राप्त संभाव्यता का उपयोग करते हैं। मशीन लर्निंग अनुमान लगाती है कि आसपास के टैग्स को देखते हुए किसी शब्द के लिए प्रत्येक टैग की कितनी संभावना है, फिर उच्चतम समग्र संभाव्यता वाले अनुक्रम का चयन करती है।

के अतिरिक्त एनएलटीकेलोकप्रिय विकल्पों में शामिल हैं spacy तेज़ उत्पादन पाइपलाइन के लिए स्टैनफोर्ड कोरएनएलपी और ट्रांसफॉर्मर-आधारित टैगिंग के लिए हगिंग फेस ट्रांसफॉर्मर का उपयोग किया जाता है।

चंक ग्रामर में, एक बिंदु नई पंक्ति को छोड़कर किसी भी वर्ण से मेल खाता है, एक तारांकन चिह्न शून्य या अधिक पुनरावृत्तियों से मेल खाता है, और एक प्रश्न चिह्न पिछले पीओएस टैग पैटर्न की शून्य या एक पुनरावृत्ति से मेल खाता है।

इस पोस्ट को संक्षेप में इस प्रकार लिखें: