Gluon API দিয়ে NLP মডেল তৈরি

Natural Language Processing (NLP) এবং MXNet - অ্যাপাচি এমএক্সনেট (Apache mxnet) - Machine Learning

320

Natural Language Processing (NLP) হল একটি ফিল্ড যা কম্পিউটার এবং মানুষের ভাষার মধ্যে সম্পর্ক তৈরি করে। এটি ভাষার গঠন ও অর্থ বিশ্লেষণ করতে সাহায্য করে, এবং মেশিন লার্নিং বা ডিপ লার্নিং পদ্ধতি ব্যবহার করে ভাষার মডেল তৈরি করে। Gluon API (MXNet এর উচ্চ স্তরের API) ব্যবহার করে সহজেই NLP মডেল তৈরি করা যায়। নিচে আমরা একটি সাধারণ Text Classification NLP মডেল তৈরি করার ধাপগুলি আলোচনা করব।

1. Gluon API দিয়ে Text Classification মডেল তৈরি

এখানে আমরা একটি সাধারণ text classification মডেল তৈরি করব, যা ইমেইল বা টেক্সট ক্লাসিফিকেশন সমস্যার জন্য উপযুক্ত।

ধাপ 1: প্রয়োজনীয় লাইব্রেরি ইনস্টল করা

প্রথমে Gluon এবং প্রয়োজনীয় লাইব্রেরিগুলি ইনস্টল করতে হবে।

pip install mxnet
pip install gluonnlp
pip install mxnet-cu112   # যদি GPU ব্যবহার করতে চান

ধাপ 2: ডেটা প্রস্তুতি

এখানে আমরা GluonNLP ব্যবহার করব টেক্সট ডেটা লোড ও প্রিপ্রসেসিং এর জন্য। উদাহরণস্বরূপ, আমরা AG News dataset ব্যবহার করব, যা সাধারণ টেক্সট ক্লাসিফিকেশন কাজের জন্য ব্যবহৃত হয়।

import gluonnlp as nlp
from mxnet import nd
import mxnet as mx
from gluoncv.data import transforms
from gluon.data import DataLoader

# AG News Dataset লোড করা
train_dataset, test_dataset = nlp.data.load_data_ag_news()

# Tokenization এবং vocabulary তৈরি করা
tokenizer = nlp.data.SpacyTokenizer('en')
vocab = nlp.Vocab(nlp.data.utils.split(' '), min_freq=1)  # শব্দভান্ডার তৈরি

# DataLoader তৈরি করা
batch_size = 64
train_data = nlp.data.batchify.Tuple(nlp.data.batchify.Pad(), nlp.data.batchify.Pad())
test_data = nlp.data.batchify.Tuple(nlp.data.batchify.Pad(), nlp.data.batchify.Pad())

train_data = DataLoader(train_dataset, batch_size=batch_size, shuffle=True)
test_data = DataLoader(test_dataset, batch_size=batch_size, shuffle=False)

এখানে, GluonNLP এর মাধ্যমে ডেটাসেট লোড করা হয়েছে এবং tokenization এবং vocabulary তৈরি করা হয়েছে। DataLoader এর মাধ্যমে ব্যাচ আকারে ডেটা প্রস্তুত করা হয়েছে।

ধাপ 3: মডেল তৈরি করা

এখন আমরা একটি সহজ Deep Neural Network (DNN) মডেল তৈরি করব যা টেক্সট ক্লাসিফিকেশন কাজ করবে। এই মডেলে Embedding Layer, Fully Connected Layer, এবং Softmax Layer থাকবে।

from mxnet.gluon import nn

class TextClassifier(nn.Block):
    def __init__(self, vocab_size, embed_size, num_classes, **kwargs):
        super(TextClassifier, self).__init__(**kwargs)
        self.embedding = nn.Embedding(vocab_size, embed_size)
        self.dense1 = nn.Dense(128, activation='relu')
        self.dense2 = nn.Dense(num_classes)

    def forward(self, x):
        x = self.embedding(x)
        x = x.mean(axis=1)  # Mean pooling over the sequence
        x = self.dense1(x)
        x = self.dense2(x)
        return x

