LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Unit) হল রিকারেন্ট নিউরাল নেটওয়ার্ক (RNN) এর উন্নত সংস্করণ যা সিকোয়েন্সাল ডেটা যেমন টেক্সট, সময় সিরিজ, বা অন্যান্য সিকোয়েন্সের উপর কাজ করতে সক্ষম। এই দুটি আর্কিটেকচার মেমরি সমস্যাগুলি সমাধান করে, যেমন দীর্ঘস্থায়ী নির্ভরতা (long-term dependencies), এবং সুতরাং টেক্সট ক্লাসিফিকেশন এর জন্য খুবই কার্যকর।
LSTM/GRU ব্যবহার করে Text Classification এর জন্য একটি সেরা অ্যাপ্রোচ
- টেক্সট প্রিপ্রসেসিং:
- টোকেনাইজেশন: প্রথমে টেক্সট ডেটাকে টোকেনাইজ করুন, অর্থাৎ শব্দ বা উপশব্দের তালিকায় পরিণত করুন।
- প্যাডিং: যেহেতু টেক্সটের দৈর্ঘ্য ভিন্ন হতে পারে, তাই ইনপুট সিকোয়েন্সগুলোকে সমান দৈর্ঘ্যে আনার জন্য প্যাডিং ব্যবহার করুন।
- স্টপওয়ার্ড রিমুভাল: অনুচিত শব্দ যেমন "the", "is", "and" ইত্যাদি বাদ দিন (যদি প্রয়োজন হয়)।
- স্টেমিং/লেমাটাইজেশন: শব্দের মূল রূপে রূপান্তর করুন (যেমন “running” কে “run” এ পরিণত করা)।
- এম্বেডিং লেয়ার:
- Word2Vec বা GloVe: শব্দকে ভেক্টরে রূপান্তর করতে প্রি-ট্রেইনড এম্বেডিং ব্যবহার করতে পারেন।
- ইনহাউস এম্বেডিং: যদি প্রি-ট্রেইনড এম্বেডিং না থাকে, তবে আপনার ডেটার উপর এম্বেডিং লেয়ার প্রশিক্ষিত করতে পারেন।
- LSTM/GRU মডেল তৈরি:
- LSTM/GRU লেয়ার: এই লেয়ারটি সিকোয়েন্সের তথ্য ধরে রাখে এবং ভবিষ্যৎ স্টেপের জন্য উপকারী তথ্য প্রদান করে।
- ডেন্স লেয়ার (Dense Layer): LSTM/GRU এর আউটপুটকে ক্যাটাগরি লেবেল নির্ধারণ করার জন্য ব্যবহার করা হয়।
- মডেল কম্পাইলিং:
- অপটিমাইজার:
AdamবাRMSpropব্যবহার করুন। - লস ফাংশন: একক ক্লাসিফিকেশনের জন্য
sparse_categorical_crossentropyবা বাইনারি ক্লাসিফিকেশনের জন্যbinary_crossentropyব্যবহার করতে পারেন। - মেট্রিক্স: সাধারণত
accuracyমেট্রিক ব্যবহার করা হয়।
- অপটিমাইজার:
- মডেল ট্রেনিং:
- ডেটাকে প্রশিক্ষণ এবং পরীক্ষা ডেটাতে ভাগ করুন।
- যথাযথ সংখ্যক এপোক এবং ব্যাচ সাইজ নির্বাচন করে মডেলটি প্রশিক্ষণ করুন।
কোড উদাহরণ
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, GRU, Dense, Embedding, Dropout
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
# 1. টেক্সট ডেটা প্রিপ্রসেসিং
texts = ["This is a positive example.", "This is a negative example.", "Another positive one.", "Negative text."]
labels = [1, 0, 1, 0] # 1=positive, 0=negative
# টোকেনাইজেশন
tokenizer = Tokenizer(num_words=10000)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
data = pad_sequences(sequences, padding='post')
# 2. মডেল তৈরির জন্য ইনপুট ডেটা প্রস্তুত
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2)
# 3. LSTM বা GRU মডেল তৈরি
model = Sequential()
model.add(Embedding(input_dim=10000, output_dim=128, input_length=data.shape[1]))
model.add(LSTM(64, return_sequences=False)) # অথবা GRU(64)
model.add(Dropout(0.5))
model.add(Dense(1, activation='sigmoid')) # বাইনারি ক্লাসিফিকেশন
# 4. মডেল কম্পাইলিং
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 5. মডেল ট্রেনিং
model.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))
LSTM এবং GRU এর মধ্যে পার্থক্য
- LSTM: দীর্ঘস্থায়ী নির্ভরতা ধরে রাখার জন্য এটি ৩টি গেট ব্যবহার করে - ইনপুট গেট, ফরগেট গেট এবং আউটপুট গেট। এই গেটগুলোর মাধ্যমে, LSTM দীর্ঘস্থায়ী তথ্য মেমোরিতে সংরক্ষণ করে এবং অপ্রয়োজনীয় তথ্য ভুলে যায়।
- GRU: GRU একটি সিম্পল সংস্করণ যা শুধুমাত্র দুটি গেট ব্যবহার করে - রিসেট গেট এবং আপডেট গেট। এটি কম কম্পিউটেশনাল খরচে একই কাজ করতে সক্ষম।
যেহেতু GRU কম্পিউটেশনের জন্য অপেক্ষাকৃত সস্তা, এটি ছোট ডেটাসেটে দ্রুত ট্রেনিং করতে পারে, তবে LSTM কিছু ক্ষেত্রে আরো ভালো পারফরম্যান্স দিতে পারে যখন ডেটার মধ্যে দীর্ঘস্থায়ী নির্ভরতা থাকে।
সারাংশ
LSTM এবং GRU মডেলগুলি টেক্সট ক্লাসিফিকেশন এবং অন্যান্য সিকোয়েন্সাল টাস্কের জন্য অত্যন্ত কার্যকরী। LSTM বা GRU মডেল ব্যবহার করে আপনি সিকোয়েন্স ডেটা যেমন টেক্সট থেকে গূঢ় তথ্য বের করতে পারেন, যা আপনার ক্লাসিফিকেশন টাস্কের জন্য গুরুত্বপূর্ণ।
Read more