Natural Language Processing (NLP) এবং Text Classification

Machine Learning - কেরাস ডিপ লার্নিং (Deep Learning with Keras)
192
192

Natural Language Processing (NLP) হল একটি অঙ্গ যেখানে কম্পিউটারকে মানুষের ভাষা বুঝতে এবং প্রক্রিয়া করতে সক্ষম করা হয়। NLP প্রযুক্তি ভাষা সংক্রান্ত অনেক কাজ যেমন টেক্সট ক্লাসিফিকেশন, টেক্সট সনাক্তকরণ, টেক্সট জেনারেশন, ভাষার অনুবাদ ইত্যাদি সমাধান করতে ব্যবহৃত হয়।

একটি গুরুত্বপূর্ণ কাজ, যা NLP-এর মাধ্যমে সম্পাদিত হয়, তা হল Text Classification। এটি একটি সুপারভাইজড লার্নিং টাস্ক যেখানে টেক্সট ডেটাকে একটি বা একাধিক শ্রেণী বা লেবেল বরাদ্দ করা হয়। উদাহরণস্বরূপ, ইমেইল স্প্যাম ক্লাসিফিকেশন, সোশ্যাল মিডিয়া পোস্টগুলির মধ্যে সেন্টিমেন্ট অ্যানালিসিস, সংবাদ বিভাগের শ্রেণীবিভাগ ইত্যাদি।

১. NLP Overview

NLP এর প্রধান লক্ষ্য হল কম্পিউটারকে মানুষের ভাষা (টেক্সট এবং স্পিচ) বুঝতে এবং এটি থেকে তথ্য নির্ধারণে সাহায্য করা। NLP প্রযুক্তির কিছু প্রধান অংশ:

  1. Tokenization: টেক্সটকে শব্দ বা বাক্যাংশে ভাঙা।
  2. Stopwords Removal: সাধারণ শব্দ (যেমন: "the", "and", "is") যা সাধারণত ক্লাসিফিকেশন বা বিশ্লেষণে প্রয়োজনীয় নয়, তা অপসারণ করা।
  3. Stemming and Lemmatization: শব্দের মূলরূপে রূপান্তর (যেমন: "running" -> "run")।
  4. Named Entity Recognition (NER): টেক্সটে গুরুত্বপূর্ণ নাম যেমন স্থান, সময়, সংস্থা ইত্যাদি চিহ্নিত করা।
  5. Part of Speech Tagging (POS): টেক্সটের প্রতিটি শব্দের grammatical ভূমিকা চিহ্নিত করা (যেমন: noun, verb, adjective)।

২. Text Classification Overview

Text Classification হল একটি সুপারভাইজড মেশিন লার্নিং টাস্ক, যেখানে একটি মডেলকে এমনভাবে প্রশিক্ষিত করা হয় যে, এটি একটি টেক্সটের সঠিক শ্রেণী বা লেবেল নির্ধারণ করতে পারে। এটি বিভিন্ন কাজের জন্য ব্যবহার করা যায়, যেমন:

  • Sentiment Analysis: টেক্সটের মধ্যে প্রকাশিত আবেগ শনাক্ত করা (যেমন, ইতিবাচক বা নেতিবাচক মতামত)।
  • Spam Detection: ইমেইল বা বার্তাগুলিকে স্প্যাম বা নন-স্প্যাম শ্রেণীতে বিভক্ত করা।
  • Topic Categorization: টেক্সট বা আর্টিকেলকে নির্দিষ্ট টপিকে শ্রেণীবদ্ধ করা (যেমন, ক্রীড়া, রাজনীতি, প্রযুক্তি ইত্যাদি)।

৩. Text Classification Problem

Text Classification মডেল তৈরির জন্য সাধারণত কয়েকটি পদক্ষেপ অনুসরণ করা হয়:

  1. Data Preprocessing:
    • Tokenization: টেক্সটকে শব্দ বা বাক্যে ভাঙা।
    • Stopwords Removal: অপ্রয়োজনীয় শব্দগুলি অপসারণ।
    • Text Vectorization: টেক্সটকে সংখ্যায় রূপান্তরিত করা, যেমন Bag of Words, TF-IDF, Word2Vec, বা BERT
  2. Feature Extraction: টেক্সট ডেটার থেকে বৈশিষ্ট্য বা ফিচার বের করা।
  3. Model Training: মডেল প্রশিক্ষণ (যেমন, Logistic Regression, Naive Bayes, SVM, or Deep Learning models like LSTM, BERT)।
  4. Model Evaluation: মডেলটির কার্যকারিতা মূল্যায়ন করা (যেমন, Accuracy, Precision, Recall, F1-score)।
  5. Prediction: মডেলটিকে নতুন ডেটার উপর পরীক্ষা করা।

