|
|
--- |
|
|
language: multilingual |
|
|
license: apache-2.0 |
|
|
tags: |
|
|
- sentiment-analysis |
|
|
- text-classification |
|
|
- xlm-roberta |
|
|
- dual-head |
|
|
--- |
|
|
|
|
|
# Sentiment Classifier |
|
|
|
|
|
## Model Description |
|
|
|
|
|
This is a dual-head sentiment classifier built on top of XLM-RoBERTa. The model performs two tasks simultaneously: |
|
|
|
|
|
1. **Sentiment Classification:** Predicts sentiment labels (positive, neutral, negative) |
|
|
2. **Sentiment Score Regression:** Predicts a continuous sentiment score in the range [0, 1] |
|
|
|
|
|
The model uses a weighted loss function combining cross-entropy (70%) for classification and MSE (30%) for regression, |
|
|
allowing it to capture both discrete sentiment categories and fine-grained sentiment intensity. |
|
|
|
|
|
## Model Architecture |
|
|
|
|
|
- **Base Model:** xlm-roberta-base |
|
|
- **Task:** text-classification |
|
|
- **Number of Labels:** 3 |
|
|
- **Labels:** negative, neutral, positive |
|
|
|
|
|
## Training Configuration |
|
|
|
|
|
- **Epochs:** 10 |
|
|
- **Batch Size:** 128 |
|
|
- **Learning Rate:** 2e-05 |
|
|
- **Warmup Ratio:** 0.1 |
|
|
- **Weight Decay:** 0.01 |
|
|
- **Max Seq Length:** 256 |
|
|
- **Mixed Precision:** FP16=False, BF16=True |
|
|
|
|
|
## Performance Metrics |
|
|
|
|
|
- **Loss:** 0.6947 |
|
|
- **Accuracy:** 0.4901 |
|
|
- **Precision:** 0.2402 |
|
|
- **Recall:** 0.4901 |
|
|
- **F1:** 0.3224 |
|
|
- **F1 Macro:** 0.3289 |
|
|
- **F1 Negative:** 0.0000 |
|
|
- **Precision Negative:** 0.0000 |
|
|
- **Recall Negative:** 0.0000 |
|
|
- **Support Negative:** 900 |
|
|
- **F1 Neutral:** 0.6578 |
|
|
- **Precision Neutral:** 0.4901 |
|
|
- **Recall Neutral:** 1.0000 |
|
|
- **Support Neutral:** 865 |
|
|
- **Runtime:** 0.7012 |
|
|
- **Samples Per Second:** 2517.1350 |
|
|
- **Steps Per Second:** 9.9830 |
|
|
|
|
|
## Model Outputs |
|
|
|
|
|
The model returns two outputs: |
|
|
|
|
|
- **Logits:** Classification logits for sentiment labels [batch_size, 3] |
|
|
- **Score Predictions:** Continuous sentiment scores [batch_size] |
|
|
|
|
|
Both outputs are computed from the same shared representation (CLS token) of the input text. |
|
|
|
|
|
## Intended Use |
|
|
|
|
|
This model is intended for sentiment analysis tasks on multilingual text, particularly in scenarios where both |
|
|
categorical sentiment (positive/neutral/negative) and sentiment intensity are important. |
|
|
|
|
|
**Typical use cases:** |
|
|
- Product review analysis |
|
|
- Social media sentiment monitoring |
|
|
- Customer feedback classification |
|
|
|
|
|
## Usage |
|
|
|
|
|
```python |
|
|
from transformers import AutoTokenizer |
|
|
from src.models.sentiment_classifier import SentimentClassifier |
|
|
|
|
|
# Load model and tokenizer |
|
|
model = SentimentClassifier.from_pretrained("YOUR_USERNAME/sentiment-classifier") |
|
|
tokenizer = AutoTokenizer.from_pretrained("xlm-roberta-base") |
|
|
|
|
|
# Prepare input |
|
|
text = "Your input text here" |
|
|
inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True) |
|
|
|
|
|
# Make prediction |
|
|
outputs = model(**inputs) |
|
|
predictions = outputs["logits"].argmax(dim=-1) |
|
|
``` |
|
|
|
|
|
## Citation |
|
|
|
|
|
If you use this model, please cite: |
|
|
|
|
|
```bibtex |
|
|
@misc{sentiment_classifier, |
|
|
title={Sentiment Classifier}, |
|
|
author={{Your Name}}, |
|
|
year={2025}, |
|
|
publisher={Hugging Face}, |
|
|
howpublished={{\url{{https://huggingface.co/YOUR_USERNAME/{model_name.lower().replace(' ', '-')}}}}} |
|
|
} |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
*This model card was automatically generated with [Claude Code](https://claude.com/claude-code)* |