|
--- |
|
base_model: bert-base-cased |
|
datasets: |
|
- ma2za/many_emotions |
|
license: apache-2.0 |
|
tags: |
|
- onnx |
|
- emotion-detection |
|
- BaseLM:bert-base-cased |
|
--- |
|
|
|
# BERT-Based Emotion Detection on ma2za/many_emotions |
|
|
|
This repository hosts a fine-tuned emotion detection model built on [BERT-base-cased](https://huggingface.co/bert-base-cased). The model is trained on the [ma2za/many_emotions](https://huggingface.co/datasets/ma2za/many_emotions) dataset to classify text into one of seven emotion categories: anger, fear, joy, love, sadness, surprise, and neutral. The model is available in both PyTorch and ONNX formats for efficient deployment. |
|
|
|
## Model Details |
|
|
|
### Model Description |
|
|
|
- **Developed by:** *Your Name or Organization* |
|
- **Model Type:** Sequence Classification (Emotion Detection) |
|
- **Base Model:** bert-base-cased |
|
- **Dataset:** ma2za/many_emotions |
|
- **Export Format:** ONNX (for deployment) |
|
- **License:** Apache-2.0 |
|
- **Tags:** onnx, emotion-detection, BERT, sequence-classification |
|
|
|
This model was fine-tuned on the ma2za/many_emotions dataset, where the text is classified into emotion categories based on the content. For quick experimentation, a subset of the training data was used; however, the full model has been trained with the complete dataset and is now publicly available. |
|
|
|
## Training Details |
|
|
|
### Dataset Details |
|
- **Dataset ID:** ma2za/many_emotions |
|
- **Text Column:** `text` |
|
- **Label Column:** `label` |
|
|
|
### Training Hyperparameters |
|
- **Epochs:** 1 (for quick test; adjust to your needs) |
|
- **Per Device Batch Size:** 96 |
|
- **Learning Rate:** 1e-5 |
|
- **Weight Decay:** 0.01 |
|
- **Optimizer:** AdamW |
|
- **Training Duration:** The full training run on the complete dataset (approximately 2.44 million training examples) was completed in about 3 hours and 40 minutes. |
|
|
|
|
|
|
|
## ONNX Export |
|
|
|
The model has been exported to the ONNX format using opset version 14, ensuring support for modern operators such as `scaled_dot_product_attention`. This enables flexible deployment scenarios across different platforms using ONNX Runtime. |
|
|
|
## How to Load the Model |
|
|
|
Instead of loading the model from a local directory, you can load it directly from the Hugging Face Hub using the repository name `iimran/EmotionDetection`. |
|
|
|
### Loading with Transformers (PyTorch) |
|
|
|
```python |
|
import os |
|
import numpy as np |
|
import onnxruntime as ort |
|
from transformers import AutoTokenizer, AutoConfig |
|
from huggingface_hub import hf_hub_download |
|
|
|
# Specify the repository details. |
|
repo_id = "iimran/EmotionDetection" |
|
filename = "model.onnx" |
|
|
|
# Download the ONNX model file from the Hub. |
|
onnx_model_path = hf_hub_download(repo_id=repo_id, filename=filename) |
|
print("Model downloaded to:", onnx_model_path) |
|
|
|
# Load the tokenizer and configuration from the repository. |
|
tokenizer = AutoTokenizer.from_pretrained(repo_id) |
|
config = AutoConfig.from_pretrained(repo_id) |
|
|
|
# Check whether the configuration contains an id2label mapping. |
|
if hasattr(config, "id2label") and config.id2label and len(config.id2label) > 0: |
|
id2label = config.id2label |
|
else: |
|
# Default mapping for ma2za/many_emotions if not present in the config. |
|
id2label = { |
|
0: "anger", |
|
1: "fear", |
|
2: "joy", |
|
3: "love", |
|
4: "sadness", |
|
5: "surprise", |
|
6: "neutral" |
|
} |
|
print("id2label mapping:", id2label) |
|
|
|
# Create an ONNX Runtime inference session using the local model file. |
|
session = ort.InferenceSession(onnx_model_path) |
|
|
|
def onnx_infer(text): |
|
""" |
|
Perform inference on the input text using the exported ONNX model. |
|
Returns the predicted emotion label. |
|
""" |
|
# Tokenize the input text with a fixed maximum sequence length matching the model export. |
|
inputs = tokenizer( |
|
text, |
|
return_tensors="np", |
|
truncation=True, |
|
padding="max_length", |
|
max_length=256 |
|
) |
|
|
|
# Prepare the model inputs. |
|
ort_inputs = { |
|
"input_ids": inputs["input_ids"], |
|
"attention_mask": inputs["attention_mask"] |
|
} |
|
|
|
# Run the model. |
|
outputs = session.run(None, ort_inputs) |
|
logits = outputs[0] |
|
|
|
# Get the predicted class id. |
|
predicted_class_id = int(np.argmax(logits, axis=-1)[0]) |
|
|
|
# Map the predicted class id to its emotion label. |
|
predicted_label = id2label.get(str(predicted_class_id), id2label.get(predicted_class_id, str(predicted_class_id))) |
|
|
|
print("Predicted Emotion ID:", predicted_class_id) |
|
print("Predicted Emotion:", predicted_label) |
|
return predicted_label |
|
|
|
# Test the inference function. |
|
onnx_infer("That rude customer made me furious.") |
|
``` |
|
## Evaluation |
|
The model is primarily evaluated using the accuracy metric during training. For deployment, further evaluation on unseen data is recommended to ensure robustness in production settings. |
|
|
|
|