मुझे नहीं पता कि पर्यवेक्षित शिक्षण के साथ कीवर्ड निष्कर्षण करना कैसे संभव है, लेकिन मैं यह जानता हूं कि इसे बिना पढ़े हुए शिक्षण के साथ कैसे किया जाता है।
ऐसा करने के कई तरीके हैं, इसलिए वे यहां हैं:
श्रेणीबद्ध
आप सीधे समानता मैट्रिक्स पर किसी भी पदानुक्रमिक क्लस्टरिंग विधि को लागू कर सकते हैं (किसी भी समानता फ़ंक्शन के साथ, केवल कोसाइन नहीं)
स्किटिट-लर्न में आप कुछ इस तरह से करेंगे:
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from sklearn.cluster import AgglomerativeClustering
vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(data)
C = 1 - cosine_similarity(X.T)
ward = AgglomerativeClustering(n_clusters=k, linkage='ward').fit(C)
label = ward.labels_
स्रोत: [१]
लेकिन चूंकि यह एग्लोमेरेटिव क्लस्टरिंग है, इसलिए यह कम्प्यूटेशनल रूप से महंगा है और इसे गणना करने में थोड़ा समय लगेगा।
कश्मीर साधन
एक और संभावना है कि टर्म-डॉक्यूमेंट मैट्रिक्स की पंक्तियों पर सामान्य k- साधन करें, और फिर प्रत्येक सेंट्रोइड के लिए सबसे सामान्य शब्द खोजें
उदाहरण के लिए, scikit में जानें कि यह करने का तरीका है:
from sklearn.cluster import KMeans
km = KMeans(n_clusters=k, init='k-means++', max_iter=100, n_init=1)
km.fit(X)
order_centroids = km.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(k):
print("Cluster %d:" % i, end='')
for ind in order_centroids[i, :10]:
print(' %s' % terms[ind], end='')
स्रोत: [२]
लेकिन के-साधन यूक्लिडियन दूरी पर निर्भर करता है, जो विरल उच्च-आयामी डेटा के लिए खराब है। ऐसी अन्य तकनीकें हैं जो ग्रंथों के लिए बेहतर काम करती हैं और कॉस्मिक समानता का उपयोग करती हैं
कोसाइन के-मीन्स और स्कैटर / इकट्ठा
के- माध्य (देखें [3] देखें ) के साथ कोसाइन का उपयोग करना संभव है : प्रत्येक क्लस्टर में सभी दस्तावेजों पर माध्य के रूप में सेंट्रोइड्स की गणना करें, और फिर निकटतम सेंटीमीटर की दूरी की गणना करने के लिए कोसाइन का उपयोग करें।
अंत में, आप कीवर्ड को उसी तरह से निकाल सकते हैं जैसे कि सामान्य k- साधनों के लिए।
क्लस्टर में सभी दस्तावेजों के औसत के रूप में औसत सेंट्रोइड की गणना करना हमेशा अच्छा नहीं होता है। स्कैटर / गैदर एल्गोरिथ्म [4] में एक और दृष्टिकोण का सुझाव दिया गया है : एक क्लस्टर का केन्द्रक इस क्लस्टर में सभी दस्तावेजों का समाकलन है।
इस दृष्टिकोण के लिए आपको बस प्रत्येक सेंट्रोइड क्लस्टर के लिए सबसे अधिक बार शब्द लेने होंगे।
स्किकिट में इन एल्गोरिदम का कोई भी कार्यान्वयन नहीं है, लेकिन आप आसानी से इन्हें लागू करके खुद को लागू कर सकते हैं KMeans
।
ध्यान दें कि दोनों मामलों में सेंट्रोइड काफी घने हो जाते हैं: प्रत्येक क्लस्टर्स में बाकी दस्तावेजों की तुलना में सघन, इसलिए आप सेंट्रोइड में शर्तों को छोटा करना चाहते हैं , अर्थात "महत्वहीन" को हटा सकते हैं। (देखें [8])।
वर्णक्रमीय क्लस्टरिंग
एक अन्य तरीका वर्णक्रमीय क्लस्टरिंग लागू करना होगा। आपको एक समानता मैट्रिक्स की आपूर्ति करने की आवश्यकता होगी, जो आपके पास पहले से है, और इस पर क्लस्टर मिलेंगे।
इसे SpectralClustering
कक्षा में लागू किया गया है , उदाहरण देखें [5] में । ध्यान दें कि चूंकि आपके पास पहले से ही एक पूर्व-संकलित मैट्रिक्स है, इसलिए आपको affinity='precumputed'
आरंभ करते समय विशेषता का उपयोग करने की आवश्यकता होती है।
वर्णक्रमीय क्लस्टरिंग कर्नेल केमन्स से संबंधित है: इसमें कागज (देखें [7]) है जो दर्शाता है कि वे एक ही चीज हैं। मैं हाल ही में कर्नेल केमन्स के कार्यान्वयन में आया था जो उपयोगी हो सकते हैं: https://gist.github.com/mblondel/b30308787
गैर-नकारात्मक मैट्रिक्स फैक्टराइजेशन
अंत में, आप एसवीडी (यह तथाकथित "लेज़ेंट सिमेंटिक एनालिसिस") या नॉन-निगेटिव मैट्रिक्स फैक्टराइजेशन जैसे रैखिक बीजगणित से कुछ अपघटन तकनीकों के साथ टर्म-डॉक्यूमेंट मैट्रिक्स को क्लस्टर कर सकते हैं। उत्तरार्द्ध को क्लस्टरिंग के रूप में देखा जा सकता है, और यह एक ही समय में मैट्रिक्स की दोनों पंक्तियों और स्तंभों को क्लस्टर कर सकता है।
उदाहरण के लिए, आप कीवर्ड कर सकते हैं
from sklearn.decomposition import NMF
nmf = NMF(n_components=k, random_state=1).fit(X)
feature_names = vectorizer.get_feature_names()
for topic_idx, topic in enumerate(nmf.components_):
print("Topic #%d:" % topic_idx)
print(" ".join([feature_names[i]
for i in topic.argsort()[:-10-1:-1]]))
print()
कोड स्रोत: [६]
यहाँ तक कि उदाहरण अजगर स्किकिट-लर्न में हैं, मुझे लगता है कि आर के लिए कुछ उदाहरण ढूंढना एक बड़ी समस्या नहीं होनी चाहिए
सूत्रों का कहना है