File size: 2,183 Bytes
1ffe627 4cd7090 1ffe627 4cd7090 9c3068d 4cd7090 39c2d5b 4cd7090 1ffe627 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 1ffe627 4cd7090 9c3068d 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b 4cd7090 39c2d5b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# ๐ฏ Tone Detection using `yiyanghkust/finbert-tone`
This project demonstrates how to perform **Tone Detection** using the [`yiyanghkust/finbert-tone`].
This approach enables you to classify emotional tone (e.g., Positive, Negative, Neutral, etc.) **without training**, by framing it as a textual entailment task.
---
## ๐ Model Details
- **Model:** `yiyanghkust/finbert-tone`
- **Task:** Detect the tone of financial text
- **Approach:** Checks if the input sentence entails a hypothesis (e.g., "Positive" or Negative)
- **Strength:** No labeled training data required
---
## ๐ Dataset Used
For benchmarking and scoring, we use the [`go_emotions`](https://huggingface.co/datasets/go_emotions) dataset:
```python
from datasets import load_dataset
dataset = load_dataset("go_emotions")
```
# ๐ง Tone Detection (Inference)
```Python
from transformers import pipeline
classifier = pipeline("zero-shot-classification", model="yiyanghkust/finbert-tone")
labels = ["positive", "neutral", "negative"]
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
```python
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 |