# মডেল ইনিশিয়ালাইজেশন
embed_size = 100  # এমবেডিং সাইজ
num_classes = 4  # AG News dataset-এ 4 ক্লাস আছে
model = TextClassifier(len(vocab), embed_size, num_classes)
model.initialize(ctx=mx.cpu())

এখানে:

  • Embedding Layer: এটি ইনপুট টেক্সটের প্রতিটি শব্দকে একটি ভেক্টরে রূপান্তরিত করবে।
  • Fully Connected Layer: এটি ইনপুট ভেক্টরকে আউটপুট শ্রেণীতে রূপান্তর করবে।
  • Softmax Layer: এটি ক্লাসিফিকেশন জন্য নরমাকৃত আউটপুট প্রদান করবে।

ধাপ 4: মডেল প্রশিক্ষণ

এখন আমরা মডেলটি প্রশিক্ষণ করতে পারি। এখানে cross-entropy loss এবং adam optimizer ব্যবহার করা হবে।

from mxnet import gluon, autograd, nd
from mxnet.gluon import loss as gloss, Trainer

# লস ফাংশন এবং অপটিমাইজার
loss_fn = gloss.SoftmaxCrossEntropyLoss()
trainer = Trainer(model.collect_params(), 'adam', {'learning_rate': 0.001})

# প্রশিক্ষণ লুপ
epochs = 5
for epoch in range(epochs):
    total_loss = 0
    for data, label in train_data:
        data = data.as_in_context(mx.cpu())
        label = label.as_in_context(mx.cpu())
        
        with autograd.record():
            output = model(data)
            loss = loss_fn(output, label)
        
        loss.backward()
        trainer.step(data.shape[0])
        total_loss += loss.mean().asscalar()
    
    print(f"Epoch {epoch+1}, Loss: {total_loss / len(train_data)}")

এখানে:

  • SoftmaxCrossEntropyLoss: এটি লস ফাংশন হিসাবে ব্যবহার করা হয়েছে, যা multi-class classification এর জন্য উপযুক্ত।
  • Trainer: Adam optimizer ব্যবহার করা হয়েছে।

ধাপ 5: মডেল মূল্যায়ন

মডেল প্রশিক্ষণ শেষে, আমরা test data ব্যবহার করে মডেলের পারফরম্যান্স মূল্যায়ন করতে পারি।

correct, total = 0, 0
for data, label in test_data:
    data = data.as_in_context(mx.cpu())
    label = label.as_in_context(mx.cpu())
    
    output = model(data)
    prediction = nd.argmax(output, axis=1)
    
    correct += (prediction == label).sum().asscalar()
    total += label.size
    
accuracy = correct / total
print(f"Accuracy: {accuracy * 100:.2f}%")

এখানে:

  • Accuracy: মোট সঠিক পূর্বাভাসের সংখ্যা ভাগ করে মোট স্যাম্পলের সংখ্যা দিয়ে নির্ধারণ করা হয়।

6. মডেল সংরক্ষণ এবং পুনরায় লোড করা

মডেলটি প্রশিক্ষণ শেষে আপনি এটি সংরক্ষণ এবং ভবিষ্যতে পুনরায় লোড করতে পারেন:

# মডেল সংরক্ষণ
model.save_parameters('text_classifier.params')

# পুনরায় লোড করা
model.load_parameters('text_classifier.params', ctx=mx.cpu())

সারাংশ

  • Gluon API দিয়ে NLP মডেল তৈরি করা খুবই সহজ এবং নমনীয়। Text Classification এর মতো সমস্যায় এটি দ্রুত কাজ করতে পারে।
  • Embedding Layer থেকে Dense Layer পর্যন্ত নানা লেয়ার ব্যবহার করে আপনি টেক্সট ডেটা প্রসেস করতে পারেন।
  • Training এবং evaluation এর মাধ্যমে মডেলটি ভালোভাবে ট্রেনিং করা এবং তার পারফরম্যান্স মূল্যায়ন করা সম্ভব।
  • GluonNLP লাইব্রেরি ডেটা লোড, টোকেনাইজেশন এবং ভোকাবুলারি ব্যবস্থাপনা খুব সহজ করে তোলে।

এটি একটি সহজ NLP মডেল তৈরি করার উদাহরণ যা Text Classification এর জন্য ব্যবহার করা যেতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...