৪. Text Classification Example using NLP and Machine Learning

এখানে আমরা একটি সিম্পল Text Classification সমস্যা সমাধানের জন্য Naive Bayes classifier ব্যবহার করব এবং TF-IDF feature extraction টেকনিক প্রয়োগ করব।

৪.১. Data Preprocessing

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)

৪.২. Model Training

# Train a Naive Bayes classifier
model = MultinomialNB()
model.fit(X_train_tfidf, y_train)

৪.৩. Model Evaluation

# 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 Models for Text Classification

এছাড়াও, Deep Learning মডেলগুলো যেমন RNNs, LSTMs, এবং Transformers (BERT) ইত্যাদি টেক্সট ক্লাসিফিকেশন টাস্কে খুবই কার্যকরী হতে পারে। যেমন, BERT মডেলটি আদি ভাষার প্রতিফলন এবং সম্পর্ক চিহ্নিত করতে খুবই শক্তিশালী।

৫.১. Simple LSTM Model for Text Classification

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)

৬. Evaluation Metrics for Text Classification

  • Accuracy: সঠিক পূর্বাভাসের শতাংশ।
  • Precision: পজিটিভ পূর্বাভাসের মধ্যে সঠিক কতটা পজিটিভ ছিল।
  • Recall: প্রকৃত পজিটিভের মধ্যে সঠিক কতটা শনাক্ত করা হয়েছিল।
  • F1-Score: Precision এবং Recall এর মধ্যে ভারসাম্য বজায় রাখা।
  • ROC-AUC Curve: মডেলের শ্রেণীভিত্তিক পারফরম্যান্স পরিমাপ।

সারাংশ

  • NLP একটি শক্তিশালী ক্ষেত্র যা ভাষাগত ডেটা বুঝতে এবং প্রক্রিয়া করতে ব্যবহৃত হয়।
  • Text Classification হল একটি গুরুত্বপূর্ণ NLP টাস্ক যেখানে মডেলটি টেক্সটের উপর ভিত্তি করে শ্রেণী বা লেবেল নির্ধারণ করে।
  • মডেল ট্রেনিংয়ে Bag of Words, TF-IDF, এবং Word Embeddings এর মতো টেকনিক ব্যবহৃত হয়।
  • Deep Learning Models (যেমন LSTM, BERT) আরও উন্নত ফলাফল দিতে পারে, বিশেষত জটিল টেক্সট ক্লাসিফিকেশন টাস্কে।

এভাবে, NLP এবং Text Classification প্রক্রিয়াগুলি একসাথে ব্যবহার করে আপনি টেক্সট ডেটাকে শ্রেণীভুক্ত করতে এবং বিভিন্ন প্রাকৃতিক ভাষার কাজ সমাধান করতে পারেন।

Content added By

NLP এর ভূমিকা এবং বেসিক ধারণা

140
140

Natural Language Processing (NLP) হল কম্পিউটার সায়েন্স এবং আর্টিফিশিয়াল ইন্টেলিজেন্স (AI) এর একটি শাখা যা কম্পিউটার এবং মানুষের ভাষার মধ্যে যোগাযোগ স্থাপন করে। এর মাধ্যমে কম্পিউটারগুলো মানুষের ভাষা বুঝতে, বিশ্লেষণ করতে, এবং স্বাভাবিক ভাষায় প্রতিক্রিয়া জানাতে সক্ষম হয়। NLP বিভিন্ন ভাষা, গ্রামার, এবং শব্দের অর্থ বিশ্লেষণ করে, যাতে কম্পিউটারগুলো মানুষের ভাষাকে বুঝতে পারে এবং তার ভিত্তিতে কাজ করতে পারে।

NLP এর ভূমিকা

