जेनसिम - रूपांतरण
यह अध्याय आपको गेंसिम में विभिन्न परिवर्तनों के बारे में जानने में मदद करेगा। हमें परिवर्तन दस्तावेजों को समझने के द्वारा शुरू करते हैं।
रूपांतरण दस्तावेज़
दस्तावेज़ों को बदलने का अर्थ है दस्तावेज़ का इस तरह से प्रतिनिधित्व करना कि दस्तावेज़ को गणितीय रूप से हेरफेर किया जा सके। कॉर्पस की अव्यक्त संरचना को तैयार करने के अलावा, दस्तावेजों को बदलना भी निम्नलिखित लक्ष्यों को पूरा करेगा -
यह शब्दों के बीच के संबंध को उजागर करता है।
यह कॉर्पस में छिपी हुई संरचना को बाहर लाता है।
यह एक नए और अधिक अर्थपूर्ण तरीके से दस्तावेजों का वर्णन करता है।
यह दस्तावेजों के प्रतिनिधित्व को अधिक कॉम्पैक्ट बनाता है।
यह दक्षता में सुधार करता है क्योंकि नए प्रतिनिधित्व कम संसाधनों का उपभोग करते हैं।
यह प्रभावकारिता में सुधार करता है क्योंकि नए प्रतिनिधित्व में सीमांत डेटा प्रवृत्तियों की अनदेखी की जाती है।
नए दस्तावेज़ प्रतिनिधित्व में शोर भी कम हो गया है।
आइए दस्तावेजों को एक वेक्टर अंतरिक्ष प्रतिनिधित्व से दूसरे में बदलने के कार्यान्वयन चरणों को देखें।
कार्यान्वयन कदम
दस्तावेजों को बदलने के लिए, हमें निम्नलिखित चरणों का पालन करना चाहिए -
चरण 1: कॉर्पस बनाना
दस्तावेजों से कॉर्पस बनाने के लिए पहला और बुनियादी कदम है। हमने पहले के उदाहरणों में कॉर्पस बनाया है। आइए कुछ संवर्द्धन के साथ एक और बनाएं (सामान्य शब्दों और केवल एक बार आने वाले शब्दों को हटा दें) -
import gensim
import pprint
from collections import defaultdict
from gensim import corpora
अब कॉर्पस बनाने के लिए दस्तावेज प्रदान करें -
t_corpus = ["CNTK जिसे पहले कम्प्यूटेशनल नेटवर्क टूलकिट के रूप में जाना जाता है", "एक मुक्त उपयोग में आसान ओपन-सोर्स कमर्शियल-ग्रेड टूलकिट" है, "जो हमें मानव मस्तिष्क की तरह सीखने के लिए गहन शिक्षण एल्गोरिदम को प्रशिक्षित करने में सक्षम बनाता है।" आप "Tutorialspoint.com" पर अपना मुफ्त ट्यूटोरियल पा सकते हैं "," Tutorialspoint.com तकनीक पर सर्वश्रेष्ठ तकनीकी ट्यूटोरियल भी प्रदान करता है, जैसे कि एआई डीप लर्निंग मशीन मुफ्त में सीखना "।
अगला, हमें टोकन करने की आवश्यकता है और इसके साथ हम सामान्य शब्दों को भी हटा देंगे -
stoplist = set('for a of the and to in'.split(' '))
processed_corpus = [
[
word for word in document.lower().split() if word not in stoplist
]
for document in t_corpus
]
निम्नलिखित स्क्रिप्ट उन शब्दों को हटा देगा जो केवल दिखाई देते हैं -
frequency = defaultdict(int)
for text in processed_corpus:
for token in text:
frequency[token] += 1
processed_corpus = [
[token for token in text if frequency[token] > 1]
for text in processed_corpus
]
pprint.pprint(processed_corpus)
उत्पादन
[
['toolkit'],
['free', 'toolkit'],
['deep', 'learning', 'like'],
['free', 'on', 'tutorialspoint.com'],
['tutorialspoint.com', 'on', 'like', 'deep', 'learning', 'learning', 'free']
]
अब इसे पास करें corpora.dictionary() हमारे कोष में अद्वितीय वस्तुओं को प्राप्त करने के लिए वस्तु -
dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)
उत्पादन
Dictionary(7 unique tokens: ['toolkit', 'free', 'deep', 'learning', 'like']...)
अगला, कोड की निम्नलिखित पंक्ति हमारे कॉर्पस के लिए वर्ड मॉडल का बैग बनाएगी -
BoW_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(BoW_corpus)
उत्पादन
[
[(0, 1)],
[(0, 1), (1, 1)],
[(2, 1), (3, 1), (4, 1)],
[(1, 1), (5, 1), (6, 1)],
[(1, 1), (2, 1), (3, 2), (4, 1), (5, 1), (6, 1)]
]
चरण 2: एक परिवर्तन बनाना
परिवर्तन कुछ मानक पायथन ऑब्जेक्ट हैं। हम एक प्रशिक्षित कॉर्पस का उपयोग करके इन परिवर्तनों यानी पायथन ऑब्जेक्ट्स को इनिशियलाइज़ कर सकते हैं। यहां हम उपयोग करने जा रहे हैंtf-idf मॉडल हमारे प्रशिक्षित कॉर्पस का एक परिवर्तन बनाने के लिए BoW_corpus।
सबसे पहले, हमें gensim से मॉडल पैकेज आयात करने की आवश्यकता है।
from gensim import models
अब, हमें इस प्रकार मॉडल को इनिशियलाइज़ करने की आवश्यकता है -
tfidf = models.TfidfModel(BoW_corpus)
चरण 3: ट्रांसफॉर्मिंग वैक्टर
अब, इस अंतिम चरण में, वैक्टर को पुराने प्रतिनिधित्व से नए प्रतिनिधित्व में बदल दिया जाएगा। जैसा कि हमने ऊपर चरण में tfidf मॉडल को इनिशियलाइज़ किया है, tfidf को अब रीड ओनली ऑब्जेक्ट माना जाएगा। यहां, इस tfidf ऑब्जेक्ट का उपयोग करके हम अपने वेक्टर को शब्द प्रतिनिधित्व (पुराने प्रतिनिधित्व) के बैग से Tfidf वास्तविक-मूल्यवान भार (नए प्रतिनिधित्व) में बदल देंगे।
doc_BoW = [(1,1),(3,1)]
print(tfidf[doc_BoW]
उत्पादन
[(1, 0.4869354917707381), (3, 0.8734379353188121)]
हमने कॉर्पस के दो मूल्यों पर परिवर्तन लागू किया है, लेकिन हम इसे पूरे कॉर्पस पर भी लागू कर सकते हैं -
corpus_tfidf = tfidf[BoW_corpus]
for doc in corpus_tfidf:
print(doc)
उत्पादन
[(0, 1.0)]
[(0, 0.8734379353188121), (1, 0.4869354917707381)]
[(2, 0.5773502691896257), (3, 0.5773502691896257), (4, 0.5773502691896257)]
[(1, 0.3667400603126873), (5, 0.657838022678017), (6, 0.657838022678017)]
[
(1, 0.19338287240886842), (2, 0.34687949360312714), (3, 0.6937589872062543),
(4, 0.34687949360312714), (5, 0.34687949360312714), (6, 0.34687949360312714)
]
पूर्ण कार्यान्वयन उदाहरण
import gensim
import pprint
from collections import defaultdict
from gensim import corpora
t_corpus = [
"CNTK formerly known as Computational Network Toolkit",
"is a free easy-to-use open-source commercial-grade toolkit",
"that enable us to train deep learning algorithms to learn like the human brain.",
"You can find its free tutorial on tutorialspoint.com",
"Tutorialspoint.com also provide best technical tutorials on
technologies like AI deep learning machine learning for free"
]
stoplist = set('for a of the and to in'.split(' '))
processed_corpus = [
[word for word in document.lower().split() if word not in stoplist]
for document in t_corpus
]
frequency = defaultdict(int)
for text in processed_corpus:
for token in text:
frequency[token] += 1
processed_corpus = [
[token for token in text if frequency[token] > 1]
for text in processed_corpus
]
pprint.pprint(processed_corpus)
dictionary = corpora.Dictionary(processed_corpus)
print(dictionary)
BoW_corpus = [dictionary.doc2bow(text) for text in processed_corpus]
pprint.pprint(BoW_corpus)
from gensim import models
tfidf = models.TfidfModel(BoW_corpus)
doc_BoW = [(1,1),(3,1)]
print(tfidf[doc_BoW])
corpus_tfidf = tfidf[BoW_corpus]
for doc in corpus_tfidf:
print(doc)
गेंसिम में विभिन्न रूपांतरण
Gensim का उपयोग करके, हम विभिन्न लोकप्रिय परिवर्तनों को लागू कर सकते हैं, अर्थात वेक्टर स्पेस मॉडल एल्गोरिदम। उनमें से कुछ इस प्रकार हैं -
Tf-Idf (शब्द आवृत्ति-व्युत्क्रम दस्तावेज़ आवृत्ति)
आरंभीकरण के दौरान, यह tf-idf मॉडल एल्गोरिथ्म एक प्रशिक्षण कॉर्पस को पूर्णांक मान (जैसे बैग-ऑफ-वर्ड्स मॉडल) की उम्मीद करता है। फिर उसके बाद, परिवर्तन के समय, यह एक वेक्टर प्रतिनिधित्व लेता है और एक और वेक्टर प्रतिनिधित्व लौटाता है।
आउटपुट वेक्टर में समान आयाम होगा लेकिन दुर्लभ सुविधाओं (प्रशिक्षण के समय) के मूल्य में वृद्धि होगी। यह मूल रूप से पूर्णांक-मूल्यवान वैक्टर को वास्तविक-मूल्यवान वैक्टर में रूपांतरित करता है। निम्नलिखित Tf-idf परिवर्तन का सिंटैक्स है -
Model=models.TfidfModel(corpus, normalize=True)
LSI (अव्यक्त अर्थ इंडेक्सिंग)
LSI मॉडल एल्गोरिदम या तो पूर्णांक मूल्यवान वेक्टर मॉडल (जैसे बैग-ऑफ-वर्ड्स मॉडल) या Tf-Idf भारित स्थान को अव्यक्त स्थान से दस्तावेज़ को रूपांतरित कर सकता है। आउटपुट वेक्टर निम्न आयामीता का होगा। निम्नलिखित LSI परिवर्तन का वाक्य विन्यास है -
Model=models.LsiModel(tfidf_corpus, id2word=dictionary, num_topics=300)
LDA (अव्यक्त डिरिचलेट आवंटन)
एलडीए मॉडल एल्गोरिथ्म एक और एल्गोरिथ्म है जो बैग-ऑफ-वर्ड्स मॉडल स्पेस से दस्तावेज़ को एक विषय स्थान में बदल देता है। आउटपुट वेक्टर निम्न आयामीता का होगा। निम्नलिखित LSI परिवर्तन का वाक्य विन्यास है -
Model=models.LdaModel(corpus, id2word=dictionary, num_topics=100)
यादृच्छिक अनुमान (आरपी)
आरपी, एक बहुत ही कुशल दृष्टिकोण, जिसका उद्देश्य वेक्टर अंतरिक्ष की गतिशीलता को कम करना है। यह दृष्टिकोण मूल रूप से दस्तावेजों के बीच Tf-Idf दूरियों का अनुमान है। यह थोड़ा यादृच्छिकता में फेंकने से ऐसा होता है।
Model=models.RpModel(tfidf_corpus, num_topics=500)
पदानुक्रमित डिरिलेट प्रक्रिया (HDP)
एचडीपी एक गैर-पैरामीट्रिक बायेसियन पद्धति है जो गेंसिम के लिए एक नया अतिरिक्त है। हमें इसका उपयोग करते समय ध्यान रखना चाहिए।
Model=models.HdpModel(corpus, id2word=dictionary