| --- |
| language: en |
| tags: |
| - text-classification |
| - sentiment-analysis |
| - customer-support |
| - distilbert |
| license: mit |
| datasets: |
| - synthetic |
| metrics: |
| - accuracy |
| model-index: |
| - name: siena-sentiment |
| results: |
| - task: |
| type: text-classification |
| name: Text Classification |
| dataset: |
| type: synthetic |
| name: Customer Support Tickets |
| metrics: |
| - type: accuracy |
| value: 0.95 |
| base_model: |
| - distilbert/distilbert-base-uncased |
| --- |
| |
| # Siena Sentiment Analysis Model |
|
|
| This model is a fine-tuned version of `distilbert-base-uncased` for sentiment analysis on customer support tickets, capable of classifying text into five sentiment categories. |
|
|
| ## Model Description |
|
|
| - **Model Architecture**: DistilBERT (66M parameters) |
| - **Task**: Multi-class Sentiment Classification |
| - **Language**: English |
| - **Training Data**: 5,000 synthetic customer support tickets generated using GPT-4 |
| - **Input**: Customer support tickets or similar text (50-200 words) |
| - **Output**: Sentiment classification into one of five categories: |
| - Strong Negative (0) |
| - Mild Negative (1) |
| - Neutral (2) |
| - Mild Positive (3) |
| - Strong Positive (4) |
|
|
| ### Limitations |
|
|
| - Model is trained on synthetic data, which may not capture all real-world nuances |
| - Best suited for customer support context; may not generalize well to other domains |
| - Input text should be between 50-200 words for optimal performance |
|
|
| ## Training Procedure |
|
|
| ### Training Data |
|
|
| The model was trained on 5,000 synthetic customer support tickets: |
| - 1,000 samples per sentiment category |
| - Generated using GPT-4o-mini for balanced representation |
| - Text length between 50-200 words |
| - Focus on product and service-related issues |
|
|
| ### Training Hyperparameters |
|
|
| - Optimizer: AdamW |
| - Learning rate: 2e-5 |
| - Batch size: 16 |
| - Training epochs: 3 |
| - Max sequence length: 128 tokens |
|
|
| ## How to Use |
|
|
| Here's how to use the model with the Transformers library: |
|
|
| ```python |
| from transformers import pipeline |
| |
| # Load the sentiment analysis pipeline |
| classifier = pipeline("text-classification", model="andyfe/siena-sentiment") |
| |
| # Example text |
| text = """I am extremely disappointed with the customer service I received today. I've been waiting for a response for over a week, and when I finally got one, it didn't address my issue at all. This is unacceptable.""" |
| |
| # Get prediction |
| result = classifier(text) |
| print(result) |
| ``` |
|
|
| For more detailed usage with the model directly: |
|
|
| ```python |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification |
| import torch |
| |
| # Load model and tokenizer |
| tokenizer = AutoTokenizer.from_pretrained("andyfe/siena-sentiment") |
| model = AutoModelForSequenceClassification.from_pretrained("andyfe/siena-sentiment") |
| |
| # Prepare input text |
| text = "Your customer service team was incredibly helpful and resolved my issue quickly!" |
| inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=128) |
| |
| # Get prediction |
| outputs = model(**inputs) |
| predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) |
| predicted_label = torch.argmax(predictions).item() |
| |
| # Map prediction to sentiment label |
| id2label = { |
| 0: "Strong Negative", |
| 1: "Mild Negative", |
| 2: "Neutral", |
| 3: "Mild Positive", |
| 4: "Strong Positive" |
| } |
| |
| print(f"Predicted sentiment: {id2label[predicted_label]}") |
| ``` |