DeepakKumarMSL's picture
Create README.md
2275eaa verified
|
raw
history blame
2.36 kB

🎯 Tone Detection using facebook/bart-large-mnli (Zero-Shot Classification)

This project demonstrates how to perform Tone Detection using the facebook/bart-large-mnli model through zero-shot classification based on Natural Language Inference (NLI).

This approach enables you to classify emotional tone (e.g., joy, anger, sadness) without training, by framing it as a textual entailment task.


πŸ“Œ Model Details

  • Model: facebook/bart-large-mnli
  • Task: Zero-shot classification via NLI
  • Approach: Checks if the input sentence entails a hypothesis (e.g., "This text expresses anger.")
  • Strength: No labeled training data required

πŸ“‚ Dataset Used

For benchmarking and scoring, we use the go_emotions dataset:

from datasets import load_dataset

dataset = load_dataset("go_emotions")

🧠 Tone Detection (Inference)

from transformers import pipeline

classifier = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")

labels = ["joy", "anger", "sadness", "fear", "surprise", "neutral"]

text = "I can't believe this is happening again. So frustrating."

result = classifier(text, candidate_labels=labels, hypothesis_template="This text expresses {}.")
print(result)

πŸ§ͺ Evaluation with Scoring

from sklearn.metrics import accuracy_score

# Mapping GoEmotions label indices to names
id2label = dataset["train"].features["labels"].feature.names

# Evaluate on a small sample
def evaluate(dataset, candidate_labels):
    correct = 0
    total = 0
    for row in dataset.select(range(100)):  # Use more samples as needed
        text = row["text"]
        true_labels = [id2label[i] for i in row["labels"]]
        result = classifier(text, candidate_labels=candidate_labels, hypothesis_template="This text expresses {}.")
        predicted = result["labels"][0]
        if predicted in true_labels:
            correct += 1
        total += 1
    return correct/total

accuracy = evaluate(dataset["test"], candidate_labels=labels)
print(f"Zero-shot Accuracy: {accuracy:.2%}")

βš™οΈ Use Cases

Customer support tone analysis

Chat moderation for emotional tone

Feedback sentiment detection

Real-time conversation emotion tagging