NLP কম্পিউটারের জন্য মানুষের ভাষা বোঝার ক্ষমতা তৈরি করে, যা একটি বহুল ব্যবহৃত প্রযুক্তি হিসেবে পরিণত হয়েছে। এর ভূমিকা বিশাল এবং বিভিন্ন ক্ষেত্রে গুরুত্বপূর্ণ। নিচে কিছু প্রাথমিক ভূমিকা দেওয়া হল:

  1. টেক্সট অ্যানালাইসিস: NLP ব্যবহার করে বড় পরিসরের টেক্সট ডেটা থেকে তথ্য সংগ্রহ করা হয়। যেমন, সোশ্যাল মিডিয়া পোস্ট, ব্লগ, আর্টিকেল, ইমেইল ইত্যাদি থেকে গুরুত্বপূর্ণ তথ্য আহরণ।
  2. ভাষার অনুবাদ: NLP এর মাধ্যমে একটি ভাষা থেকে অন্য ভাষায় অনুবাদ করা হয়। এটি Machine Translation (যেমন, Google Translate) এ ব্যবহৃত হয়।
  3. চ্যাটবট এবং ভার্চুয়াল অ্যাসিস্ট্যান্ট: NLP ব্যবহার করে চ্যাটবট বা ভার্চুয়াল অ্যাসিস্ট্যান্ট তৈরি করা হয় যা মানুষের ভাষায় সঠিক উত্তর দিতে পারে। যেমন, Siri, Alexa, Google Assistant
  4. টেক্সট শ্রেণীকরণ: মেশিন লার্নিং এবং NLP ব্যবহার করে টেক্সট শ্রেণীকরণের কাজ করা যায়, যেমন ইমেইল স্প্যাম ফিল্টার, পত্রিকা বা নিউজ আর্টিকেল শ্রেণীভুক্তকরণ।
  5. অর্থ বিশ্লেষণ: NLP ব্যবহার করে বিভিন্ন সোর্স থেকে প্রাপ্ত টেক্সটের sentiment analysis করা হয়, অর্থাৎ, এটি সঠিকভাবে বুঝতে পারে কোন টেক্সট বা মন্তব্য ইতিবাচক (positive), নেতিবাচক (negative) বা নিরপেক্ষ (neutral)।
  6. কন্টেন্ট সামারাইজেশন: স্বয়ংক্রিয়ভাবে বড় টেক্সট ডকুমেন্ট থেকে সংক্ষিপ্ত সারাংশ তৈরি করা। এটি নিউজ সামারি, রিপোর্ট বা অন্যান্য ডকুমেন্টের জন্য গুরুত্বপূর্ণ।
  7. স্পিচ রিকগনিশন: বক্তৃতা থেকে টেক্সটে রূপান্তর করার জন্য NLP প্রযুক্তি ব্যবহৃত হয়। এটি ভার্চুয়াল অ্যাসিস্ট্যান্ট, ভয়েস কমান্ড সিস্টেম ইত্যাদিতে ব্যবহৃত হয়।

NLP এর বেসিক ধারণা

