gsar78 commited on
Commit
01b56ac
1 Parent(s): 976c798

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +59 -6
README.md CHANGED
@@ -67,14 +67,58 @@ For simplicity, you can run this here:
67
  Alternatively, embed the following code in your application:
68
 
69
  ```python
70
- from transformers import AutoConfig, AutoModelForSequenceClassification, AutoTokenizer
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
71
 
72
- model_name = "gsar78/HellenicSentimentAI_v2"
73
 
74
- # Load the configuration, tokenizer, and model
75
- config = AutoConfig.from_pretrained(model_name)
76
- tokenizer = AutoTokenizer.from_pretrained(model_name)
77
- model = AutoModelForSequenceClassification.from_pretrained(model_name)
78
 
79
  # Function to predict sentiment and emotion
80
  def predict(texts):
@@ -131,6 +175,8 @@ def predict(texts):
131
  sample_texts = ["Απολαύσαμε μια υπέροχη βραδιά σε αυτό το εστιατόριο. "
132
  "Το μενού ήταν πολύ καλά σχεδιασμένο και κάθε πιάτο ήταν μια γευστική έκπληξη. "
133
  "Η εξυπηρέτηση ήταν άψογη και η ατμόσφαιρα ευχάριστη. Σίγουρα θα επιστρέψουμε για άλλη μια φορά."]
 
 
134
  print("Text: ", sample_texts[0])
135
  emotion_results, sentiment_results = predict(sample_texts)
136
 
@@ -147,10 +193,16 @@ for label, prob in emotion_results.items():
147
  # Change the text and predict again
148
  # Print the results
149
  print("\n======")
 
 
150
  print("\nNew prediction:")
151
  sample_texts = ["Η τελευταία μας εμπειρία στο εστιατόριο αυτό δεν ήταν ιδιαίτερα θετική. "
152
  "Αν και ο χώρος είχε μια ενδιαφέρουσα ατμόσφαιρα, το φαγητό ήταν μέτριο και η εξυπηρέτηση ήταν αργή. "
153
  "Οι τιμές ήταν επίσης απογοητευτικές για την ποιότητα που προσφέρθηκε."]
 
 
 
 
154
  print("Text: ", sample_texts[0])
155
  emotion_results, sentiment_results = predict(sample_texts)
156
 
@@ -160,6 +212,7 @@ for label, prob in sentiment_results.items():
160
  print("\nEmotion probabilities (%):")
161
  for label, prob in emotion_results.items():
162
  print(f" {label}: {prob:.2f}%")
 
163
  ```
164
 
165
  Expected output:
 
67
  Alternatively, embed the following code in your application:
68
 
69
  ```python
70
+ import torch
71
+
72
+ from transformers import AutoTokenizer, AutoConfig,XLMRobertaForSequenceClassification, PreTrainedModel
73
+ from torch import nn
74
+ from torch.nn import Dropout
75
+
76
+
77
+ # Define the CustomModel class which is predicting Both SENTIMENT POLARITY & EMOTIONS
78
+ class CustomModel(XLMRobertaForSequenceClassification):
79
+ def __init__(self, config, num_emotion_labels):
80
+ super(CustomModel, self).__init__(config)
81
+ self.num_emotion_labels = num_emotion_labels
82
+ self.dropout_emotion = nn.Dropout(config.hidden_dropout_prob)
83
+ self.emotion_classifier = nn.Sequential(
84
+ nn.Linear(config.hidden_size, 512),
85
+ nn.Mish(),
86
+ nn.Dropout(0.3),
87
+ nn.Linear(512, num_emotion_labels)
88
+ )
89
+ self._init_weights(self.emotion_classifier[0])
90
+ self._init_weights(self.emotion_classifier[3])
91
+ def _init_weights(self, module):
92
+ if isinstance(module, nn.Linear):
93
+ module.weight.data.normal_(mean=0.0, std=self.config.initializer_range)
94
+ if module.bias is not None:
95
+ module.bias.data.zero_()
96
+ def forward(self, input_ids=None, attention_mask=None, sentiment=None, labels=None):
97
+ outputs = self.roberta(input_ids=input_ids, attention_mask=attention_mask)
98
+ sequence_output = outputs[0]
99
+ if len(sequence_output.shape) != 3:
100
+ raise ValueError(f"Expected sequence_output to have 3 dimensions, got {sequence_output.shape}")
101
+ cls_hidden_states = sequence_output[:, 0, :]
102
+ cls_hidden_states = self.dropout_emotion(cls_hidden_states)
103
+ emotion_logits = self.emotion_classifier(cls_hidden_states)
104
+ with torch.no_grad():
105
+ cls_token_state = sequence_output[:, 0, :].unsqueeze(1)
106
+ sentiment_logits = self.classifier(cls_token_state).squeeze(1)
107
+ if labels is not None:
108
+ class_weights = torch.tensor([1.0] * self.num_emotion_labels).to(labels.device)
109
+ loss_fct = nn.BCEWithLogitsLoss(pos_weight=class_weights)
110
+ loss = loss_fct(emotion_logits, labels)
111
+ return {"loss": loss, "emotion_logits": emotion_logits, "sentiment_logits": sentiment_logits}
112
+ return {"emotion_logits": emotion_logits, "sentiment_logits": sentiment_logits}
113
+
114
+
115
+ # Load the tokenizer and model from the local directory
116
+ model_dir = "gsar78/HellenicSentimentAI_v2"
117
+ tokenizer = AutoTokenizer.from_pretrained(model_dir)
118
+ config = AutoConfig.from_pretrained(model_dir)
119
+ model = CustomModel.from_pretrained(model_dir, config=config, num_emotion_labels=18)
120
 
 
121
 
 
 
 
 
122
 
123
  # Function to predict sentiment and emotion
124
  def predict(texts):
 
175
  sample_texts = ["Απολαύσαμε μια υπέροχη βραδιά σε αυτό το εστιατόριο. "
176
  "Το μενού ήταν πολύ καλά σχεδιασμένο και κάθε πιάτο ήταν μια γευστική έκπληξη. "
177
  "Η εξυπηρέτηση ήταν άψογη και η ατμόσφαιρα ευχάριστη. Σίγουρα θα επιστρέψουμε για άλλη μια φορά."]
178
+
179
+
180
  print("Text: ", sample_texts[0])
181
  emotion_results, sentiment_results = predict(sample_texts)
182
 
 
193
  # Change the text and predict again
194
  # Print the results
195
  print("\n======")
196
+
197
+
198
  print("\nNew prediction:")
199
  sample_texts = ["Η τελευταία μας εμπειρία στο εστιατόριο αυτό δεν ήταν ιδιαίτερα θετική. "
200
  "Αν και ο χώρος είχε μια ενδιαφέρουσα ατμόσφαιρα, το φαγητό ήταν μέτριο και η εξυπηρέτηση ήταν αργή. "
201
  "Οι τιμές ήταν επίσης απογοητευτικές για την ποιότητα που προσφέρθηκε."]
202
+
203
+
204
+
205
+
206
  print("Text: ", sample_texts[0])
207
  emotion_results, sentiment_results = predict(sample_texts)
208
 
 
212
  print("\nEmotion probabilities (%):")
213
  for label, prob in emotion_results.items():
214
  print(f" {label}: {prob:.2f}%")
215
+
216
  ```
217
 
218
  Expected output: