कोर्स
विषयों की खोज कई उद्देश्यों के लिए उपयोगी है, जैसे दस्तावेज़ों का क्लस्टरिंग करना, ऑनलाइन उपलब्ध सामग्री को सूचना पुनर्प्राप्ति और अनुशंसाओं के लिए व्यवस्थित करना। कई कंटेंट प्रदाता और समाचार एजेंसियाँ पाठकों को लेख सुझाने के लिए टॉपिक मॉडल का उपयोग कर रही हैं। इसी तरह, भर्ती फर्में नौकरी विवरण निकालने और उन्हें उम्मीदवारों के कौशल सेट से मैप करने में इसका उपयोग कर रही हैं। यदि आप डेटा साइंटिस्ट की नौकरी देखें, तो यह बड़े पैमाने पर एकत्रित डेटा से ‘ज्ञान’ निकालने के बारे में है। आम तौर पर, एकत्रित डेटा असंरचित होता है। आपको असंरचित डेटा की बड़ी मात्रा का विश्लेषण और समझने के लिए शक्तिशाली टूल और तकनीकों की ज़रूरत होती है।
टॉपिक मॉडलिंग एक टेक्स्ट माइनिंग तकनीक है जो बड़े संग्रहों की पाठ्य जानकारी को संक्षेपित करने के लिए सह-अस्तित्व वाले कीवर्ड्स की पहचान करने के तरीके प्रदान करती है। यह दस्तावेज़ में छिपे हुए विषयों की खोज करने, इन विषयों के साथ दस्तावेज़ों को एनोटेट करने और असंरचित डेटा की बड़ी मात्रा को व्यवस्थित करने में मदद करती है।
टॉपिक मॉडलिंग
टॉपिक मॉडलिंग दिए गए दस्तावेज़ों से स्वचालित रूप से छिपी थीम्स खोजती है। यह एक अनसुपरवाइज़्ड टेक्स्ट एनालिटिक्स एल्गोरिद्म है जिसका उपयोग दिए गए दस्तावेज़ से शब्दों के समूह खोजने के लिए किया जाता है। ये शब्द समूह एक विषय का प्रतिनिधित्व करते हैं। यह संभव है कि एक ही दस्तावेज़ कई थीम्स से संबद्ध हो। उदाहरण के लिए, 'patient', 'doctor', 'disease', 'cancer' और 'health' जैसे शब्दों का समूह 'healthcare' विषय का प्रतिनिधित्व करेगा। रेगुलर एक्सप्रेशन का उपयोग करने वाली रूल-आधारित टेक्स्ट सर्चिंग की तुलना में टॉपिक मॉडलिंग एक अलग खेल है।

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

लेटेंट सेमांटिक एनालिसिस
LSA (Latent Semantic Analysis) जिसे LSI (Latent Semantic Index) भी कहा जाता है, BoW (bag of words) मॉडल का उपयोग करता है, जिससे टर्म-डॉक्युमेंट मैट्रिक्स (किसी दस्तावेज़ में शब्दों की उपस्थिति) बनती है। पंक्तियाँ शब्दों का और स्तंभ दस्तावेज़ों का प्रतिनिधित्व करते हैं। LSA सिंगुलर वैल्यू डीकंपोज़िशन का उपयोग करके डॉक्युमेंट-टर्म मैट्रिक्स पर मैट्रिक्स डीकंपोज़िशन निष्पादित कर लेटेंट विषय सीखता है। LSA आमतौर पर विमा में कमी या शोर घटाने की तकनीक के रूप में उपयोग किया जाता है।

सिंगुलर वैल्यू डीकंपोज़िशन (SVD)
SVD एक मैट्रिक्स फैक्टराइज़ेशन विधि है जो किसी मैट्रिक्स को दो मैट्रिसेज़ के गुणनफल के रूप में प्रस्तुत करती है। इसके सिग्नल प्रोसेसिंग, मनोविज्ञान, समाजशास्त्र, जलवायु और वायुमंडलीय विज्ञान, सांख्यिकी और खगोलशास्त्र में कई उपयोगी अनुप्रयोग हैं।

