Sentiment analysis is a sequence classification task that assigns an emotional label (e.g., Positive, Negative, Neutral) to a text string. Modern approaches have shifted from lexicon-based counting to transformer-based fine-tuning.
For production systems, fine-tuning a small transformer (e.g., distilbert-base-uncased) on domain-specific labels provides the best balance of accuracy and performance.
from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments
from datasets import load_dataset
# 1. Load Pre-trained Model and Tokenizer
model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=3)
# 2. Preprocess Dataset (Tokenization)
dataset = load_dataset("imdb") # Example using IMDB reviews
def tokenize_function(examples):
return tokenizer(examples["text"], padding="max_length", truncation=True)
tokenized_datasets = dataset.map(tokenize_function, batched=True)
# 3. Define Training Arguments
training_args = TrainingArguments(
output_dir="./results",
learning_rate=2e-5,
per_device_train_batch_size=16,
num_train_epochs=3,
weight_decay=0.01,
evaluation_strategy="epoch"
)
# 4. Initialize Trainer
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_datasets["train"],
eval_dataset=tokenized_datasets["test"]
)
# 5. Fine-tune
trainer.train()
Generic sentiment often misses nuance (e.g., "The food was great but the service was slow").
transformers library.