|
--- |
|
license: mit |
|
datasets: |
|
- dair-ai/emotion |
|
language: |
|
- en |
|
library_name: transformers |
|
widget: |
|
- text: I am so happy with the results! |
|
- text: I am so pissed with the results! |
|
tags: |
|
- debarta |
|
- debarta-v3-small |
|
- emotions-classifier |
|
--- |
|
|
|
# Fast Emotion-X: Fine-tuned DeBERTa V3 Small Based Emotion Detection |
|
|
|
This model is a fine-tuned version of [microsoft/deberta-v3-small](https://huggingface.co/microsoft/deberta-v3-small) for emotion detection using the [dair-ai/emotion](https://huggingface.co/dair-ai/emotion) dataset. |
|
|
|
## Overview |
|
|
|
Fast Emotion-X is a state-of-the-art emotion detection model fine-tuned from Microsoft's DeBERTa V3 Small model. It is designed to accurately classify text into one of six emotional categories. Leveraging the robust capabilities of DeBERTa, this model is fine-tuned on a comprehensive emotion dataset, ensuring high accuracy and reliability. |
|
|
|
## Model Details |
|
|
|
- **Model Name:** `AnkitAI/deberta-v3-small-base-emotions-classifier` |
|
- **Base Model:** `microsoft/deberta-v3-small` |
|
- **Dataset:** [dair-ai/emotion](https://huggingface.co/dair-ai/emotion) |
|
- **Fine-tuning:** The model is fine-tuned for emotion detection with a classification head for six emotional categories: anger, disgust, fear, joy, sadness, and surprise. |
|
|
|
## Emotion Labels |
|
- Anger |
|
- Disgust |
|
- Fear |
|
- Joy |
|
- Sadness |
|
- Surprise |
|
|
|
## Usage |
|
|
|
You can use this model directly with the provided Python package or the Hugging Face `transformers` library. |
|
|
|
### Installation |
|
|
|
Install the package using pip: |
|
|
|
```bash |
|
pip install emotionclassifier |
|
``` |
|
|
|
### Basic Usage |
|
|
|
Here's an example of how to use the `emotionclassifier` to classify a single text: |
|
|
|
```python |
|
from emotionclassifier import EmotionClassifier |
|
|
|
# Initialize the classifier with the default model |
|
classifier = EmotionClassifier() |
|
|
|
# Classify a single text |
|
text = "I am very happy today!" |
|
result = classifier.predict(text) |
|
print("Emotion:", result['label']) |
|
print("Confidence:", result['confidence']) |
|
``` |
|
|
|
### Batch Processing |
|
|
|
You can classify multiple texts at once using the `predict_batch` method: |
|
|
|
```python |
|
texts = ["I am very happy today!", "I am so sad."] |
|
results = classifier.predict_batch(texts) |
|
print("Batch processing results:", results) |
|
``` |
|
|
|
### Visualization |
|
|
|
To visualize the emotion distribution of a text: |
|
|
|
```python |
|
from emotionclassifier import plot_emotion_distribution |
|
|
|
result = classifier.predict("I am very happy today!") |
|
plot_emotion_distribution(result['probabilities'], classifier.labels.values()) |
|
``` |
|
|
|
### Command-Line Interface (CLI) Usage |
|
|
|
You can also use the package from the command line: |
|
|
|
```bash |
|
emotionclassifier --model deberta-v3-small --text "I am very happy today!" |
|
``` |
|
|
|
### DataFrame Integration |
|
|
|
Integrate with pandas DataFrames to classify text columns: |
|
|
|
```python |
|
import pandas as pd |
|
from emotionclassifier import DataFrameEmotionClassifier |
|
|
|
df = pd.DataFrame({ |
|
'text': ["I am very happy today!", "I am so sad."] |
|
}) |
|
|
|
classifier = DataFrameEmotionClassifier() |
|
df = classifier.classify_dataframe(df, 'text') |
|
print(df) |
|
``` |
|
|
|
### Emotion Trends Over Time |
|
|
|
Analyze and plot emotion trends over time: |
|
|
|
```python |
|
from emotionclassifier import EmotionTrends |
|
|
|
texts = ["I am very happy today!", "I am feeling okay.", "I am very sad."] |
|
trends = EmotionTrends() |
|
emotions = trends.analyze_trends(texts) |
|
trends.plot_trends(emotions) |
|
``` |
|
|
|
### Fine-tuning |
|
|
|
Fine-tune a pre-trained model on your own dataset: |
|
|
|
```python |
|
from emotionclassifier.fine_tune import fine_tune_model |
|
|
|
# Define your training and validation datasets |
|
train_dataset = ... |
|
val_dataset = ... |
|
|
|
# Fine-tune the model |
|
fine_tune_model(classifier.model, classifier.tokenizer, train_dataset, val_dataset, output_dir='fine_tuned_model') |
|
``` |
|
|
|
### Using transformers Library |
|
|
|
```python |
|
from transformers import AutoModelForSequenceClassification, AutoTokenizer |
|
|
|
model_name = "AnkitAI/deberta-v3-small-base-emotions-classifier" |
|
model = AutoModelForSequenceClassification.from_pretrained(model_name) |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
|
|
# Example usage |
|
def predict_emotion(text): |
|
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=128) |
|
outputs = model(**inputs) |
|
logits = outputs.logits |
|
predictions = logits.argmax(dim=1) |
|
return predictions |
|
|
|
text = "I'm so happy with the results!" |
|
emotion = predict_emotion(text) |
|
print("Detected Emotion:", emotion) |
|
``` |
|
|
|
## Training |
|
|
|
The model was trained using the following parameters: |
|
|
|
- **Learning Rate:** 2e-5 |
|
- **Batch Size:** 4 |
|
- **Weight Decay:** 0.01 |
|
- **Evaluation Strategy:** Epoch |
|
|
|
### Training Details |
|
|
|
- **Evaluation Loss:** 0.0858 |
|
- **Evaluation Runtime:** 110070.6349 seconds |
|
- **Evaluation Samples/Second:** 78.495 |
|
- **Evaluation Steps/Second:** 2.453 |
|
- **Training Loss:** 0.1049 |
|
- **Evaluation Accuracy:** 94.6% |
|
- **Evaluation Precision:** 94.8% |
|
- **Evaluation Recall:** 94.5% |
|
- **Evaluation F1 Score:** 94.7% |
|
|
|
## Model Card Data |
|
|
|
| Parameter | Value | |
|
|-------------------------------|----------------------------| |
|
| Model Name | microsoft/deberta-v3-small | |
|
| Training Dataset | dair-ai/emotion | |
|
| Number of Training Epochs | 20 | |
|
| Learning Rate | 2e-5 | |
|
| Per Device Train Batch Size | 4 | |
|
| Evaluation Strategy | Epoch | |
|
| Best Model Accuracy | 94.6% | |
|
|
|
## License |
|
|
|
This model is licensed under the [MIT License](LICENSE). |