NLP এর মূল ধারণা অনেকগুলো টেকনিক ও মেথডের ওপর ভিত্তি করে কাজ করে, যা ভাষার বিভিন্ন স্তরে কাজ করতে সাহায্য করে। নিচে কিছু গুরুত্বপূর্ণ ধারণা এবং টেকনিক আলোচনা করা হলো:

  1. Tokenization: Tokenization হল টেক্সট ডেটাকে ছোট ছোট অংশে বিভক্ত করার প্রক্রিয়া। একটি বড় টেক্সটকে শব্দ বা বাক্যে ভাগ করা হয়, যা পরে প্রক্রিয়া করা সহজ হয়।

    উদাহরণ:

    • "I love programming" → ["I", "love", "programming"]
  2. Part of Speech (POS) Tagging: POS Tagging হল একটি প্রক্রিয়া যার মাধ্যমে শব্দের গ্রামাটিক্যাল ভূমিকা নির্ধারণ করা হয়। যেমন, একটি শব্দ noun, verb, adjective, ইত্যাদি কী তা চিহ্নিত করা।

    উদাহরণ:

    • "She runs fast" → [She (Pronoun), runs (Verb), fast (Adjective)]
  3. Named Entity Recognition (NER): NER একটি টেকনিক যা টেক্সট থেকে নির্দিষ্ট নাম, স্থান, তারিখ, অথবা অন্যান্য গুরুত্বপূর্ণ তথ্য চিহ্নিত করতে সাহায্য করে। এটি সরাসরি Entity Recognition হিসেবে পরিচিত।

    উদাহরণ:

    • "Barack Obama was born in Hawaii in 1961" → [Barack Obama (Person), Hawaii (Location), 1961 (Date)]
  4. Stopwords Removal: সাধারণত ভাষায় কিছু শব্দ থাকে যা কম তথ্য প্রদান করে যেমন "is", "the", "in" ইত্যাদি। এই শব্দগুলোকে stopwords বলা হয়, যা অনেক NLP টাস্কে বাদ দেওয়া হয়।
  5. Stemming এবং Lemmatization:
    • Stemming: একটি শব্দের মূল রূপ (root form) বের করার প্রক্রিয়া। উদাহরণস্বরূপ, "running", "runs" → "run"
    • Lemmatization: এটি আরো গভীরভাবে কাজ করে এবং শব্দের সঠিক মূল রূপ বের করে, যেমন "better" → "good"।
  6. Word Embeddings: Word embeddings হল একটি গাণিতিক উপস্থাপনা যা শব্দের অর্থ এবং সম্পর্কগুলি সংক্ষেপে ধারণ করে। Word2Vec এবং GloVe এর মতো মডেল শব্দকে ভেক্টরে রূপান্তর করে, যা মেশিনকে ভাষা বুঝতে সাহায্য করে।
  7. Sentiment Analysis: Sentiment analysis হল টেক্সটের মধ্যে থাকা আবেগ বা অনুভূতির নির্ধারণের প্রক্রিয়া। এটি সাধারণত ৩টি শ্রেণীতে ভাগ করা হয়—ইতিবাচক (positive), নেতিবাচক (negative), এবং নিরপেক্ষ (neutral)।

    উদাহরণ:

    • "I love this movie" → Positive Sentiment
    • "I hate waiting in long lines" → Negative Sentiment

NLP এর কিছু প্রধান অ্যাপ্লিকেশন

  1. Machine Translation (MT): মেশিন ট্রান্সলেশন হল একটি টেকনিক যা একটি ভাষা থেকে অন্য ভাষায় অনুবাদ করতে সাহায্য করে। যেমন, Google Translate।
  2. Speech Recognition: কথোপকথন বা বক্তৃতা থেকে লেখা তৈরি করতে NLP ব্যবহার করা হয়, যা ভার্চুয়াল অ্যাসিস্ট্যান্টে যেমন Siri, Google Assistant ইত্যাদিতে ব্যবহৃত হয়।
  3. Chatbots: Chatbots হল স্বয়ংক্রিয় সফটওয়্যার যেগুলি ব্যবহারকারীদের প্রশ্নের উত্তর দেয়। NLP এর মাধ্যমে, এটি মানুষের ভাষায় উত্তর প্রদান করতে সক্ষম।
  4. Text Summarization: NLP ব্যবহার করে স্বয়ংক্রিয়ভাবে বড় টেক্সট ডকুমেন্ট থেকে সংক্ষিপ্ত সারাংশ তৈরি করা যায়। এটি নিউজ আউটলেট, রিপোর্ট, বা অন্যান্য ডকুমেন্টের জন্য গুরুত্বপূর্ণ।
  5. Question Answering Systems: NLP ব্যবহার করে প্রশ্নের উত্তর প্রদান করা হয়, যেমন Google Search বা IBM Watson

সারাংশ

NLP হলো কম্পিউটার সায়েন্স এবং লিঙ্গুইস্টিকসের একটি গুরুত্বপূর্ণ শাখা, যার মাধ্যমে কম্পিউটারকে মানুষের ভাষা বোঝার ক্ষমতা দেওয়া হয়। এর সাহায্যে বিভিন্ন অ্যাপ্লিকেশন তৈরি করা সম্ভব, যেমন ভাষার অনুবাদ, স্পিচ রিকগনিশন, চ্যাটবট, সেনটিমেন্ট অ্যানালাইসিস, এবং আরও অনেক কিছু। NLP অনেক শক্তিশালী মেথড ব্যবহার করে, যার মাধ্যমে কম্পিউটারকে ভাষা বিশ্লেষণ এবং ব্যবহারে সক্ষম করা হয়।

