Natural Language Processing (NLP) হল একটি অঙ্গ যেখানে কম্পিউটারকে মানুষের ভাষা বুঝতে এবং প্রক্রিয়া করতে সক্ষম করা হয়। NLP প্রযুক্তি ভাষা সংক্রান্ত অনেক কাজ যেমন টেক্সট ক্লাসিফিকেশন, টেক্সট সনাক্তকরণ, টেক্সট জেনারেশন, ভাষার অনুবাদ ইত্যাদি সমাধান করতে ব্যবহৃত হয়।
একটি গুরুত্বপূর্ণ কাজ, যা NLP-এর মাধ্যমে সম্পাদিত হয়, তা হল Text Classification। এটি একটি সুপারভাইজড লার্নিং টাস্ক যেখানে টেক্সট ডেটাকে একটি বা একাধিক শ্রেণী বা লেবেল বরাদ্দ করা হয়। উদাহরণস্বরূপ, ইমেইল স্প্যাম ক্লাসিফিকেশন, সোশ্যাল মিডিয়া পোস্টগুলির মধ্যে সেন্টিমেন্ট অ্যানালিসিস, সংবাদ বিভাগের শ্রেণীবিভাগ ইত্যাদি।
NLP এর প্রধান লক্ষ্য হল কম্পিউটারকে মানুষের ভাষা (টেক্সট এবং স্পিচ) বুঝতে এবং এটি থেকে তথ্য নির্ধারণে সাহায্য করা। NLP প্রযুক্তির কিছু প্রধান অংশ:
Text Classification হল একটি সুপারভাইজড মেশিন লার্নিং টাস্ক, যেখানে একটি মডেলকে এমনভাবে প্রশিক্ষিত করা হয় যে, এটি একটি টেক্সটের সঠিক শ্রেণী বা লেবেল নির্ধারণ করতে পারে। এটি বিভিন্ন কাজের জন্য ব্যবহার করা যায়, যেমন:
Text Classification মডেল তৈরির জন্য সাধারণত কয়েকটি পদক্ষেপ অনুসরণ করা হয়:
এখানে আমরা একটি সিম্পল Text Classification সমস্যা সমাধানের জন্য Naive Bayes classifier ব্যবহার করব এবং TF-IDF feature extraction টেকনিক প্রয়োগ করব।
import nltk
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.metrics import accuracy_score, classification_report
# Example data (text data and labels)
texts = ["I love programming", "I hate bugs", "Python is amazing", "Java is difficult", "I love debugging", "Java is great"]
labels = ["positive", "negative", "positive", "negative", "positive", "positive"]
# Train-test split
X_train, X_test, y_train, y_test = train_test_split(texts, labels, test_size=0.3, random_state=42)
# Vectorize the text data using TF-IDF
vectorizer = TfidfVectorizer(stop_words='english')
X_train_tfidf = vectorizer.fit_transform(X_train)
X_test_tfidf = vectorizer.transform(X_test)
# Train a Naive Bayes classifier
model = MultinomialNB()
model.fit(X_train_tfidf, y_train)
# Predict on test data
y_pred = model.predict(X_test_tfidf)
# Accuracy
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
# Classification report (Precision, Recall, F1-score)
print(classification_report(y_test, y_pred))
এছাড়াও, Deep Learning মডেলগুলো যেমন RNNs, LSTMs, এবং Transformers (BERT) ইত্যাদি টেক্সট ক্লাসিফিকেশন টাস্কে খুবই কার্যকরী হতে পারে। যেমন, BERT মডেলটি আদি ভাষার প্রতিফলন এবং সম্পর্ক চিহ্নিত করতে খুবই শক্তিশালী।
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Texts and labels
texts = ["I love programming", "I hate bugs", "Python is amazing", "Java is difficult", "I love debugging", "Java is great"]
labels = [1, 0, 1, 0, 1, 1] # 1 = positive, 0 = negative
# Tokenization
tokenizer = Tokenizer(num_words=1000)
tokenizer.fit_on_texts(texts)
X = tokenizer.texts_to_sequences(texts)
X = pad_sequences(X)
# Model creation
model = Sequential()
model.add(Embedding(input_dim=1000, output_dim=64, input_length=X.shape[1]))
model.add(LSTM(64))
model.add(Dense(1, activation='sigmoid')) # Sigmoid for binary classification
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Train model
model.fit(X, labels, epochs=5, batch_size=2)
এভাবে, NLP এবং Text Classification প্রক্রিয়াগুলি একসাথে ব্যবহার করে আপনি টেক্সট ডেটাকে শ্রেণীভুক্ত করতে এবং বিভিন্ন প্রাকৃতিক ভাষার কাজ সমাধান করতে পারেন।
Natural Language Processing (NLP) হল কম্পিউটার সায়েন্স এবং আর্টিফিশিয়াল ইন্টেলিজেন্স (AI) এর একটি শাখা যা কম্পিউটার এবং মানুষের ভাষার মধ্যে যোগাযোগ স্থাপন করে। এর মাধ্যমে কম্পিউটারগুলো মানুষের ভাষা বুঝতে, বিশ্লেষণ করতে, এবং স্বাভাবিক ভাষায় প্রতিক্রিয়া জানাতে সক্ষম হয়। NLP বিভিন্ন ভাষা, গ্রামার, এবং শব্দের অর্থ বিশ্লেষণ করে, যাতে কম্পিউটারগুলো মানুষের ভাষাকে বুঝতে পারে এবং তার ভিত্তিতে কাজ করতে পারে।
NLP কম্পিউটারের জন্য মানুষের ভাষা বোঝার ক্ষমতা তৈরি করে, যা একটি বহুল ব্যবহৃত প্রযুক্তি হিসেবে পরিণত হয়েছে। এর ভূমিকা বিশাল এবং বিভিন্ন ক্ষেত্রে গুরুত্বপূর্ণ। নিচে কিছু প্রাথমিক ভূমিকা দেওয়া হল:
NLP এর মূল ধারণা অনেকগুলো টেকনিক ও মেথডের ওপর ভিত্তি করে কাজ করে, যা ভাষার বিভিন্ন স্তরে কাজ করতে সাহায্য করে। নিচে কিছু গুরুত্বপূর্ণ ধারণা এবং টেকনিক আলোচনা করা হলো:
Tokenization: Tokenization হল টেক্সট ডেটাকে ছোট ছোট অংশে বিভক্ত করার প্রক্রিয়া। একটি বড় টেক্সটকে শব্দ বা বাক্যে ভাগ করা হয়, যা পরে প্রক্রিয়া করা সহজ হয়।
উদাহরণ:
Part of Speech (POS) Tagging: POS Tagging হল একটি প্রক্রিয়া যার মাধ্যমে শব্দের গ্রামাটিক্যাল ভূমিকা নির্ধারণ করা হয়। যেমন, একটি শব্দ noun, verb, adjective, ইত্যাদি কী তা চিহ্নিত করা।
উদাহরণ:
Named Entity Recognition (NER): NER একটি টেকনিক যা টেক্সট থেকে নির্দিষ্ট নাম, স্থান, তারিখ, অথবা অন্যান্য গুরুত্বপূর্ণ তথ্য চিহ্নিত করতে সাহায্য করে। এটি সরাসরি Entity Recognition হিসেবে পরিচিত।
উদাহরণ:
Sentiment Analysis: Sentiment analysis হল টেক্সটের মধ্যে থাকা আবেগ বা অনুভূতির নির্ধারণের প্রক্রিয়া। এটি সাধারণত ৩টি শ্রেণীতে ভাগ করা হয়—ইতিবাচক (positive), নেতিবাচক (negative), এবং নিরপেক্ষ (neutral)।
উদাহরণ:
NLP হলো কম্পিউটার সায়েন্স এবং লিঙ্গুইস্টিকসের একটি গুরুত্বপূর্ণ শাখা, যার মাধ্যমে কম্পিউটারকে মানুষের ভাষা বোঝার ক্ষমতা দেওয়া হয়। এর সাহায্যে বিভিন্ন অ্যাপ্লিকেশন তৈরি করা সম্ভব, যেমন ভাষার অনুবাদ, স্পিচ রিকগনিশন, চ্যাটবট, সেনটিমেন্ট অ্যানালাইসিস, এবং আরও অনেক কিছু। NLP অনেক শক্তিশালী মেথড ব্যবহার করে, যার মাধ্যমে কম্পিউটারকে ভাষা বিশ্লেষণ এবং ব্যবহারে সক্ষম করা হয়।
Text Data Preprocessing হল একটি গুরুত্বপূর্ণ প্রক্রিয়া যা মেশিন লার্নিং বা ডীপ লার্নিং মডেল প্রশিক্ষণের আগে টেক্সট ডেটাকে উপযুক্ত ফর্ম্যাটে রূপান্তরিত করতে ব্যবহৃত হয়। এর মধ্যে টেক্সট ক্লিনিং, tokenization, padding, এবং embedding সহ অন্যান্য ধাপ অন্তর্ভুক্ত থাকে। চলুন, এই ধাপগুলির বিস্তারিত আলোচনা করি।
Tokenization হল একটি প্রক্রিয়া, যেখানে একটি বড় টেক্সট স্ট্রিংকে ছোট ছোট ইউনিট (যেমন শব্দ বা অক্ষর) বা tokens-এ ভাগ করা হয়। এটি মডেলের জন্য টেক্সট ডেটাকে যথাযথভাবে বিশ্লেষণ করা এবং এর উপাদানগুলোকে সনাক্ত করা সহজ করে।
Tokenization উদাহরণ:
from tensorflow.keras.preprocessing.text import Tokenizer
# উদাহরণ টেক্সট
texts = ["I love machine learning", "Machine learning is amazing"]
# Tokenizer তৈরি করা
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
# টোকেনাইজড শব্দগুলি দেখা
sequences = tokenizer.texts_to_sequences(texts)
print(sequences)
Output:
[[1, 2, 3, 4], [3, 4, 5, 6]]
এখানে, শব্দগুলি ইন্টিজারে রূপান্তরিত হয়েছে (যেমন, "I" → 1, "love" → 2, "machine" → 3, ইত্যাদি)। texts_to_sequences()
মেথডের মাধ্যমে টেক্সটকে সিকোয়েন্স আকারে রূপান্তরিত করা হয়েছে।
Padding হল একটি প্রক্রিয়া যেখানে টোকেনাইজড সিকোয়েন্সের দৈর্ঘ্য সমান করার জন্য এক বা একাধিক প্যাডিং যুক্ত করা হয়। বেশিরভাগ মেশিন লার্নিং মডেল সমান দৈর্ঘ্যের ইনপুট ডেটা চায়, তাই এই ধাপটি খুবই গুরুত্বপূর্ণ। pad_sequences()
ফাংশনটি ব্যবহার করে আমরা সিকোয়েন্সের দৈর্ঘ্য সমান করতে পারি।
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Padding করার আগে সিকোয়েন্স
sequences = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]
# Padding
padded_sequences = pad_sequences(sequences, padding='post')
print(padded_sequences)
Output:
[[1 2 3 0]
[4 5 0 0]
[6 7 8 9]]
এখানে, padding='post'
ব্যবহার করা হয়েছে, যার মানে হল যে, প্যাডিং সিকোয়েন্সের শেষে যোগ হবে। এছাড়া, আপনি padding='pre'
ব্যবহার করে প্যাডিং সিকোয়েন্সের শুরুতে যোগ করতে পারেন।
Embedding হল একটি টেকনিক যা একটি শব্দ বা টোকেনকে একটি সুনির্দিষ্ট ডেনস ভেক্টরে রূপান্তরিত করে। এটি শব্দের গাণিতিক উপস্থাপনা, যা শব্দের মধ্যে সম্পর্ককে ধরতে সাহায্য করে। Keras এ Embedding
লেয়ার ব্যবহার করা যায় যা অটোমেটিকভাবে টোকেন ভেক্টর তৈরি করে এবং মডেল প্রশিক্ষণের সময় এটি শিখে নেয়।
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Flatten, Dense
# মডেল তৈরি করা
model = Sequential()
# Embedding layer (input_dim: vocabulary size, output_dim: embedding dimensions)
model.add(Embedding(input_dim=10, output_dim=8, input_length=4))
# Flattening এবং fully connected layer যোগ করা
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
model.summary()
Explanation:
Embedding
লেয়ার শব্দকে একটি গাণিতিক ভেক্টরে রূপান্তরিত করবে, যা মডেলটি শিখে নিতে সক্ষম। এখানে মডেলটি শুধুমাত্র একটি সিকোয়েন্সে 4 টোকেন নিয়ে কাজ করবে এবং প্রতিটি টোকেনের জন্য 8 ডাইমেনশনাল embedding তৈরি করবে।
এখানে একটি পূর্ণাঙ্গ উদাহরণ দেওয়া হলো, যাতে আমরা টোকেনাইজেশন, প্যাডিং এবং এমবেডিং একত্রে ব্যবহার করে একটি টেক্সট ডেটাসেট প্রিপ্রসেস করি।
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, Flatten, Dense
# উদাহরণ টেক্সট ডেটা
texts = ["I love machine learning", "Deep learning is fun", "Machine learning is great"]
# Tokenizer তৈরি করা
tokenizer = Tokenizer()
tokenizer.fit_on_texts(texts)
# টোকেনাইজড সিকোয়েন্স
sequences = tokenizer.texts_to_sequences(texts)
# Padding করা
padded_sequences = pad_sequences(sequences, padding='post')
# মডেল তৈরি করা
model = Sequential()
model.add(Embedding(input_dim=10, output_dim=8, input_length=padded_sequences.shape[1]))
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# মডেল সারাংশ
model.summary()
# মডেল প্রশিক্ষণ (এই উদাহরণে আমরা টার্গেট ডেটা দেব না)
# model.fit(padded_sequences, target_data, epochs=10)
এই প্রক্রিয়াগুলি মেশিন লার্নিং মডেল প্রশিক্ষণের জন্য টেক্সট ডেটা প্রিপ্রসেসিংয়ের গুরুত্বপূর্ণ অংশ।
LSTM (Long Short-Term Memory) এবং GRU (Gated Recurrent Unit) হল Recurrent Neural Networks (RNNs) এর উন্নত ভার্সন, যা বিশেষভাবে টেক্সট, স্পিচ, এবং টাইম সিরিজ ডেটা প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। LSTM এবং GRU মডেলগুলি দীর্ঘকালীন নির্ভরতা (long-term dependencies) শেখার জন্য অত্যন্ত উপকারী, যেগুলি সাধারণ RNN মডেলগুলি শিখতে পারে না।
Text Classification এর জন্য LSTM বা GRU এর মতো মডেল ব্যবহার করা হয়, যেখানে টেক্সট ডেটা শ্রেণীভিত্তিক করা হয়, যেমন স্প্যাম ইমেইল শ্রেণীকরণ, সেন্টিমেন্ট এনালাইসিস, ভাষা শনাক্তকরণ ইত্যাদি।
এখানে LSTM/GRU ব্যবহার করে টেক্সট ক্লাসিফিকেশন মডেল তৈরি করার জন্য ধাপ-by-ধাপ কোড প্রদান করা হল।
প্রথমে কিছু প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে:
pip install tensorflow
pip install numpy
pip install scikit-learn
টেক্সট ডেটাকে উপযুক্ত ফরম্যাটে প্রিপ্রসেস করা খুবই গুরুত্বপূর্ণ। এখানে Keras এবং Tokenizer ব্যবহার করে টেক্সট ডেটা প্রিপ্রসেস করা হবে।
import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
# উদাহরণস্বরূপ টেক্সট এবং লেবেল
texts = ['I love programming', 'Python is awesome', 'I hate bugs', 'Debugging is fun']
labels = [1, 1, 0, 0] # 1 -> Positive, 0 -> Negative
# Tokenizer ব্যবহার করে টেক্সট টোকেনাইজ করা
tokenizer = Tokenizer(num_words=10000) # 10,000 শব্দ পর্যন্ত
tokenizer.fit_on_texts(texts)
# টেক্সটকে সিকোয়েন্সে রূপান্তরিত করা
X = tokenizer.texts_to_sequences(texts)
# সিকোয়েন্সে প্যাডিং দেওয়া
X_pad = pad_sequences(X, padding='post')
# লেবেলকে Numpy array তে রূপান্তর করা
y = np.array(labels)
# ট্রেনিং এবং টেস্ট ডেটা ভাগ করা
X_train, X_test, y_train, y_test = train_test_split(X_pad, y, test_size=0.2, random_state=42)
print(f"Training Data: {X_train.shape}")
print(f"Testing Data: {X_test.shape}")
এখন আমরা LSTM বা GRU মডেল ব্যবহার করে টেক্সট ক্লাসিফিকেশন মডেল তৈরি করব। LSTM এবং GRU মূলত Recurrent layers হিসেবে ব্যবহৃত হয়, যেগুলি টেক্সটের সিকোয়েন্স ডেটা প্রক্রিয়া করতে সক্ষম।
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, GRU, Dense, Dropout
# LSTM বা GRU মডেল তৈরি
def create_model(use_gru=False):
model = Sequential()
# Embedding layer: words কে ভেক্টরে রূপান্তরিত করে
model.add(Embedding(input_dim=10000, output_dim=128, input_length=X_train.shape[1]))
# LSTM বা GRU layer
if use_gru:
model.add(GRU(128, return_sequences=False))
else:
model.add(LSTM(128, return_sequences=False))
# Dropout layer: overfitting কমানোর জন্য
model.add(Dropout(0.5))
# Output layer: সেন্টিমেন্ট (positive or negative)
model.add(Dense(1, activation='sigmoid'))
# মডেল কম্পাইল করা
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
model.summary()
return model
# LSTM মডেল তৈরি
model_lstm = create_model(use_gru=False)
# GRU মডেল তৈরি
model_gru = create_model(use_gru=True)
sigmoid
অ্যাকটিভেশন ফাংশন ব্যবহার করা হয়, কারণ এটি binary classification এর জন্য উপযুক্ত।এখন, তৈরি করা LSTM বা GRU মডেলটি ট্রেন করতে হবে:
# LSTM মডেল ট্রেনিং
model_lstm.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))
# GRU মডেল ট্রেনিং
model_gru.fit(X_train, y_train, epochs=5, batch_size=32, validation_data=(X_test, y_test))
ট্রেনিং শেষে, আমরা মডেলের পারফরম্যান্স ইভালুয়েশন করতে পারি, যেমন accuracy এবং loss মেট্রিক্স দেখতে:
# LSTM মডেলের ইভালুয়েশন
lstm_loss, lstm_accuracy = model_lstm.evaluate(X_test, y_test)
print(f"LSTM Model Loss: {lstm_loss}")
print(f"LSTM Model Accuracy: {lstm_accuracy}")
# GRU মডেলের ইভালুয়েশন
gru_loss, gru_accuracy = model_gru.evaluate(X_test, y_test)
print(f"GRU Model Loss: {gru_loss}")
print(f"GRU Model Accuracy: {gru_accuracy}")
এখন আপনি তৈরি করা মডেলটি ব্যবহার করে নতুন টেক্সট ডেটার প্রেডিকশন করতে পারেন:
# LSTM মডেল দিয়ে প্রেডিকশন
lstm_predictions = model_lstm.predict(X_test)
# GRU মডেল দিয়ে প্রেডিকশন
gru_predictions = model_gru.predict(X_test)
# প্রেডিকশন বের করা (0 বা 1)
lstm_pred_class = (lstm_predictions > 0.5).astype("int32")
gru_pred_class = (gru_predictions > 0.5).astype("int32")
print(f"LSTM Model Predicted Classes: {lstm_pred_class}")
print(f"GRU Model Predicted Classes: {gru_pred_class}")
এভাবে আপনি LSTM বা GRU ব্যবহার করে টেক্সট ক্লাসিফিকেশন মডেল তৈরি এবং ট্রেন করতে পারেন।
Word Embeddings হল একটি টেক্সট প্রক্রিয়া করার কৌশল যেখানে শব্দগুলোকে গাণিতিক ভেক্টরের আকারে উপস্থাপন করা হয়। এই ভেক্টরগুলো শব্দের অর্থ এবং সম্পর্কের প্রতিফলন করে, যা মেশিন লার্নিং মডেলগুলোকে শব্দের মধ্যে সেমান্টিক সম্পর্ক বুঝতে সহায়তা করে। দুইটি প্রধান word embedding মডেল হল Word2Vec এবং GloVe।
Word2Vec হল একটি নিউরাল নেটওয়ার্ক ভিত্তিক মডেল, যা শব্দগুলোর ভেক্টর তৈরি করতে ব্যবহৃত হয়। এটি মূলত দুটি পদ্ধতি ব্যবহার করে: CBOW (Continuous Bag of Words) এবং Skip-gram।
এই পদ্ধতিতে, কয়েকটি surrounding (অতীত এবং ভবিষ্যৎ) শব্দকে ব্যবহার করে একটি target (কেন্দ্র) শব্দের পূর্বাভাস করা হয়। উদাহরণস্বরূপ, যদি sentence হয় "The cat sat on the mat", তাহলে surrounding words হতে পারে "The", "sat", "on", "the", "mat" এবং তাদের সাহায্যে "cat" পূর্বাভাস করা হয়।
এই পদ্ধতিতে, একক target শব্দ থেকে surrounding শব্দগুলির পূর্বাভাস করা হয়। উদাহরণস্বরূপ, "cat" শব্দ থেকে surrounding words "The", "sat", "on", "the", "mat" পূর্বাভাস করা হবে।
Word2Vec মডেলটি শব্দের মধ্যে সেমান্টিক সম্পর্ক শিখতে পারে, যেমন "king" - "man" + "woman" ≈ "queen"। এই ধরনের সম্পর্ককে শব্দের ভেক্টরগুলির মধ্যে গণনা করা সম্ভব।
import gensim
from gensim.models import Word2Vec
# কিছু টেক্সট ডেটা
sentences = [
['the', 'cat', 'sat', 'on', 'the', 'mat'],
['the', 'dog', 'barked'],
['the', 'cat', 'meowed']
]
# Word2Vec মডেল তৈরি করা
model = Word2Vec(sentences, vector_size=10, window=2, min_count=1, workers=4)
# একটি শব্দের ভেক্টর দেখতে
word_vector = model.wv['cat']
print(word_vector)
# শব্দের মধ্যে সম্পর্ক খুঁজে পাওয়া
similar_words = model.wv.most_similar('cat', topn=3)
print(similar_words)
GloVe একটি লিনিয়ার মডেল যা শব্দের সহাবস্থান পরিসংখ্যানের উপর ভিত্তি করে কাজ করে। GloVe শব্দের জন্য ভেক্টর তৈরি করে, যা প্রতিটি শব্দের সম্বন্ধিত সহাবস্থান মেট্রিক্স ব্যবহার করে। GloVe মডেল global word-word co-occurrence matrix ব্যবহার করে শব্দগুলির সম্পর্ক শিখতে সক্ষম হয়, যেখানে দুটি শব্দ একটি নির্দিষ্ট কনটেক্সটে একসাথে কতবার ব্যবহার হয়েছে তা পরিমাপ করা হয়।
GloVe মডেলটি একটি পরিসংখ্যান ভিত্তিক পদ্ধতি, যেখানে শব্দগুলির সহাবস্থান পরিমাপ করা হয়। এটি গাণিতিকভাবে শব্দের কনটেক্সট এবং সম্পর্ক বুঝতে সাহায্য করে এবং উচ্চাকাঙ্খী সম্পর্কের ভেক্টর তৈরি করে।
GloVe মডেল সাধারণত প্রশিক্ষিত মডেল হিসেবে GloVe এর অফিসিয়াল সাইট থেকে ডাউনলোড করা হয়, এবং সেখান থেকে মডেলটি ব্যবহার করা হয়।
import numpy as np
# GloVe এর ট্রেনড মডেল লোড করা
def load_glove_model(glove_file):
model = {}
with open(glove_file, 'r', encoding='utf-8') as f:
for line in f:
values = line.split()
word = values[0]
coefs = np.asarray(values[1:], dtype='float32')
model[word] = coefs
print(f"Loaded {len(model)} words")
return model
# GloVe মডেল লোড করা (উদাহরণ: 'glove.6B.50d.txt')
glove_model = load_glove_model('glove.6B.50d.txt')
# একটি শব্দের ভেক্টর বের করা
word_vector = glove_model['cat']
print(word_vector)
# দুটি শব্দের সিমিলারিটি বের করা
from numpy import dot
from numpy.linalg import norm
def cosine_similarity(vec1, vec2):
return dot(vec1, vec2) / (norm(vec1) * norm(vec2))
similarity = cosine_similarity(glove_model['cat'], glove_model['dog'])
print(f"Similarity between 'cat' and 'dog': {similarity}")
বৈশিষ্ট্য | Word2Vec | GloVe |
---|---|---|
মূল ধারণা | শব্দের প্রতিবিম্ব তৈরির জন্য নিউরাল নেটওয়ার্ক ব্যবহার করা | সহাবস্থান পরিসংখ্যানের মাধ্যমে শব্দের সম্পর্ক তৈরি করা |
প্রকৃতি | নিউরাল নেটওয়ার্ক ভিত্তিক | পরিসংখ্যান ভিত্তিক |
প্রক্রিয়া | গাণিতিক প্রশিক্ষণ (নিউরাল নেটওয়ার্ক) | গাণিতিক সহাবস্থান পরিসংখ্যান মেট্রিক্স |
ব্ল্যাকবক্স | হার্ডওয়ার্ক থেকে শিখে প্রতিটি শব্দের অর্থ বোঝা | শব্দের সম্পর্কের একটি গ্লোবাল ম্যাট্রিক্স তৈরি করা |
ব্যবহারযোগ্যতা | ছোট আকারের ডেটাসেটের জন্য উপযুক্ত | বড় আকারের ডেটাসেটের জন্য উপযুক্ত |
Word embeddings ভিজ্যুয়ালাইজ করা খুবই গুরুত্বপূর্ণ, যাতে আমরা শব্দগুলির সম্পর্ক এবং কনটেক্সট বুঝতে পারি। সাধারণত t-SNE বা PCA ব্যবহার করে word embeddings ভিজ্যুয়ালাইজ করা হয়।
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# GloVe বা Word2Vec থেকে শব্দের ভেক্টর পেতে
words = list(glove_model.keys())
vectors = np.array([glove_model[word] for word in words])
# PCA দিয়ে 2D তে রূপান্তর করা
pca = PCA(n_components=2)
result = pca.fit_transform(vectors)
# শব্দগুলি ভিজ্যুয়ালাইজ করা
plt.figure(figsize=(10, 10))
for i, word in enumerate(words[:100]): # প্রথম 100টি শব্দ
plt.text(result[i, 0], result[i, 1], word, fontsize=12)
plt.show()
এভাবে আপনি Word2Vec এবং GloVe ব্যবহার করে টেক্সট ডেটা প্রক্রিয়া করতে পারেন এবং শব্দগুলির সম্পর্কের ব্যাপারে আরও গভীর ধারণা পেতে পারেন।
Read more