--- tags: - emotion-recognition - affective-computing - text-classification - huggingface license: mit --- # MiniLM-L12-Affect: Emotion Classification Model This model is a fine-tuned version of **MiniLM-L12-H384-uncased** for **emotion classification** in text. It is capable of predicting six basic emotions: **Joy, Anger, Fear, Sadness, Surprise, Disgust**. This is an early test version of the model and not a final, polished release. It is still a work in progress, and future versions may include improvements and refinements. ## Description This model has been fine-tuned on a custom emotion dataset. It takes a text input and predicts the intensity of each of the six emotions listed above. The model uses the **MiniLM** architecture, which is lightweight and fast, offering good performance for NLP tasks with fewer parameters. ## Predictable Emotions The model can predict the following emotions in text: - **Joy** - **Anger** - **Fear** - **Sadness** - **Surprise** - **Disgust** ## Usage Here is an example of how to run inference with the model: ```python import torch from torch import nn from transformers import AutoTokenizer, AutoModel import safetensors.torch import pandas as pd # Custom model class for emotion classification using MiniLM class MiniLMEmotionClassifier(nn.Module): def __init__(self, model_name): super(MiniLMEmotionClassifier, self).__init__() self.base_model = AutoModel.from_pretrained(model_name, ignore_mismatched_sizes=True) # Load the MiniLM model self.dropout = nn.Dropout(0.1) # Dropout for regularization self.fc = nn.Linear(384, 6) # Output layer for 6 emotion categories def forward(self, input_ids, attention_mask=None, labels=None): outputs = self.base_model(input_ids=input_ids, attention_mask=attention_mask) pooled_output = outputs.last_hidden_state[:, 0, :] # Extract [CLS] token representation pooled_output = self.dropout(pooled_output) logits = self.fc(pooled_output) # Compute predictions loss = None if labels is not None: # Use MSE loss for regression-style emotion prediction loss_fct = nn.MSELoss() loss = loss_fct(logits, labels.view_as(logits)) return {"loss": loss, "logits": logits} if loss is not None else {"logits": logits} # Path to the safetensors model file model_path = 'MiniLM-L12-Affect/model.safetensors' # Load model weights from the safetensors file with open(model_path, 'rb') as f: model_data = f.read() model_state_dict = safetensors.torch.load(model_data) # Initialize the MiniLM model model_name = "./MiniLM-L12-Affect" model = MiniLMEmotionClassifier(model_name) # Load pre-trained weights into the model model.load_state_dict(model_state_dict, strict = False) # Load the tokenizer tokenizer = AutoTokenizer.from_pretrained("./MiniLM-L12-Affect", ignore_mismatched_sizes=True) # Move model to GPU if available device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) model.eval() def predict_emotions(text): """Tokenizes input text and predicts emotion scores.""" inputs = tokenizer( text, padding="max_length", truncation=True, max_length=128, return_tensors="pt" ) # Remove 'token_type_ids' if present inputs.pop('token_type_ids', None) inputs = {key: value.to(device) for key, value in inputs.items()} with torch.no_grad(): outputs = model(**inputs) predictions = outputs["logits"].cpu().numpy()[0] return predictions # Example inference test_text = "This is horribly amazing ! you're a genius" emotions = predict_emotions(test_text) # Emotion categories categories = ["Joy", "Anger", "Fear", "Sadness", "Surprise", "Disgust"] # Display the results print(f"Text: {test_text}") emotion_df = pd.DataFrame(emotions.reshape(1, -1), columns=categories) print(emotion_df) ``` ### Result **Text:** OMG This is horribly amazing ! you're a genius | | Joy | Anger | Fear | Sadness | Surprise | Disgust | |-----|---------|--------|---------|---------|----------|---------| | 0 | 0.844805 | 0.02971 | 0.008245 | -0.007872 | 0.668609 | 0.001267 | ## Deployment The model is ready to be deployed in applications that require emotion detection, such as chatbots, recommendation systems, or other services needing emotion analysis in text. ## License The model is licensed under the **MIT License**. You are free to use, modify, and integrate it into your own projects. ## Limitations - This model was trained on a specific custom dataset of 50K pairs and might not perform optimally on other domains or languages. - The model currently only handles English text. --- ### Credits - Base model: **MiniLM-L12-H384-uncased** (Microsoft) - Dataset: **Custom Dataset** - Developed by: **Pharci**