Content added By

Text Data Preprocessing (Tokenization, Padding, Embedding)

156
156

Text Data Preprocessing হল একটি গুরুত্বপূর্ণ প্রক্রিয়া যা মেশিন লার্নিং বা ডীপ লার্নিং মডেল প্রশিক্ষণের আগে টেক্সট ডেটাকে উপযুক্ত ফর্ম্যাটে রূপান্তরিত করতে ব্যবহৃত হয়। এর মধ্যে টেক্সট ক্লিনিং, tokenization, padding, এবং embedding সহ অন্যান্য ধাপ অন্তর্ভুক্ত থাকে। চলুন, এই ধাপগুলির বিস্তারিত আলোচনা করি।


1. Tokenization

Tokenization হল একটি প্রক্রিয়া, যেখানে একটি বড় টেক্সট স্ট্রিংকে ছোট ছোট ইউনিট (যেমন শব্দ বা অক্ষর) বা tokens-এ ভাগ করা হয়। এটি মডেলের জন্য টেক্সট ডেটাকে যথাযথভাবে বিশ্লেষণ করা এবং এর উপাদানগুলোকে সনাক্ত করা সহজ করে।

শব্দ (Word) বা অক্ষর (Character) Tokenization:

  • Word Tokenization: এখানে একটি টেক্সটকে আলাদা আলাদা শব্দে বিভক্ত করা হয়।
  • Character Tokenization: এখানে একটি টেক্সটকে অক্ষরে বিভক্ত করা হয়।

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() মেথডের মাধ্যমে টেক্সটকে সিকোয়েন্স আকারে রূপান্তরিত করা হয়েছে।


2. Padding

Padding হল একটি প্রক্রিয়া যেখানে টোকেনাইজড সিকোয়েন্সের দৈর্ঘ্য সমান করার জন্য এক বা একাধিক প্যাডিং যুক্ত করা হয়। বেশিরভাগ মেশিন লার্নিং মডেল সমান দৈর্ঘ্যের ইনপুট ডেটা চায়, তাই এই ধাপটি খুবই গুরুত্বপূর্ণ। pad_sequences() ফাংশনটি ব্যবহার করে আমরা সিকোয়েন্সের দৈর্ঘ্য সমান করতে পারি।

Padding উদাহরণ:

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' ব্যবহার করে প্যাডিং সিকোয়েন্সের শুরুতে যোগ করতে পারেন।


3. Embedding

Embedding হল একটি টেকনিক যা একটি শব্দ বা টোকেনকে একটি সুনির্দিষ্ট ডেনস ভেক্টরে রূপান্তরিত করে। এটি শব্দের গাণিতিক উপস্থাপনা, যা শব্দের মধ্যে সম্পর্ককে ধরতে সাহায্য করে। Keras এ Embedding লেয়ার ব্যবহার করা যায় যা অটোমেটিকভাবে টোকেন ভেক্টর তৈরি করে এবং মডেল প্রশিক্ষণের সময় এটি শিখে নেয়।

Embedding Layer Example:

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:

  • input_dim: ভোকাবুলারির সাইজ (যতগুলি আলাদা শব্দ বা টোকেন আপনার ডেটাতে থাকবে)।
  • output_dim: শব্দের জন্য ব্যবহৃত ভেক্টরের দৈর্ঘ্য বা embeddings এর সাইজ।
  • input_length: সিকোয়েন্সের দৈর্ঘ্য।

Embedding লেয়ার শব্দকে একটি গাণিতিক ভেক্টরে রূপান্তরিত করবে, যা মডেলটি শিখে নিতে সক্ষম। এখানে মডেলটি শুধুমাত্র একটি সিকোয়েন্সে 4 টোকেন নিয়ে কাজ করবে এবং প্রতিটি টোকেনের জন্য 8 ডাইমেনশনাল embedding তৈরি করবে।


4. Full Example

এখানে একটি পূর্ণাঙ্গ উদাহরণ দেওয়া হলো, যাতে আমরা টোকেনাইজেশন, প্যাডিং এবং এমবেডিং একত্রে ব্যবহার করে একটি টেক্সট ডেটাসেট প্রিপ্রসেস করি।

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)

