নিজের সেন্টিমেন্ট বিশ্লেষণ টুল তৈরি করা বড় ভাষা মডেল (LLM) ব্যবহার করে
ভূমিকা
সেন্টিমেন্ট বিশ্লেষণ হলো একটি প্রক্রিয়া যা টেক্সটের भावনামূলক টোন নির্ধারণ করে। এটি বিভিন্ন ক্ষেত্র যেমন মার্কেটিং, কাস্টমার সার্ভিস বা জনমত অনুসন্ধানে ব্যবহার করা যেতে পারে। এই নিবন্ধে আমরা দেখবো কিভাবে নিজের সেন্টিমেন্ট বিশ্লেষণ টুল তৈরি করা যেতে পারে বড় ভাষা মডেল (LLM) ব্যবহার করে।
মডেল নির্বাচন
প্রথম ধাপ হলো উপযুক্ত ভাষা মডেল নির্বাচন করা। আমরা নির্বাচন করতে পারি:
- প্রাক-ট্রেনড মডেল (যেমন BERT, RoBERTa, DistilBERT) – ব্যবহার করার জন্য প্রস্তুত কিন্তু এডজাস্টমেন্টের প্রয়োজন
- স্পেশালাইজড মডেল (যেমন VADER, TextBlob) – বিশেষভাবে সেন্টিমেন্ট বিশ্লেষণের জন্য ডিজাইন করা
- নিজের মডেল – নিজের ডোমেনের ডেটা ব্যবহার করে ট্রেন করা
আমাদের উদাহরণের জন্য আমরা ব্যবহার করবো Hugging Face Transformers এর সাথে DistilBERT মডেল, যা BERT এর একটি হালকা সংস্করণ এবং সেন্টিমেন্ট বিশ্লেষণের জন্য ভালোভাবে উপযুক্ত।
প্রয়োজনীয় লাইব্রেরি ইনস্টলেশন
শুরু করার জন্য প্রয়োজনীয় লাইব্রেরি ইনস্টল করি:
pip install transformers torch pandas
মডেল এবং টোকেনাইজার লোড করা
পরবর্তী ধাপে মডেল এবং টোকেনাইজার লোড করা:
from transformers import pipeline
# সেন্টিমেন্ট বিশ্লেষণের জন্য প্রস্তুত টুল লোড করা
sentiment_pipeline = pipeline("sentiment-analysis")
ডেটা প্রস্তুতি
আমরা একটি ডেটা সেট প্রস্তুত করবো টেস্টিং এর জন্য। আমরা একটি সরল উদাহরণ ব্যবহার করতে পারি:
texts = [
"আমি এই পণ্য ভালবাসি, এটি অদ্ভুত!",
"আমি সুপারিশ করি না, খুব হতাশ",
"মাঝামাঝি পণ্য, কিছু বিশেষ নয়",
"কাজ করা হচ্ছে সন্তোষজনক, কিন্তু দাম খুব বেশি"
]
সেন্টিমেন্ট বিশ্লেষণ
এখন আমরা আমাদের টেক্সটের জন্য সেন্টিমেন্ট বিশ্লেষণ করতে পারি:
results = sentiment_pipeline(texts)
for text, result in zip(texts, results):
print(f"টেক্সট: {text}")
print(f"সেন্টিমেন্ট: {result['label']} (নিশ্চয়তা: {result['score']:.2f})")
print("---")
মডেল এডজাস্টমেন্ট
যদি আমরা আমাদের বিশেষ ডেটার জন্য মডেল এডজাস্ট করতে চাই, আমরা Hugging Face Transformers লাইব্রেরি ব্যবহার করতে পারি আমাদের ডেটা সেটে মডেল ট্রেন করার জন্য।
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import Trainer, TrainingArguments
import pandas as pd
from sklearn.model_selection import train_test_split
# উদাহরণ ডেটা সেট
data = pd.DataFrame({
"text": ["আমি এই পণ্য ভালবাসি", "আমি সুপারিশ করি না", "মাঝামাঝি পণ্য"],
"label": [1, 0, 0] # 1 - পজিটিভ, 0 - নেগেটিভ
})
# ডেটা সেট ট্রেনিং এবং টেস্ট সেটে বিভক্ত করা
train_texts, test_texts, train_labels, test_labels = train_test_split(
data["text"], data["label"], test_size=0.2
)
# টোকেনাইজার এবং মডেল লোড করা
model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)
# ডেটা টোকেনাইজেশন
train_encodings = tokenizer(list(train_texts), truncation=True, padding=True)
test_encodings = tokenizer(list(test_texts), truncation=True, padding=True)
# ডেটা হ্যান্ডলিং ক্লাস
class SentimentDataset(torch.utils.data.Dataset):
def __init__(self, encodings, labels):
self.encodings = encodings
self.labels = labels
def __getitem__(self, idx):
item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()}
item["labels"] = torch.tensor(self.labels[idx])
return item
def __len__(self):
return len(self.labels)
train_dataset = SentimentDataset(train_encodings, train_labels)
test_dataset = SentimentDataset(test_encodings, test_labels)
# ট্রেনিং সেটিংস
training_args = TrainingArguments(
output_dir="./results",
num_train_epochs=3,
per_device_train_batch_size=16,
per_device_eval_batch_size=64,
warmup_steps=500,
weight_decay=0.01,
logging_dir="./logs",
logging_steps=10,
)
# মডেল ট্রেনিং
trainer = Trainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=test_dataset
)
trainer.train()
মডেল ডিপ্লয়মেন্ট
মডেল ট্রেনিং করার পর আমরা এটি সেভ করতে পারি এবং সেন্টিমেন্ট বিশ্লেষণের জন্য ব্যবহার করতে পারি:
model.save_pretrained("./custom_sentiment_model")
tokenizer.save_pretrained("./custom_sentiment_model")
# এডজাস্টেড মডেল লোড করা
custom_model = AutoModelForSequenceClassification.from_pretrained("./custom_sentiment_model")
custom_tokenizer = AutoTokenizer.from_pretrained("./custom_sentiment_model")
# উদাহরণ বিশ্লেষণ
custom_pipeline = pipeline("sentiment-analysis", model=custom_model, tokenizer=custom_tokenizer)
print(custom_pipeline("এই পণ্য সুপার!"))
সারাংশ
এই নিবন্ধে আমরা দেখেছি কিভাবে নিজের সেন্টিমেন্ট বিশ্লেষণ টুল তৈরি করা যেতে পারে বড় ভাষা মডেল ব্যবহার করে। ধাপে ধাপে আমরা মডেল নির্বাচন, ডেটা প্রস্তুতি, সেন্টিমেন্ট বিশ্লেষণ এবং মডেল এডজাস্টমেন্টের প্রক্রিয়াগুলি আলোচনা করেছি। এই টুলের মাধ্যমে আমরা বিভিন্ন ক্ষেত্রে টেক্সটের भावনামূলক টোন বিশ্লেষণ করতে পারি।