স্বয়ংক্রিয় কীওয়ার্ড নিষ্কাশন: বৈশিষ্ট্য হিসাবে কোসাইন মিল ব্যবহার করে


12

আমি একটি ডকুমেন্ট-টার্ম ম্যাট্রিক্স পেয়েছি এবং এখন আমি তত্ত্বাবধানে শেখার পদ্ধতি (এসভিএম, নাইভ বয়েস, ...) সহ প্রতিটি নথির জন্য কীওয়ার্ডগুলি বের করতে চাই। এই মডেলটিতে, আমি ইতিমধ্যে টিএফ-আইডিএফ, পোস্ট ট্যাগ, ...M

তবে এখন আমি নেেক্সট নিয়ে ভাবছি। পদগুলির মধ্যে কোসাইন মিলের সাথে আমি একটি ম্যাট্রিক্স পেয়েছি ।C

এই মডেলগুলির বৈশিষ্ট্য হিসাবে এই মিলগুলি ব্যবহার করার কোনও সম্ভাবনা আছে কি? আমার ধারণা মেয়াদে ছিল নথিতে , দস্তাবেজে থাকা সমস্ত পদ কোসাইন মিল গড় ব্যবহার করতে শব্দটি সঙ্গে । এটি কি দরকারী?আমিআমি


আপনি গুগলে অনুসন্ধান করেছেন? আমি "কোসাইন অনুরূপ কীওয়ার্ড এক্সট্রাকশন" এর অধীনে প্রচুর হিট পেয়েছি যা দেখে মনে হয় যে তারা আপনাকে শুরু করতে পারে
শ্যাডট্যালকার

আমি গুগলে অনেক অনুসন্ধান করেছি এবং আমি এতে "কোসাইন মিল" এবং "কীওয়ার্ড নিষ্কাশন" শব্দটি সহ অনেকগুলি কাগজপত্র পড়েছি। তবে আমি এমন কোনও কাগজ পাইনি যেখানে তারা কীওয়ার্ডগুলি বের করতে বৈশিষ্ট্য হিসাবে কোসাইন মিলের মতো কিছু ব্যবহার করে
সিল্ক

উত্তর:


12

তত্ত্বাবধানে থাকা শিক্ষার মাধ্যমে কীওয়ার্ড নিষ্কাশন করা কীভাবে সম্ভব তা আমি জানি না তবে আনসারভিজড লার্নিং দিয়ে কীভাবে এটি করা যায় তা আমি জানি।

এটি করার বিভিন্ন পদ্ধতি রয়েছে, সুতরাং সেগুলি এখানে:

প্রধান পুরোহিত-সংক্রান্ত

আপনি সরাসরি সাম্যতা ম্যাট্রিক্স শব্দটিতে যে কোনও শ্রেণিবিন্যাসের ক্লাস্টারিং পদ্ধতি প্রয়োগ করতে পারেন (যে কোনও মিলের ক্রিয়া সহ, কেবল কোসাইন নয়)

সাইকিট-শিখে আপনি এরকম কিছু করতে চান:

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()

কোড উত্স: []]

যদিও এখানে উদাহরণগুলি পাইথন সাইকিট-লার্নে রয়েছে, আমি মনে করি আর এর জন্য কিছু উদাহরণ খুঁজে পাওয়া বড় সমস্যা হওয়া উচিত নয়

সোর্স


1
এটি একটি অবিশ্বাস্যভাবে উচ্চ মানের উত্তর। ধন্যবাদ! শব্দগুলিকে গুচ্ছ করার জন্য সাইকিতের স্নেহ-প্রজনন প্রচারের অ্যালগরিদমটি ব্যবহার করার বিষয়ে আপনার কোনও ধারণা আছে? অ্যালগরিদমের প্রাকম্পিউটিভ অ্যাফিলিটি ম্যাট্রিক্স হিসাবে কোসাইন মিলের মানগুলি ব্যবহার করা যেতে পারে (আমি বিশ্বাস করি যে দূরত্বগুলির চেয়ে মিলগুলির প্রয়োজন হবে)।
নীলশিভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.