5. সারাংশ

  • Tokenization: টেক্সট ডেটাকে ছোট ছোট ইউনিটে (যেমন, শব্দ বা অক্ষর) বিভক্ত করার প্রক্রিয়া।
  • Padding: টোকেনাইজড সিকোয়েন্সের দৈর্ঘ্য সমান করা, যাতে মডেলটিতে সমান আকারের ইনপুট পাঠানো যায়।
  • Embedding: প্রতিটি টোকেনকে একটি ডেনস ভেক্টরে রূপান্তরিত করা, যাতে শব্দের সম্পর্ক বুঝতে মডেলটি সক্ষম হয়।

এই প্রক্রিয়াগুলি মেশিন লার্নিং মডেল প্রশিক্ষণের জন্য টেক্সট ডেটা প্রিপ্রসেসিংয়ের গুরুত্বপূর্ণ অংশ।

Content added By

LSTM/GRU ব্যবহার করে Text Classification

122
122

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 মডেল ব্যবহার করে টেক্সট ক্লাসিফিকেশন মডেল তৈরি করব। 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)
  • Embedding layer: শব্দগুলিকে ভেক্টর ফরম্যাটে রূপান্তরিত করে, যাতে মডেল শব্দের অর্থ শিখতে পারে।
  • LSTM/GRU layer: টেক্সটের সিকোয়েন্স শিখতে ব্যবহৃত হয়।
  • Dropout layer: Overfitting কমাতে ব্যবহৃত হয়।
  • Dense layer: আউটপুট পেতে ব্যবহৃত হয়, যেখানে 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 হল Recurrent Neural Networks (RNNs) এর উন্নত ফর্ম, যা টেক্সট ডেটার সিকোয়েন্স ডিপেন্ডেন্সি শিখতে বিশেষভাবে কার্যকরী।
  • টেক্সট ক্লাসিফিকেশন মডেল তৈরিতে LSTM এবং GRU ব্যবহার করলে long-term dependencies শিখতে সক্ষম হয়।
  • Embedding layer শব্দগুলিকে ভেক্টরে রূপান্তরিত করে এবং LSTM/GRU মডেলগুলিতে পাঠানো হয়।
  • মডেলটি ট্রেন করার পর, accuracy, loss, এবং classification report মেট্রিক্স ব্যবহার করে মডেলের পারফরম্যান্স ইভালুয়েশন করা যায়।

এভাবে আপনি LSTM বা GRU ব্যবহার করে টেক্সট ক্লাসিফিকেশন মডেল তৈরি এবং ট্রেন করতে পারেন।

Content added By

Word Embeddings (Word2Vec, GloVe)

149
149

Word Embeddings হল একটি টেক্সট প্রক্রিয়া করার কৌশল যেখানে শব্দগুলোকে গাণিতিক ভেক্টরের আকারে উপস্থাপন করা হয়। এই ভেক্টরগুলো শব্দের অর্থ এবং সম্পর্কের প্রতিফলন করে, যা মেশিন লার্নিং মডেলগুলোকে শব্দের মধ্যে সেমান্টিক সম্পর্ক বুঝতে সহায়তা করে। দুইটি প্রধান word embedding মডেল হল Word2Vec এবং GloVe

১. Word2Vec

Word2Vec হল একটি নিউরাল নেটওয়ার্ক ভিত্তিক মডেল, যা শব্দগুলোর ভেক্টর তৈরি করতে ব্যবহৃত হয়। এটি মূলত দুটি পদ্ধতি ব্যবহার করে: CBOW (Continuous Bag of Words) এবং Skip-gram

১.১. CBOW (Continuous Bag of Words)

এই পদ্ধতিতে, কয়েকটি surrounding (অতীত এবং ভবিষ্যৎ) শব্দকে ব্যবহার করে একটি target (কেন্দ্র) শব্দের পূর্বাভাস করা হয়। উদাহরণস্বরূপ, যদি sentence হয় "The cat sat on the mat", তাহলে surrounding words হতে পারে "The", "sat", "on", "the", "mat" এবং তাদের সাহায্যে "cat" পূর্বাভাস করা হয়।

১.২. Skip-gram

