Text Classification বা টেক্সট শ্রেণীবিভাগ হল একটি গুরুত্বপূর্ণ ন্যাচারাল ল্যাঙ্গুয়েজ প্রক্রেসিং (NLP) টাস্ক, যেখানে টেক্সট ডেটা শ্রেণীতে বিভক্ত করা হয়, যেমন স্প্যাম ডিটেকশন, সেন্টিমেন্ট অ্যানালিসিস ইত্যাদি। LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Unit) হল দুটি শক্তিশালী রিকারেন্ট নিউরাল নেটওয়ার্ক (RNN) আর্কিটেকচার যা সিকুয়েন্স ডেটার উপর কাজ করার জন্য ব্যবহৃত হয়। এই দুটি লেয়ার টেক্সট ডেটার প্রক্রিয়াকরণের জন্য উপযুক্ত, কারণ তারা দীর্ঘকালীন নির্ভরশীলতা মডেল করতে সক্ষম।
1. LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Unit) কী?
- LSTM: LSTM একটি RNN-এর একটি উন্নত সংস্করণ, যা দীর্ঘকালীন নির্ভরশীলতাগুলিকে ভালোভাবে ক্যাপচার করতে পারে, এবং গ্রেডিয়েন্ট ভ্যানিশিং সমস্যাকে সমাধান করে।
- GRU: GRU হল LSTM এর একটি সহজ সংস্করণ, যেখানে কিছু গেট কম্পোনেন্ট একত্রিত করা হয়েছে, এবং এটি কিছুটা কম প্যারামিটার সহ দ্রুত প্রশিক্ষিত হয়।
LSTM এবং GRU উভয়ই text classification টাস্কের জন্য উপযুক্ত, যেখানে আপনার টেক্সট ডেটার মধ্যে দীর্ঘকালীন সম্পর্ক এবং ধারাবাহিকতা সঠিকভাবে মডেল করা প্রয়োজন।
2. LSTM/GRU ব্যবহার করে Text Classification মডেল তৈরি করা
এখানে একটি সাধারণ LSTM বা GRU ভিত্তিক Text Classification মডেল তৈরি করার উদাহরণ দেওয়া হল। আমরা IMDB ডেটাসেট ব্যবহার করব, যা সেন্টিমেন্ট অ্যানালিসিসের জন্য জনপ্রিয়।
২.১ প্রথমে প্রয়োজনীয় লাইব্রেরি ইনস্টল ও ইমপোর্ট করা:
pip install tensorflow numpy
২.২ মডেল তৈরি করা
import numpy as np
from tensorflow.keras.datasets import imdb
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, GRU, Dense, SpatialDropout1D
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.optimizers import Adam
# ডেটাসেট লোড করা (IMDB ডেটাসেট)
max_features = 10000 # মোট 10000টি শব্দের ইনডেক্স ব্যবহার করা হবে
maxlen = 100 # ইনপুট টেক্সটের সর্বোচ্চ দৈর্ঘ্য
# IMDB ডেটাসেট লোড করা (train/test)
(X_train, y_train), (X_test, y_test) = imdb.load_data(num_words=max_features)
# প্যাডিং করা যাতে সকল সিকুয়েন্সের দৈর্ঘ্য এক সমান হয়
X_train = pad_sequences(X_train, maxlen=maxlen)
X_test = pad_sequences(X_test, maxlen=maxlen)
# মডেল তৈরি করা
def create_model(use_gru=False):
model = Sequential()
# এমবেডিং লেয়ার
model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(SpatialDropout1D(0.2)) # ড্রপআউট লেয়ার
# LSTM বা GRU লেয়ার
if use_gru:
model.add(GRU(100, dropout=0.2, recurrent_dropout=0.2))
else:
model.add(LSTM(100, dropout=0.2, recurrent_dropout=0.2))
# আউটপুট লেয়ার
model.add(Dense(1, activation='sigmoid')) # সেন্টিমেন্ট অ্যানালিসিসের জন্য sigmoid আউটপুট
# মডেল কম্পাইল করা
model.compile(loss='binary_crossentropy', optimizer=Adam(learning_rate=0.0001), metrics=['accuracy'])
return model
# LSTM মডেল তৈরি
model_lstm = create_model(use_gru=False)
# মডেল সারাংশ
model_lstm.summary()
২.৩ মডেল প্রশিক্ষণ করা:
# LSTM মডেল প্রশিক্ষণ
model_lstm.fit(X_train, y_train, epochs=5, batch_size=64, validation_data=(X_test, y_test))
এখন, আপনি যদি GRU ব্যবহার করতে চান, তাহলে create_model() ফাংশনের মধ্যে use_gru=True সেট করুন:
# GRU মডেল তৈরি
model_gru = create_model(use_gru=True)
# মডেল প্রশিক্ষণ
model_gru.fit(X_train, y_train, epochs=5, batch_size=64, validation_data=(X_test, y_test))
৩. ব্যাখ্যা:
- এম্বেডিং লেয়ার: এটি ইনপুট টেক্সট ডেটাকে এমবেডিং স্পেসে রূপান্তর করে, যেখানে প্রতিটি শব্দ একটি ভেক্টর দিয়ে উপস্থাপিত হয়।
max_featuresহল শব্দের মোট সংখ্যা এবং128হল প্রতিটি শব্দের ভেক্টরের দৈর্ঘ্য। - LSTM বা GRU লেয়ার: এই লেয়ারটি ইনপুট টেক্সট ডেটার সিকুয়েন্স থেকে গুরুত্বপূর্ণ প্যাটার্ন শিখে এবং দীর্ঘকালীন নির্ভরশীলতা সঠিকভাবে ক্যাপচার করে।
dropoutএবংrecurrent_dropoutএই লেয়ারগুলির ওভারফিটিং কমাতে সহায়তা করে। - Dense লেয়ার: এটি আউটপুট লেয়ার, যেখানে একক নিউরাল নেটওয়ার্ক আউটপুট (1 বা 0) প্রদান করে, যা binary classification এর জন্য উপযুক্ত।
- মডেল কম্পাইলিং: মডেলটি binary_crossentropy লস ফাংশন এবং Adam optimizer ব্যবহার করে কম্পাইল করা হয়েছে, কারণ আমাদের উদ্দেশ্য দুইটি ক্লাসের মধ্যে একটি নির্বাচন করা (positive/negative sentiment)।
- প্রশিক্ষণ: মডেলটিকে ৫টি ইপোকের জন্য প্রশিক্ষণ দেওয়া হচ্ছে, যাতে এটি টেক্সট ডেটার সেন্টিমেন্ট বুঝে শিখতে পারে।
৪. প্রশিক্ষণের ফলাফল:
প্রশিক্ষণের পর, মডেলটি পরীক্ষা ডেটা সেটে (test set) তার সেন্টিমেন্ট সঠিকভাবে শ্রেণীবদ্ধ করতে সক্ষম হবে। আপনি validation_accuracy ব্যবহার করে মডেলের কার্যকারিতা মূল্যায়ন করতে পারেন।
৫. মডেল মূল্যায়ন:
# মডেল মূল্যায়ন
score, accuracy = model_lstm.evaluate(X_test, y_test, batch_size=64)
print(f'Test accuracy: {accuracy * 100:.2f}%')
৬. উপসংহার:
এখানে, LSTM এবং GRU উভয়ই টেক্সট ক্লাসিফিকেশনে ব্যবহৃত হয়েছে। LSTM সাধারণত দীর্ঘকালীন নির্ভরশীলতা ধরে রাখতে সক্ষম এবং GRU দ্রুত প্রশিক্ষিত হয়, তবে কম প্যারামিটার ব্যবহার করে। উভয় মডেলই সেন্টিমেন্ট অ্যানালিসিস বা স্প্যাম ডিটেকশনের মতো টাস্কে কার্যকর হতে পারে। LSTM এবং GRU উভয়েরই ব্যবহার Text Classification মডেল তৈরির জন্য উপযুক্ত এবং প্রকল্পের পরিমাণ ও চাহিদার উপর নির্ভর করে একটি নির্বাচন করা যেতে পারে।
Read more