তত্ত্বাবধানে থাকা শিক্ষার মাধ্যমে কীওয়ার্ড নিষ্কাশন করা কীভাবে সম্ভব তা আমি জানি না তবে আনসারভিজড লার্নিং দিয়ে কীভাবে এটি করা যায় তা আমি জানি।
এটি করার বিভিন্ন পদ্ধতি রয়েছে, সুতরাং সেগুলি এখানে:
প্রধান পুরোহিত-সংক্রান্ত
আপনি সরাসরি সাম্যতা ম্যাট্রিক্স শব্দটিতে যে কোনও শ্রেণিবিন্যাসের ক্লাস্টারিং পদ্ধতি প্রয়োগ করতে পারেন (যে কোনও মিলের ক্রিয়া সহ, কেবল কোসাইন নয়)
সাইকিট-শিখে আপনি এরকম কিছু করতে চান:
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_
সূত্র: [১]
তবে যেহেতু এটি চালিত ক্লাস্টারিং, এটি গণনাগতভাবে ব্যয়বহুল এবং এটি গণনা করতে কিছুটা সময় নেবে।
কে-পদ্ধতি
আর একটি সম্ভাবনা হ'ল শব্দ-নথির ম্যাট্রিক্সের সারিগুলিতে সাধারণ কে-মানে করা এবং তারপরে প্রতিটি সেন্ট্রয়েডের জন্য সর্বাধিক সাধারণ পদগুলি খুঁজে পাওয়া
উদাহরণস্বরূপ, সাইকিতে শিখতে হ'ল এটি করার উপায়:
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='')
সূত্র: [২]
তবে কে-মানে ইউক্লিডিয়ান দূরত্বের উপর নির্ভর করে, যা উচ্চমাত্রার তথ্যের জন্য বিরল bad অন্যান্য কৌশল রয়েছে যা পাঠ্যের জন্য আরও ভাল কাজ করে এবং কোসাইন মিলকে ব্যবহার করে
কোসিন কে-মিনস এবং স্ক্যাটার / জমায়েত
কে-মেসিন সহ কোসিন ব্যবহার করা সম্ভব (উদাহরণস্বরূপ [৩]] দেখুন : প্রতিটি ক্লাস্টারের সমস্ত নথির জন্য সেন্ট্রয়েডগুলি গণনা করুন এবং তারপরে নিকটতম সেন্ট্রয়েডের দূরত্ব গণনা করতে কোসাইন ব্যবহার করুন।
শেষে, আপনি সাধারণ কে-মাধ্যমের মতো কীওয়ার্ডগুলি একইরকম বের করতে পারেন ract
ক্লাস্টারের সমস্ত নথির গড় হিসাবে গড় সেন্ট্রয়েড গণনা করা সবসময় ভাল হয় না। স্ক্যাটার / সংগ্রহের অ্যালগরিদম [৪] এ আরও একটি পদ্ধতির পরামর্শ দেওয়া হয়েছে : একটি ক্লাস্টারের সেন্ট্রয়েড এই ক্লাস্টারের সমস্ত নথিকে একত্রিত করা ।
এই পদ্ধতির জন্য আপনাকে প্রতিটি সেন্ট্রয়েড ক্লাস্টারের জন্য সর্বাধিক ঘন শর্তাদি গ্রহণ করতে হবে।
সাইকিট শিখতে এই অ্যালগরিদমের কোনও প্রয়োগ নেই, তবে আপনি নিজে প্রসারিত করে এগুলি সহজেই প্রয়োগ করতে পারেন KMeans
।
মনে রাখবেন যে উভয় ক্ষেত্রেই সেন্ট্রয়েডগুলি বেশ ঘন হয়ে যায়: প্রতিটি ক্লাস্টারের বাকী সমস্ত নথির চেয়ে কম, সুতরাং আপনি সেন্ট্রয়েডগুলিতে শর্তগুলি কাটতে পারেন, অর্থাত "গুরুত্বহীন" মুছে ফেলতে পারেন। (দেখুন [8])।
বর্ণালী ক্লাস্টারিং
অন্য উপায় হ'ল বর্ণালী ক্লাস্টারিং প্রয়োগ করা। আপনার ইতিমধ্যে একটি মিলের ম্যাট্রিক্স সরবরাহ করতে হবে এবং এটি এতে ক্লাস্টারগুলি খুঁজে পাবে।
এটি SpectralClustering
ক্লাসে প্রয়োগ করা হয়েছে , [5] এর উদাহরণ দেখুন । নোট করুন যেহেতু আপনার ইতিমধ্যে একটি প্রাক-গণিত ম্যাট্রিক্স রয়েছে তাই আপনাকে affinity='precumputed'
আরম্ভ করার সময় অ্যাট্রিবিউট ব্যবহার করা উচিত।
স্পেকট্রাল ক্লাস্টারিং কার্নেল কে মিনের সাথে সম্পর্কিত: এখানে কাগজ রয়েছে (দেখুন []]) যা দেখায় যে তারা একই জিনিস। আমি সম্প্রতি কার্নেল কেমিনগুলির একটি বাস্তবায়ন দেখতে পেয়েছি যা দরকারী হতে পারে: https://gist.github.com/mblondel/6230787
অ-নেতিবাচক ম্যাট্রিক্স ফ্যাক্টরাইজেশন
অবশেষে, আপনি এসভিডি এর মতো লিনিয়ার বীজগণিত থেকে কিছু পচন কৌশল সহ টার্ম-ডকুমেন্ট ম্যাট্রিক্সকে ক্লাস্টার করতে পারেন (এটি তথাকথিত "লেটেন্ট সিমেটিক বিশ্লেষণ" হবে) বা নন-নেগেটিভ ম্যাট্রিক্স ফ্যাক্টরাইজেশন। দ্বিতীয়টি ক্লাস্টারিং হিসাবে দেখা যায় এবং এটি একই সময়ে ম্যাট্রিক্সের সারি এবং কলাম উভয়কেই ক্লাস্টার করতে পারে।
উদাহরণস্বরূপ, আপনি কীওয়ার্ডগুলি বের করে নিতে পারেন
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()
কোড উত্স: []]
যদিও এখানে উদাহরণগুলি পাইথন সাইকিট-লার্নে রয়েছে, আমি মনে করি আর এর জন্য কিছু উদাহরণ খুঁজে পাওয়া বড় সমস্যা হওয়া উচিত নয়
সোর্স