Gensim - TF-IDF मैट्रिक्स बनाना
यहां, हम गेन्सिम की मदद से टर्म फ़्रीक्वेंसी-इनवर्स डॉक्यूमेंट फ़्रीक्वेंसी (TF-IDF) मैट्रिक्स बनाने के बारे में जानेंगे।
TF-IDF क्या है?
यह टर्म फ़्रीक्वेंसी-इनवर्स डॉक्यूमेंट फ़्रीक्वेंसी मॉडल है जो एक बैग-ऑफ-वर्ड मॉडल भी है। यह नियमित कॉर्पस से अलग है क्योंकि यह टोकन को तौलता है यानी दस्तावेज़ों में अक्सर दिखाई देने वाले शब्द। प्रारंभिककरण के दौरान, यह tf-idf मॉडल एल्गोरिथ्म एक प्रशिक्षण कॉर्पस होने की उम्मीद करता है जिसमें पूर्णांक मान (जैसे बैग-ऑफ-वर्ड्स मॉडल) होते हैं।
फिर उसके बाद परिवर्तन के समय, यह एक वेक्टर प्रतिनिधित्व लेता है और एक और वेक्टर प्रतिनिधित्व लौटाता है। आउटपुट वेक्टर में समान आयाम होगा लेकिन दुर्लभ सुविधाओं (प्रशिक्षण के समय) के मूल्य में वृद्धि होगी। यह मूल रूप से पूर्णांक-मूल्यवान वैक्टर को वास्तविक-मूल्यवान वैक्टर में रूपांतरित करता है।
इसकी गणना कैसे की जाती है?
TF-IDF मॉडल निम्नलिखित दो सरल चरणों की मदद से tfidf की गणना करता है -
चरण 1: स्थानीय और वैश्विक घटक को गुणा करना
इस पहले चरण में, मॉडल TFF (टर्म फ़्रीक्वेंसी) जैसे स्थानीय घटक को IDF (व्युत्क्रम दस्तावेज़ आवृत्ति) जैसे वैश्विक घटक से गुणा करेगा।
चरण 2: परिणाम को सामान्य करें
एक बार गुणा करने के बाद, अगले चरण में TFIDF मॉडल इकाई लंबाई के परिणाम को सामान्य करेगा।
इन दो कदमों के परिणामस्वरूप अक्सर दस्तावेज़ों में शब्द घटते-घटते समाप्त हो जाएंगे।
TF-IDF वेट कैसे प्राप्त करें?
यहां, हम एक उदाहरण को लागू करने जा रहे हैं कि हम टीएफ-आईडीएफ भार कैसे प्राप्त कर सकते हैं। मूल रूप से, TF-IDF वेट प्राप्त करने के लिए, पहले हमें कॉर्पस को प्रशिक्षित करने की आवश्यकता है और फिर उस कॉर्पस को tfidf मॉडल में लागू करना होगा।
कॉर्पस को प्रशिक्षित करें
जैसा कि ऊपर कहा गया है कि TF-IDF प्राप्त करने के लिए हमें सबसे पहले अपने कॉर्पस को प्रशिक्षित करना होगा। सबसे पहले, हमें सभी आवश्यक पैकेजों को निम्नानुसार आयात करना होगा -
import gensim
import pprint
from gensim import corpora
from gensim.utils import simple_preprocess
अब सूची युक्त वाक्य प्रदान करें। हमारी सूची में तीन वाक्य हैं -
doc_list = [
"Hello, how are you?", "How do you do?",
"Hey what are you doing? yes you What are you doing?"
]
अगला, वाक्यों का टोकन निम्नानुसार है -
doc_tokenized = [simple_preprocess(doc) for doc in doc_list]
का एक ऑब्जेक्ट बनाएँ corpora.Dictionary() निम्नानुसार है -
dictionary = corpora.Dictionary()
अब इन टोकन वाक्यों को पास करें dictionary.doc2bow() वस्तु इस प्रकार है -
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
इसके बाद, हम अपने दस्तावेज़ों में शब्द आईडी और उनकी आवृत्तियों को प्राप्त करेंगे।
for doc in BoW_corpus:
print([[dictionary[id], freq] for id, freq in doc])
उत्पादन
[['are', 1], ['hello', 1], ['how', 1], ['you', 1]]
[['how', 1], ['you', 1], ['do', 2]]
[['are', 2], ['you', 3], ['doing', 2], ['hey', 1], ['what', 2], ['yes', 1]]
इस तरह हमने अपने कॉर्पस (बैग-ऑफ-वर्ड कॉर्पस) को प्रशिक्षित किया है।
अगला, हमें इस प्रशिक्षित कॉर्पस को tfidf मॉडल के भीतर लागू करने की आवश्यकता है models.TfidfModel()।
पहले numpay पैकेज आयात करें -
import numpy as np
अब के वर्ग कोष्ठक के भीतर हमारे प्रशिक्षित कॉर्पस (BoW_corpus) को लागू करना models.TfidfModel()
tfidf = models.TfidfModel(BoW_corpus, smartirs='ntc')
इसके बाद, हम अपने tfidf मॉडल किए गए कॉर्पस में शब्द आईडी और उनकी आवृत्तियों को प्राप्त करेंगे -
for doc in tfidf[BoW_corpus]:
print([[dictionary[id], np.around(freq,decomal=2)] for id, freq in doc])
उत्पादन
[['are', 0.33], ['hello', 0.89], ['how', 0.33]]
[['how', 0.18], ['do', 0.98]]
[['are', 0.23], ['doing', 0.62], ['hey', 0.31], ['what', 0.62], ['yes', 0.31]]
[['are', 1], ['hello', 1], ['how', 1], ['you', 1]]
[['how', 1], ['you', 1], ['do', 2]]
[['are', 2], ['you', 3], ['doing', 2], ['hey', 1], ['what', 2], ['yes', 1]]
[['are', 0.33], ['hello', 0.89], ['how', 0.33]]
[['how', 0.18], ['do', 0.98]]
[['are', 0.23], ['doing', 0.62], ['hey', 0.31], ['what', 0.62], ['yes', 0.31]]
उपरोक्त आउटपुट से, हम अपने दस्तावेजों में शब्दों की आवृत्तियों में अंतर देखते हैं।
पूर्ण कार्यान्वयन उदाहरण
import gensim
import pprint
from gensim import corpora
from gensim.utils import simple_preprocess
doc_list = [
"Hello, how are you?", "How do you do?",
"Hey what are you doing? yes you What are you doing?"
]
doc_tokenized = [simple_preprocess(doc) for doc in doc_list]
dictionary = corpora.Dictionary()
BoW_corpus = [dictionary.doc2bow(doc, allow_update=True) for doc in doc_tokenized]
for doc in BoW_corpus:
print([[dictionary[id], freq] for id, freq in doc])
import numpy as np
tfidf = models.TfidfModel(BoW_corpus, smartirs='ntc')
for doc in tfidf[BoW_corpus]:
print([[dictionary[id], np.around(freq,decomal=2)] for id, freq in doc])
शब्दों के वजन में अंतर
जैसा कि ऊपर चर्चा की गई है, दस्तावेज़ में अधिक बार होने वाले शब्दों को छोटे वजन मिलेंगे। आइए उपरोक्त दो आउटपुट से शब्दों के भार में अंतर को समझते हैं। शब्द‘are’दो दस्तावेज़ों में होता है और इसका भार कम किया जाता है। इसी तरह, शब्द‘you’ सभी दस्तावेजों में दिखाई दे रहा है और पूरी तरह से हटा दिया गया है।