Natural Language Processing (NLP) এবং Text Classification মেশিন লার্নিং এবং কম্পিউটার সায়েন্সের দুটি গুরুত্বপূর্ণ ক্ষেত্র, যা ডেটা এবং ভাষার মধ্যে সম্পর্ক তৈরি করার জন্য ব্যবহৃত হয়। NLP মানুষের ভাষা বুঝতে এবং বিশ্লেষণ করতে ব্যবহৃত হয়, এবং Text Classification হলো NLP-এর একটি বিশেষ অ্যাপ্লিকেশন যা টেক্সট ডেটাকে বিভিন্ন শ্রেণিতে বিভক্ত করতে সাহায্য করে।
Natural Language Processing (NLP) হলো একটি কম্পিউটার সায়েন্সের শাখা যা কম্পিউটারকে মানুষের ভাষা বুঝতে, প্রক্রিয়া করতে এবং উৎপন্ন করতে সক্ষম করে। এটি ভাষাগত তথ্য (text, speech) কম্পিউটার দ্বারা স্বয়ংক্রিয়ভাবে প্রক্রিয়া, বিশ্লেষণ এবং অনুবাদ করার জন্য ব্যবহৃত হয়।
Text Classification হলো একটি মেশিন লার্নিং কাজ যেখানে টেক্সট ডেটাকে বিভিন্ন শ্রেণিতে বিভক্ত করা হয়। এটি টেক্সট ডেটার উপর ভিত্তি করে বিভিন্ন শ্রেণী বা ক্যাটেগরিতে ভাগ করার প্রক্রিয়া। Text Classification NLP-এর একটি গুরুত্বপূর্ণ অ্যাপ্লিকেশন, যেখানে মডেলটি নির্দিষ্ট টেক্সটের শ্রেণী বা ট্যাগ নির্ধারণ করে।
Text Classification এবং NLP উভয়ই ডেটার গভীর বিশ্লেষণ এবং গুরুত্বপূর্ণ সিদ্ধান্ত গ্রহণের জন্য অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে।
Text Preprocessing হলো যেকোনো প্রাকৃতিক ভাষা প্রক্রিয়াকরণের (NLP) প্রথম ধাপ, যার মাধ্যমে কাঁচা বা অপরিশোধিত টেক্সট ডেটাকে বিশ্লেষণযোগ্য ফর্মে রূপান্তরিত করা হয়। এটি একটি গুরুত্বপূর্ণ প্রক্রিয়া, যা মডেল তৈরির আগে ডেটার গুণগত মান উন্নত করতে সাহায্য করে। Tokenization এবং Stopwords Removal হলো টেক্সট প্রক্রিয়াকরণের দুটি গুরুত্বপূর্ণ এবং মৌলিক পদক্ষেপ।
Tokenization হলো টেক্সট ডেটাকে ছোট ছোট অংশে (যেমন শব্দ বা বাক্য) ভাগ করার প্রক্রিয়া। এই ছোট অংশগুলোকে tokens বলা হয়। Tokenization হলো প্রাকৃতিক ভাষা প্রক্রিয়াকরণের প্রথম এবং মৌলিক পদক্ষেপ, যেটি মেশিনের জন্য পাঠ্য বিশ্লেষণ সহজ করে তোলে।
Stopwords Removal হলো টেক্সট থেকে এমন শব্দগুলো সরানোর প্রক্রিয়া যেগুলোর অর্থ সাধারণত কম গুরুত্বপূর্ণ বা অপাঙক্তেয়। এই ধরনের শব্দগুলি প্রায়ই সাধারণ এবং বারবার ব্যবহৃত হয়, যেমন "is", "the", "in", "at", "on", "a", "and" ইত্যাদি। এই শব্দগুলি সাধারণত টেক্সট প্রক্রিয়াকরণের সময় মডেলকে বিভ্রান্ত করতে পারে, তাই তাদের সরিয়ে ফেলা হয়।
Tokenization এবং Stopwords Removal একে অপরের সাথে সম্পর্কিত। প্রথমে টেক্সটকে টোকেনাইজ করা হয়, অর্থাৎ শব্দ বা বাক্যে ভাগ করা হয়, তারপর Stopwords Removal প্রক্রিয়া চলে যেখানে স্টপওয়ার্ডগুলো সরানো হয়। এই দুটি প্রক্রিয়া একসাথে মডেলের জন্য আরও পরিষ্কার এবং নির্ভুল ডেটা তৈরি করতে সহায়ক।
Python-এ nltk
(Natural Language Toolkit) লাইব্রেরি ব্যবহার করে টোকেনাইজেশন এবং স্টপওয়ার্ড রিমুভাল করা যায়।
import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
# Sample text
text = "I love programming. It is fun and exciting."
# Sentence tokenization
sentences = sent_tokenize(text)
print("Sentence Tokenization:", sentences)
# Word tokenization
words = word_tokenize(text)
print("Word Tokenization:", words)
from nltk.corpus import stopwords
# Download the stopwords
nltk.download('stopwords')
# Define stopwords
stop_words = set(stopwords.words('english'))
# Example text
text = "This is an example sentence, showing off the stop words filtration."
# Tokenize text into words
words = word_tokenize(text)
# Remove stopwords
filtered_words = [word for word in words if word.lower() not in stop_words]
print("Filtered Words:", filtered_words)
TF-IDF (Term Frequency-Inverse Document Frequency) এবং Bag of Words (BoW) হলো দুটি জনপ্রিয় টেক্সট প্রক্রিয়াকরণ পদ্ধতি, যা Natural Language Processing (NLP) এবং Text Mining-এ ব্যবহৃত হয়। এগুলি টেক্সট ডেটাকে সংখ্যার আকারে রূপান্তর করতে ব্যবহৃত হয়, যাতে মেশিন লার্নিং অ্যালগরিদমগুলি সেই ডেটা ব্যবহার করতে পারে।
Bag of Words একটি সহজ এবং বেসিক টেক্সট প্রক্রিয়াকরণ পদ্ধতি যা টেক্সট ডেটাকে একটি শব্দের ভেক্টর হিসেবে রূপান্তরিত করে। এই মডেলটি একটি ডকুমেন্টের মধ্যে উপস্থিত শব্দগুলির উপস্থিতি এবং তাদের গননা (frequency) ব্যবহার করে একটি ভেক্টর তৈরি করে।
ধরা যাক, আমাদের দুটি ডকুমেন্ট:
এখন, সমস্ত ডকুমেন্টের জন্য একটি শব্দভাণ্ডার তৈরি করা হবে:
এখন প্রতিটি ডকুমেন্টের জন্য একটি ভেক্টর তৈরি করা হবে, যেখানে প্রতিটি শব্দের উপস্থিতি গোনা হবে:
TF-IDF হলো একটি উন্নত মেট্রিক যা Term Frequency (TF) এবং Inverse Document Frequency (IDF) এর সংমিশ্রণ। এটি শব্দের গুরুত্ব পরিমাপ করে, যাতে সাধারণ শব্দগুলির তুলনায় গুরুত্বপূর্ণ শব্দগুলির উপর বেশি গুরুত্ব দেওয়া হয়।
Term Frequency (TF): এটি একটি নির্দিষ্ট শব্দের ডকুমেন্টে উপস্থিতির গননা (frequency) হিসাব করে। সাধারণত, শব্দের প্রাসঙ্গিকতা যতো বেশি, তার TF ততো বেশি হবে।
ফর্মুলা:
TF=শব্দের উপস্থিতি গননাডকুমেন্টের মোট শব্দ সংখ্যা
Inverse Document Frequency (IDF): এটি একটি শব্দের গুরুত্ব পরিমাপ করে ডকুমেন্টের মধ্যে সেই শব্দের বিরলতা পরিমাপ করে। একটি শব্দ যদি ডকুমেন্টের মধ্যে বেশিরভাগ সময় উপস্থিত থাকে, তবে তার IDF কম হবে, কারণ এটি সাধারণ শব্দ।
ফর্মুলা:
IDF=log(মোট ডকুমেন্ট সংখ্যাযে ডকুমেন্টগুলিতে শব্দটি উপস্থিত আছে তাদের সংখ্যা)
TF-IDF: TF এবং IDF এর গুনফল হলো TF-IDF, যা শব্দের গুরুত্ব বা প্রাসঙ্গিকতা পরিমাপ করে।
ফর্মুলা:
TF-IDF=TF×IDF
ধরা যাক, দুটি ডকুমেন্ট:
এখন, "programming" শব্দের TF-IDF বের করার জন্য:
তাহলে, TF-IDF(programming) = 1 × 0 = 0।
বৈশিষ্ট্য | Bag of Words (BoW) | TF-IDF |
---|---|---|
শব্দের গুরুত্ব | সব শব্দকে সমান গুরুত্ব দেয়। | সাধারণ শব্দগুলির তুলনায় বিরল বা গুরুত্বপূর্ণ শব্দকে বেশি গুরুত্ব দেয়। |
কম্পিউটেশনাল খরচ | সাধারণ এবং কম্পিউটেশনে সহজ। | একটু বেশি কম্পিউটেশনাল খরচ হতে পারে কারণ TF এবং IDF হিসাব করতে হয়। |
পাঠ্য এর বৈশিষ্ট্য | শুধুমাত্র শব্দের উপস্থিতি গোনে, অর্ডার বা সংজ্ঞা বিবেচনায় নেয় না। | শব্দের গুরুত্বকে যাচাই করে, যা টেক্সটের মূল উপাদান বা অর্থ বোঝার জন্য সহায়ক। |
TF-IDF মডেল সাধারণত টেক্সট ক্লাসিফিকেশন, ইনফর্মেশন রিট্রিভাল, এবং ডকুমেন্ট সিমিলারিটি বিশ্লেষণে ব্যবহৃত হয়।
Sentiment Analysis এবং Text Classification দুটি গুরুত্বপূর্ণ টাস্ক Natural Language Processing (NLP)-এ, যা টেক্সট ডেটাকে বিভিন্ন শ্রেণীতে ভাগ করার জন্য ব্যবহৃত হয়। এগুলি বিশেষভাবে ব্যবহৃত হয় যখন আপনার টেক্সট ডেটার মধ্যে অনুভূতি বা তথ্য শ্রেণীবদ্ধ করা প্রয়োজন।
Sentiment Analysis হলো একটি প্রক্রিয়া যার মাধ্যমে টেক্সট ডেটার মধ্যে আবেগ বা অনুভূতি শনাক্ত করা হয়। এটি মূলত টেক্সটের পজিটিভ, নেগেটিভ অথবা নিরপেক্ষ (positive, negative, neutral) অনুভূতি বা সেন্টিমেন্ট বোঝার জন্য ব্যবহৃত হয়। এই পদ্ধতিটি অনেক ব্যবসায়িক এবং সামাজিক যোগাযোগ মাধ্যম বিশ্লেষণে ব্যবহার করা হয়, যেখানে টেক্সট বা কমেন্টের মাধ্যমে গ্রাহকদের অনুভূতি বোঝা গুরুত্বপূর্ণ।
from textblob import TextBlob
# টেক্সট ডেটা
text = "I love this product, it's amazing!"
# Sentiment Analysis
blob = TextBlob(text)
sentiment = blob.sentiment
print(f"Sentiment: {sentiment}")
আউটপুট:
Sentiment: (polarity=0.5, subjectivity=0.6)
Polarity ০ থেকে ১ এর মধ্যে পজিটিভ সেন্টিমেন্ট এবং ০ থেকে -১ এর মধ্যে নেগেটিভ সেন্টিমেন্ট নির্দেশ করে। Subjectivity নির্ধারণ করে যে টেক্সটটি কতোটা ব্যক্তিগত মতামত বা তথ্য ভিত্তিক।
Text Classification হলো একটি প্রক্রিয়া যার মাধ্যমে টেক্সট ডেটাকে বিভিন্ন শ্রেণী বা ক্লাসে ভাগ করা হয়। এটি একটি সাধারণ NLP টাস্ক যা বিভিন্ন ধরনের তথ্য শ্রেণীবদ্ধ করতে সাহায্য করে। Text Classification অনেক কাজে ব্যবহার করা হয়, যেমন স্প্যাম ডিটেকশন, টপিক মডেলিং, ইমেইল ফিল্টারিং, এবং রিভিউ ক্লাসিফিকেশন।
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split
# উদাহরণ ডেটাসেট
texts = ['I love programming', 'I hate bugs', 'Python is great', 'I hate errors']
labels = ['positive', 'negative', 'positive', 'negative']
# টেক্সট ফিচার এক্সট্রাকশন
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(texts)
# ডেটা স্প্লিট
X_train, X_test, y_train, y_test = train_test_split(X, labels, test_size=0.2, random_state=42)
# Naive Bayes মডেল ট্রেনিং
model = MultinomialNB()
model.fit(X_train, y_train)
# পূর্বাভাস
prediction = model.predict(X_test)
print(f"Prediction: {prediction}")
আউটপুট:
Prediction: ['positive']
এখানে, মডেলটি I love programming
টেক্সটটি positive শ্রেণীতে শ্রেণীবদ্ধ করেছে।
বৈশিষ্ট্য | Sentiment Analysis | Text Classification |
---|---|---|
উদ্দেশ্য | টেক্সটের অনুভূতি বা আবেগ (পজিটিভ, নেগেটিভ, নিউট্রাল) শনাক্ত করা | টেক্সটকে নির্দিষ্ট শ্রেণীতে ভাগ করা (যেমন, স্প্যাম বা নন-স্প্যাম) |
ব্যবহার | গ্রাহকের প্রতিক্রিয়া বা সোশ্যাল মিডিয়া মনিটরিং | টপিক ক্লাসিফিকেশন, স্প্যাম ডিটেকশন, ইমেইল ফিল্টারিং |
আবেগ ভিত্তিক | হ্যাঁ, আবেগ শনাক্তকরণ | না, এটি কেবল শ্রেণীভিত্তিক (topic or category) বিশ্লেষণ |
আউটপুট | পজিটিভ, নেগেটিভ, নিউট্রাল | শ্রেণী বা ক্লাস (যেমন, স্প্যাম, রাজনৈতিক, ক্রীড়া) |
CountVectorizer
এবং TfidfVectorizer
হল Scikit-Learn এর দুটি গুরুত্বপূর্ণ টুল, যা টেক্সট ডেটা প্রক্রিয়াকরণ এবং ফিচার এক্সট্র্যাকশন এর জন্য ব্যবহৃত হয়। এই দুইটি ভেক্টরাইজার টেক্সট ডেটা থেকে ফিচার (features) বের করে, যেগুলি মেশিন লার্নিং মডেল ট্রেনিংয়ে ব্যবহৃত হয়।
CountVectorizer একটি বেসিক টেকনিক যা টেক্সট ডেটাকে একটি ম্যাট্রিক্সে রূপান্তরিত করে, যেখানে প্রতিটি কলাম একটি শব্দের (word) উপস্থিতি বা ফ্রিকোয়েন্সি (frequency) নির্দেশ করে। এটি প্রতিটি শব্দের সংখ্যা গণনা করে এবং টেক্সট ডেটার একটি ডকুমেন্ট-ওয়ার্ড ম্যাট্রিক্স তৈরি করে।
from sklearn.feature_extraction.text import CountVectorizer
# টেক্সট ডেটা
corpus = [
'I love programming',
'Programming is fun',
'I love fun'
]
# CountVectorizer ব্যবহার করা
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
# আউটপুট দেখানো
print("Feature Names:", vectorizer.get_feature_names_out())
print("Bag of Words Matrix:\n", X.toarray())
আউটপুট:
Feature Names: ['fun' 'is' 'love' 'programming']
Bag of Words Matrix:
[[0 0 1 1]
[1 1 0 1]
[1 0 1 0]]
এখানে, আমরা দেখতে পাচ্ছি যে "fun", "is", "love", "programming" শব্দগুলির উপস্থিতি ম্যাট্রিক্সে গণনা করা হয়েছে।
TfidfVectorizer (Term Frequency - Inverse Document Frequency) একটি উন্নত পদ্ধতি যা শব্দের অহমিয়তা নির্ধারণ করে। এটি শব্দের সাধারণতা এবং বিশেষত্ব (importance) পরিমাপ করে, এবং প্রত্যেক শব্দের জন্য একটি স্কোর প্রদান করে। TF-IDF শব্দের তীব্রতা নির্ধারণ করতে সাহায্য করে, যেখানে একটি শব্দ যতো বেশি বিশেষ (specific) এবং কম সাধারণ (common), তার স্কোর তত বেশি হবে।
Term Frequency (TF): এটি কোন শব্দের উপস্থিতির সংখ্যাকে সাধারণত ডকুমেন্টের মোট শব্দের সাথে তুলনা করে।
TF=শব্দটির সংখ্যাডকুমেন্টের মোট শব্দের সংখ্যা
Inverse Document Frequency (IDF): এটি একটি শব্দের বিশেষত্ব মাপতে সাহায্য করে, এবং এটি হিসাব করে যে একটি শব্দ ডেটাসেটে কতোটা বিরল (rare)।
IDF=log(ডকুমেন্ট সংখ্যাবিশেষ শব্দের উপস্থিতি সংখ্যার সাথে ডকুমেন্ট সংখ্যা)
TF-IDF Calculation:
একটি শব্দের TF-IDF স্কোর উভয় TF এবং IDF এর গুণফল। এর মাধ্যমে, টেক্সট ডেটাতে বেশি গুরুত্বপূর্ণ শব্দগুলো আলাদা করা যায়।
TF-IDF=TF×IDF
from sklearn.feature_extraction.text import TfidfVectorizer
# টেক্সট ডেটা
corpus = [
'I love programming',
'Programming is fun',
'I love fun'
]
# TfidfVectorizer ব্যবহার করা
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(corpus)
# আউটপুট দেখানো
print("Feature Names:", vectorizer.get_feature_names_out())
print("TF-IDF Matrix:\n", X.toarray())
আউটপুট:
Feature Names: ['fun' 'is' 'love' 'programming']
TF-IDF Matrix:
[[0. 0. 0.70710678 0.70710678]
[0.57735027 0.57735027 0. 0.57735027]
[0.57735027 0. 0.70710678 0. ]]
এখানে, প্রতিটি শব্দের জন্য TF-IDF স্কোর তৈরি হয়েছে। দেখা যাচ্ছে যে "love" এবং "programming" শব্দগুলি তুলনামূলকভাবে বেশি গুরুত্বপূর্ণ, কারণ তাদের স্কোর তুলনামূলকভাবে বেশি।
বৈশিষ্ট্য | CountVectorizer | TfidfVectorizer |
---|---|---|
ফিচারের মাপ | শব্দের উপস্থিতির সংখ্যা (frequency) | শব্দের উপস্থিতি ও তার গুরুত্ব (importance) |
ডেটা স্কেলিং | নয়, শুধুমাত্র শব্দের সংখ্যা | TF-IDF স্কোর দিয়ে স্কেলিং |
বিরল শব্দের গুরুত্ব | সকল শব্দের গুরুত্ব সমান | বিরল শব্দের স্কোর বেশি (বিশেষ শব্দের গুরুত্ব বেশি) |
ব্যবহার | সাধারণ ডেটা প্রক্রিয়াকরণ | গুরুত্বপূর্ণ শব্দ খুঁজে বের করা |
এই দুটি টুল সাধারণত টেক্সট ক্লাসিফিকেশন, স্প্যাম ডিটেকশন, টেক্সট মাইনিং ইত্যাদি কাজে ব্যবহৃত হয়।
Read more