- M एक m×m मैट्रिक्स है
- U एक m×n लेफ्ट सिंगुलर मैट्रिक्स है
- Σ एक n×n डायगोनल मैट्रिक्स है जिसमें अशून्यात्मक वास्तविक संख्याएँ होती हैं।
- V एक m×n राइट सिंगुलर मैट्रिक्स है
- V* n×m मैट्रिक्स है, जो V का ट्रांसपोज़ है।
आइडेंटिटी मैट्रिक्स: यह एक वर्गाकार मैट्रिक्स है जिसमें मुख्य विकर्ण के सभी अवयव 1 होते हैं और अन्य सभी अवयव 0 होते हैं।
डायगोनल मैट्रिक्स: यह वह मैट्रिक्स है जिसमें मुख्य विकर्ण के अलावा अन्य सभी प्रविष्टियाँ शून्य होती हैं।
सिंगुलर मैट्रिक्स: कोई मैट्रिक्स तब सिंगुलर है जब उसका डिटरमिनेंट 0 हो या वह ऐसा वर्गाकार मैट्रिक्स हो जिसका इनवर्स न हो।
श्रेष्ठ विषयों की संख्या निर्धारित करना
टॉपिक मॉडलिंग में k (विषयों की संख्या) निर्धारित करने का सबसे अच्छा तरीका क्या है? दिए गए कॉर्पस टेक्स्ट में श्रेष्ठ विषयों की संख्या पहचानना एक चुनौतीपूर्ण कार्य है। हम निम्न विकल्पों का उपयोग करके श्रेष्ठ विषयों की संख्या निर्धारित कर सकते हैं:
- श्रेष्ठ विषयों की संख्या निर्धारित करने का एक तरीका यह है कि प्रत्येक विषय को एक क्लस्टर माना जाए और सिल्हूट गुणांक का उपयोग करके क्लस्टर की प्रभावशीलता ज्ञात की जाए।
- टॉपिक कोहेरेंस माप विषयों की संख्या की पहचान करने के लिए एक यथार्थवादी माप है।
टॉपिक कोहेरेंस माप टॉपिक मॉडल्स के मूल्यांकन के लिए व्यापक रूप से प्रयुक्त मीट्रिक है। यह लेटेंट वेरिएबल मॉडल्स का उपयोग करता है। प्रत्येक उत्पन्न विषय के पास शब्दों की एक सूची होती है। टॉपिक कोहेरेंस माप में, आप किसी विषय के शब्दों की युग्मन शब्द-समानता स्कोरों का औसत/माध्यिका निकालते हैं। टॉपिक कोहेरेंस स्कोर का उच्च मान वाला मॉडल एक अच्छा टॉपिक मॉडल माना जाएगा।
Gensim का उपयोग करके LSA लागू करना
आवश्यक लाइब्रेरी आयात करें
#import modules
import os.path
from gensim import corpora
from gensim.models import LsiModel
from nltk.tokenize import RegexpTokenizer
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from gensim.models.coherencemodel import CoherenceModel
import matplotlib.pyplot as plt
डेटा लोड करना
आइए सबसे पहले articles.csv को लोड करने के लिए डेटा लोड फ़ंक्शन बनाते हैं। आप डेटा यहाँ से डाउनलोड कर सकते हैं।
def load_data(path,file_name):
"""
Input : path and file_name
Purpose: loading text file
Output : list of paragraphs/documents and
title(initial 100 words considred as title of document)
"""
documents_list = []
titles=[]
with open( os.path.join(path, file_name) ,"r") as fin:
for line in fin.readlines():
text = line.strip()
documents_list.append(text)
print("Total Number of Documents:",len(documents_list))
titles.append( text[0:min(len(text),100)] )
return documents_list,titles
डेटा का प्रीप्रोसेसिंग
डेटा लोडिंग फ़ंक्शन के बाद, आपको टेक्स्ट का प्रीप्रोसेस करना होगा। टेक्स्ट को प्रीप्रोसेस करने के लिए निम्न चरण अपनाए जाते हैं:
- टेक्स्ट लेखों को टोकनाइज़ करना
- स्टॉप वर्ड्स हटाना
- टेक्स्ट लेख पर स्टेमिंग करना
def preprocess_data(doc_set):
"""
Input : docuemnt list
Purpose: preprocess text (tokenize, removing stopwords, and stemming)
Output : preprocessed text
"""
# initialize regex tokenizer
tokenizer = RegexpTokenizer(r'\w+')
# create English stop words list
en_stop = set(stopwords.words('english'))
# Create p_stemmer of class PorterStemmer
p_stemmer = PorterStemmer()
# list for tokenized documents in loop
texts = []
# loop through document list
for i in doc_set:
# clean and tokenize document string
raw = i.lower()
tokens = tokenizer.tokenize(raw)
# remove stop words from tokens
stopped_tokens = [i for i in tokens if not i in en_stop]
# stem tokens
stemmed_tokens = [p_stemmer.stem(i) for i in stopped_tokens]
# add tokens to list
texts.append(stemmed_tokens)
return texts
कॉर्पस तैयार करें
अगला चरण कॉर्पस तैयार करना है। यहाँ, आपको डॉक्युमेंट-टर्म मैट्रिक्स और शब्दों की डिक्शनरी बनानी होगी।
def prepare_corpus(doc_clean):
"""
Input : clean document
Purpose: create term dictionary of our courpus and Converting list of documents (corpus) into Document Term Matrix
Output : term dictionary and Document Term Matrix
"""
# Creating the term dictionary of our courpus, where every unique term is assigned an index. dictionary = corpora.Dictionary(doc_clean)
dictionary = corpora.Dictionary(doc_clean)
# Converting list of documents (corpus) into Document Term Matrix using dictionary prepared above.
doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]
# generate LDA model
return dictionary,doc_term_matrix
Gensim का उपयोग करके LSA मॉडल बनाएँ
कॉर्पस बनने के बाद, आप LSA का उपयोग करके मॉडल बना सकते हैं।
def create_gensim_lsa_model(doc_clean,number_of_topics,words):
"""
Input : clean document, number of topics and number of words associated with each topic
Purpose: create LSA model using gensim
Output : return LSA model
"""
dictionary,doc_term_matrix=prepare_corpus(doc_clean)
# generate LSA model
lsamodel = LsiModel(doc_term_matrix, num_topics=number_of_topics, id2word = dictionary) # train model
print(lsamodel.print_topics(num_topics=number_of_topics, num_words=words))
return lsamodel
विषयों की संख्या निर्धारित करें
परिणामों को बेहतर बनाने के लिए एक अतिरिक्त कदम के रूप में श्रेष्ठ संख्या में विषयों की पहचान करना आवश्यक है। यहाँ, आप श्रेष्ठ विषयों की संख्या निर्धारित करने के लिए कोहेरेंस स्कोर उत्पन्न करेंगे।
def compute_coherence_values(dictionary, doc_term_matrix, doc_clean, stop, start=2, step=3):
"""
Input : dictionary : Gensim dictionary
corpus : Gensim corpus
texts : List of input texts
stop : Max num of topics
purpose : Compute c_v coherence for various number of topics
Output : model_list : List of LSA topic models
coherence_values : Coherence values corresponding to the LDA model with respective number of topics
"""
coherence_values = []
model_list = []
for num_topics in range(start, stop, step):
# generate LSA model
model = LsiModel(doc_term_matrix, num_topics=number_of_topics, id2word = dictionary) # train model
model_list.append(model)
coherencemodel = CoherenceModel(model=model, texts=doc_clean, dictionary=dictionary, coherence='c_v')
coherence_values.append(coherencemodel.get_coherence())
return model_list, coherence_values
आइए कोहेरेंस स्कोर मानों का ग्राफ़ प्लॉट करें।
def plot_graph(doc_clean,start, stop, step):
dictionary,doc_term_matrix=prepare_corpus(doc_clean)
model_list, coherence_values = compute_coherence_values(dictionary, doc_term_matrix,doc_clean,
stop, start, step)
# Show graph
x = range(start, stop, step)
plt.plot(x, coherence_values)
plt.xlabel("Number of Topics")
plt.ylabel("Coherence score")
plt.legend(("coherence_values"), loc='best')
plt.show()
start,stop,step=2,12,1
plot_graph(clean_text,start,stop,step)

