πŸŽ‰ 75% of content is free forever β€” Unlock Premium from $10/mo β†’
CW
Search courses…
πŸ’Ό Servicesℹ️ Aboutβœ‰οΈ ContactView Pricing Plansfrom $10

Sentiment Analysis

Text ClassificationSentiment Analysis🟒 Free Lesson

Advertisement

Sentiment Analysis

Sentiment analysis (opinion mining) automatically detects the emotional tone of textβ€”whether it expresses positive, negative, or neutral sentiment. It's widely used for brand monitoring, customer feedback analysis, and social media analytics.

Approaches to Sentiment Analysis

ApproachProsConsAccuracy
Lexicon-basedNo training data needed, interpretableLimited context understanding60-75%
Traditional MLGood with domain-specific dataNeeds labeled data80-88%
Deep LearningCaptures complex patternsNeeds large datasets, less interpretable88-95%
Transformer-basedState-of-the-art, contextualResource intensive92-97%

1. Lexicon-Based Approach

Uses predefined sentiment dictionaries where each word has a sentiment score.

from nltk.sentiment import SentimentIntensityAnalyzer
import nltk
nltk.download('vader_lexicon')

sia = SentimentIntensityAnalyzer()

texts = [
    "This product is amazing! Best purchase ever!",
    "Terrible quality. Complete waste of money.",
    "It's okay, nothing special."
]

for text in texts:
    scores = sia.polarity_scores(text)
    print(f"Text: {text}")
    print(f"  Scores: {scores}")
    print(f"  Label: {'positive' if scores['compound'] > 0.05 else 'negative' if scores['compound'] < -0.05 else 'neutral'}")
    print()

Custom Lexicon

custom_lexicon = {
    "excellent": 3.0,
    "great": 2.0,
    "good": 1.5,
    "okay": 0.0,
    "bad": -1.5,
    "terrible": -3.0,
    "awful": -3.0
}

def lexicon_sentiment(text, lexicon):
    words = text.lower().split()
    score = sum(lexicon.get(w, 0) for w in words)
    return "positive" if score > 0 else "negative" if score < 0 else "neutral"

2. Machine Learning Approach

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split

# Training data
texts = ["Great product!", "Love it!", "Amazing quality",
         "Terrible", "Worst ever", "Very bad"]
labels = [1, 1, 1, 0, 0, 0]  # 1=positive, 0=negative

# Build pipeline
pipeline = Pipeline([
    ('tfidf', TfidfVectorizer(ngram_range=(1, 2))),
    ('clf', LogisticRegression())
])

# Train
pipeline.fit(texts, labels)

# Predict
test = ["This is wonderful", "I hate this"]
predictions = pipeline.predict(test)
for text, pred in zip(test, predictions):
    print(f"{text} -> {'positive' if pred == 1 else 'negative'}")

3. Deep Learning with Transformers

from transformers import pipeline

classifier = pipeline("sentiment-analysis")

reviews = [
    "Absolutely fantastic! Will buy again.",
    "Product broke after one day. Terrible.",
    "Average product, meets basic needs."
]

for review in reviews:
    result = classifier(review)[0]
    print(f"{result['label']}: {result['score']:.3f} | {review}")

Fine-Tuning for Domain-Specific Sentiment

from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import TrainingArguments, Trainer
from datasets import load_dataset

# Load dataset
dataset = load_dataset("imdb")

# Load model and tokenizer
model_name = "distilbert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2)

# Tokenize
def tokenize(batch):
    return tokenizer(batch["text"], padding=True, truncation=True)

dataset = dataset.map(tokenize, batched=True)

# Training
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    evaluation_strategy="epoch"
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset["train"],
    eval_dataset=dataset["test"]
)

trainer.train()

Aspect-Based Sentiment Analysis

Analyzes sentiment toward specific aspects of a product or service.

# Example: "The camera quality is excellent but the battery life is terrible"
# Camera quality: positive
# Battery life: negative

# Using PyABSA or custom NER + sentiment pipeline
⭐

Premium Content

Sentiment Analysis

Unlock this lesson and 900+ advanced tutorials with a Premium plan.

🎯End-to-end Projects
πŸ’ΌInterview Prep
πŸ“œCertificates
🀝Community Access

Already a member? Log in

Need Expert NLP Help?

Get personalized tutoring, project support, or professional consulting.

Advertisement