এই পদ্ধতিতে, একক target শব্দ থেকে surrounding শব্দগুলির পূর্বাভাস করা হয়। উদাহরণস্বরূপ, "cat" শব্দ থেকে surrounding words "The", "sat", "on", "the", "mat" পূর্বাভাস করা হবে।

Word2Vec মডেলটি শব্দের মধ্যে সেমান্টিক সম্পর্ক শিখতে পারে, যেমন "king" - "man" + "woman" ≈ "queen"। এই ধরনের সম্পর্ককে শব্দের ভেক্টরগুলির মধ্যে গণনা করা সম্ভব।

১.৩. Word2Vec এর কোড উদাহরণ

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 (Global Vectors for Word Representation)

GloVe একটি লিনিয়ার মডেল যা শব্দের সহাবস্থান পরিসংখ্যানের উপর ভিত্তি করে কাজ করে। GloVe শব্দের জন্য ভেক্টর তৈরি করে, যা প্রতিটি শব্দের সম্বন্ধিত সহাবস্থান মেট্রিক্স ব্যবহার করে। GloVe মডেল global word-word co-occurrence matrix ব্যবহার করে শব্দগুলির সম্পর্ক শিখতে সক্ষম হয়, যেখানে দুটি শব্দ একটি নির্দিষ্ট কনটেক্সটে একসাথে কতবার ব্যবহার হয়েছে তা পরিমাপ করা হয়।

GloVe মডেলটি একটি পরিসংখ্যান ভিত্তিক পদ্ধতি, যেখানে শব্দগুলির সহাবস্থান পরিমাপ করা হয়। এটি গাণিতিকভাবে শব্দের কনটেক্সট এবং সম্পর্ক বুঝতে সাহায্য করে এবং উচ্চাকাঙ্খী সম্পর্কের ভেক্টর তৈরি করে।

২.১. 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 এর মধ্যে পার্থক্য

বৈশিষ্ট্যWord2VecGloVe
মূল ধারণাশব্দের প্রতিবিম্ব তৈরির জন্য নিউরাল নেটওয়ার্ক ব্যবহার করাসহাবস্থান পরিসংখ্যানের মাধ্যমে শব্দের সম্পর্ক তৈরি করা
প্রকৃতিনিউরাল নেটওয়ার্ক ভিত্তিকপরিসংখ্যান ভিত্তিক
প্রক্রিয়াগাণিতিক প্রশিক্ষণ (নিউরাল নেটওয়ার্ক)গাণিতিক সহাবস্থান পরিসংখ্যান মেট্রিক্স
ব্ল্যাকবক্সহার্ডওয়ার্ক থেকে শিখে প্রতিটি শব্দের অর্থ বোঝাশব্দের সম্পর্কের একটি গ্লোবাল ম্যাট্রিক্স তৈরি করা
ব্যবহারযোগ্যতাছোট আকারের ডেটাসেটের জন্য উপযুক্তবড় আকারের ডেটাসেটের জন্য উপযুক্ত

৪. Word Embedding Visualization

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 হল দুটি জনপ্রিয় শব্দ এম্বেডিং প্রযুক্তি যা শব্দের সম্পর্ক এবং কনটেক্সট বুঝতে সহায়তা করে।
  • Word2Vec নিউরাল নেটওয়ার্ক ব্যবহার করে শব্দের ভেক্টর তৈরি করে, যা শব্দগুলির মধ্যে সেমান্টিক সম্পর্ক বুঝতে সাহায্য করে।
  • GloVe পরিসংখ্যান ভিত্তিক পদ্ধতি যা বৃহৎ ডেটাসেটের মধ্যে শব্দের সহাবস্থান পরিমাপ করে।
  • t-SNE বা PCA এর মাধ্যমে শব্দের ভেক্টর ভিজ্যুয়ালাইজেশন করা যেতে পারে, যা শব্দগুলির মধ্যে সম্পর্ক এবং কনটেক্সট বোঝাতে সাহায্য করে।

এভাবে আপনি Word2Vec এবং GloVe ব্যবহার করে টেক্সট ডেটা প্রক্রিয়া করতে পারেন এবং শব্দগুলির সম্পর্কের ব্যাপারে আরও গভীর ধারণা পেতে পারেন।

Content added By
Promotion