Spaces:
Running
Running
File size: 2,422 Bytes
cd85011 2debc3e cd85011 6cce2e6 cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 6cce2e6 cd85011 6cce2e6 2debc3e 6cce2e6 cd85011 7a7ff91 67c9522 7a7ff91 6cce2e6 67c9522 7a7ff91 cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e 6cce2e6 cd85011 6cce2e6 2debc3e cd85011 6cce2e6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers_interpret import SequenceClassificationExplainer
import torch
import pandas as pd
class EmotionDetection:
"""
Emotion Detection on text data.
Attributes:
tokenizer: An instance of Hugging Face Tokenizer
model: An instance of Hugging Face Model
explainer: An instance of SequenceClassificationExplainer from Transformers interpret
"""
def __init__(self):
hub_location = 'cardiffnlp/twitter-roberta-base-emotion'
self.tokenizer = AutoTokenizer.from_pretrained(hub_location)
self.model = AutoModelForSequenceClassification.from_pretrained(hub_location)
self.explainer = SequenceClassificationExplainer(self.model, self.tokenizer)
def justify(self, text):
"""
Get html annotation for displaying emotion justification over text.
Parameters:
text (str): The user input string to emotion justification
Returns:
html (hmtl): html object for plotting emotion prediction justification
"""
word_attributions = self.explainer(text)
html = self.explainer.visualize("example.html")
return html
def classify(self, text):
"""
Recognize Emotion in text.
Parameters:
text (str): The user input string to perform emotion classification on
Returns:
predictions (str): The predicted probabilities for emotion classes
"""
tokens = self.tokenizer.encode_plus(text, add_special_tokens=False, return_tensors='pt')
outputs = self.model(**tokens)
probs = torch.nn.functional.softmax(outputs[0], dim=-1)
probs = probs.mean(dim=0).detach().numpy()
labels = list(self.model.config.id2label.values())
preds = pd.Series(probs, index=labels, name='Predicted Probability')
return preds
def run(self, text):
"""
Classify and Justify Emotion in text.
Parameters:
text (str): The user input string to perform emotion classification on
Returns:
predictions (str): The predicted probabilities for emotion classes
html (hmtl): html object for plotting emotion prediction justification
"""
preds = self.classify(text)
html = self.justify(text)
return preds, html |