आप इस ग्राफ़ का आसानी से मूल्यांकन कर सकते हैं। यहाँ, X-अक्ष पर विषयों की संख्या और Y-अक्ष पर कोहेरेंस स्कोर है। विषयों की संख्याओं में से, 7 का कोहेरेंस स्कोर सबसे अधिक है, इसलिए श्रेष्ठ विषयों की संख्या 7 है।
ऊपर दिए गए सभी फ़ंक्शनों को चलाएँ
# LSA Model
number_of_topics=7
words=10
document_list,titles=load_data("","articles.txt")
clean_text=preprocess_data(document_list)
model=create_gensim_lsa_model(clean_text,number_of_topics,words)
Total Number of Documents: 4551
[(0, '0.361*"trump" + 0.272*"say" + 0.233*"said" + 0.166*"would" + 0.160*"clinton" + 0.140*"peopl" + 0.136*"one" + 0.126*"campaign" + 0.123*"year" + 0.110*"time"'), (1, '-0.389*"citi" + -0.370*"v" + -0.356*"h" + -0.355*"2016" + -0.354*"2017" + -0.164*"unit" + -0.159*"west" + -0.157*"manchest" + -0.116*"apr" + -0.112*"dec"'), (2, '0.612*"trump" + 0.264*"clinton" + -0.261*"eu" + -0.148*"say" + -0.137*"would" + 0.135*"donald" + -0.134*"leav" + -0.134*"uk" + 0.119*"republican" + -0.110*"cameron"'), (3, '-0.400*"min" + 0.261*"eu" + -0.183*"goal" + -0.152*"ball" + -0.132*"play" + 0.128*"said" + 0.128*"say" + -0.126*"leagu" + 0.122*"leav" + -0.122*"game"'), (4, '0.404*"bank" + -0.305*"eu" + -0.290*"min" + 0.189*"year" + -0.164*"leav" + -0.153*"cameron" + 0.143*"market" + 0.140*"rate" + -0.139*"vote" + -0.133*"say"'), (5, '0.310*"bank" + -0.307*"say" + -0.221*"peopl" + 0.203*"trump" + 0.166*"1" + 0.164*"min" + 0.163*"0" + 0.152*"eu" + 0.152*"market" + -0.138*"like"'), (6, '0.570*"say" + 0.237*"min" + -0.170*"vote" + 0.158*"govern" + -0.154*"poll" + 0.122*"tax" + 0.115*"statement" + 0.115*"bank" + 0.112*"budget" + -0.108*"one"')]
- विषय-1: "trump", "say", "said", "would", "clinton", "peopl", "one", "campaign","year","time" (अमेरिकी राष्ट्रपति चुनाव)
- विषय-2: "citi", "v", "h", "2016", "2017","unit", "west", "manchest","apr" ,"dec" (इंग्लिश प्रीमियर लीग)
- विषय-3: "trump","clinton", "eu","say","would","donald","leav","uk" ,"republican" ,"cameron" (अमेरिकी राष्ट्रपति चुनाव, ब्रेक्सिट)
- विषय-4: "min","eu","goal","ball","play","said","say","leagu","leav","game" (इंग्लिश प्रीमियर लीग)
- विषय-5: "bank","eu","min","year","leav","cameron","market","rate","vote","say" (ब्रेक्सिट और बाज़ार की स्थिति)
- विषय-6: "bank","say","peopl","trump","1" ,"min" ,"eu","market" ,"like" (राजनीतिक परिस्थितियाँ और बाज़ार की स्थितियाँ)
- विषय-7: "say","min","vote","govern","poll","tax","statement","bank","budget","one" (अमेरिकी राष्ट्रपति चुनाव और वित्तीय योजना)
यहाँ, लेटेंट सेमांटिक एनालिसिस का उपयोग करके 7 विषय खोजे गए। इनमें से कुछ विषय ओवरलैप करते हैं। एकाधिक अर्थों को अधिक सटीकता से पकड़ने के लिए हमें LDA (latent Dirichlet allocation) आज़माने की आवश्यकता है। मैं इसे आपके लिए अभ्यास के रूप में छोड़ता हूँ, Gensim का उपयोग करके इसे आज़माएँ और अपने विचार साझा करें।
LSA के फायदे और नुकसान
LSA एल्गोरिद्म सबसे सरल विधि है जो समझने और लागू करने में आसान है। यह वेक्टर स्पेस मॉडल की तुलना में बेहतर परिणाम भी देता है। यह अन्य उपलब्ध एल्गोरिद्म की तुलना में तेज़ है क्योंकि इसमें केवल डॉक्युमेंट-टर्म मैट्रिक्स का डीकंपोज़िशन शामिल है।
लेटेंट विषय के आयाम मैट्रिक्स की रैंक पर निर्भर करते हैं, इसलिए हम उस सीमा का विस्तार नहीं कर सकते। LSA से प्राप्त डीकंपोज़्ड मैट्रिक्स अत्यधिक घना होता है, इसलिए व्यक्तिगत आयाम को इंडेक्स करना कठिन होता है। LSA शब्दों के बहु-अर्थों को पकड़ने में असमर्थ है। इसे LDA (latent Dirichlet allocation) की तुलना में लागू करना आसान नहीं है। यह LDA की तुलना में कम सटीकता प्रदान करता है।
टॉपिक मॉडलिंग के उपयोग के मामले
सरल अनुप्रयोगों में जहाँ इस तकनीक का उपयोग होता है, वे हैं टेक्स्ट विश्लेषण में दस्तावेज़ क्लस्टरिंग, रिकमेंडर सिस्टम और सूचना पुनर्प्राप्ति। टॉपिक मॉडलिंग के अधिक विस्तृत उपयोग-मामले:
- रिज़्यूमे सारांशण: यह रिक्रूटर्स को एक त्वरित नज़र में रिज़्यूमे का मूल्यांकन करने में मदद कर सकता है। वे ढेर सारे रिज़्यूमे को फ़िल्टर करने में लगने वाला प्रयास घटा सकते हैं।
- सर्च इंजन ऑप्टिमाइज़ेशन: ऑनलाइन लेखों, ब्लॉग्स और दस्तावेज़ों को विषयों और संबद्ध कीवर्ड्स की पहचान करके आसानी से टैग किया जा सकता है, जो खोज परिणामों को बेहतर बनाने में सहायक हो सकता है।
- रिकमेंडर सिस्टम ऑप्टिमाइज़ेशन: रिकमेंडर सिस्टम उपयोगकर्ता प्रोफ़ाइल और पूर्व इतिहास के अनुसार सूचना फ़िल्टर और सलाहकार की तरह कार्य करते हैं। यह हमें पिछली विज़िट्स के आधार पर अनदेखी प्रासंगिक सामग्री खोजने में मदद कर सकता है।
- कस्टमर सपोर्ट में सुधार: ग्राहक शिकायतों और फीडबैक में प्रासंगिक विषयों और संबद्ध कीवर्ड्स की खोज करना, जैसे उत्पाद और सेवा विनिर्देश, विभाग और शाखा का विवरण। ऐसी जानकारी कंपनी को शिकायत को सीधे संबंधित विभाग में भेजने में मदद करती है।
- हेल्थकेयर उद्योग में, टॉपिक मॉडलिंग असंरचित चिकित्सा रिपोर्टों से उपयोगी और मूल्यवान जानकारी निकालने में मदद कर सकती है। इस जानकारी का उपयोग रोगियों के उपचार और चिकित्सा विज्ञान में अनुसंधान उद्देश्यों के लिए किया जा सकता है।
निष्कर्ष
इस ट्यूटोरियल में, आपने टॉपिक मॉडलिंग के बारे में कई विवरण कवर किए। आपने सीखा कि टॉपिक मॉडलिंग क्या है, लेटेंट सेमांटिक एनालिसिस क्या है, संबंधित मॉडल कैसे बनाए जाते हैं, और LSA का उपयोग करके विषय कैसे उत्पन्न होते हैं। साथ ही, आपने सिंगुलर वैल्यू डीकंपोज़िशन और टॉपिक कोहेरेंस स्कोर जैसे कुछ बुनियादी सिद्धांत भी कवर किए।
उम्मीद है, अब आप अपने स्वयं के डेटासेट्स का विश्लेषण करने के लिए टॉपिक मॉडलिंग का उपयोग कर सकते हैं। यह ट्यूटोरियल पढ़ने के लिए धन्यवाद!
यदि आप Python के बारे में और सीखना चाहते हैं, तो DataCamp का Case Studies in Statistical Thinking कोर्स करें।