Spaces:
Sleeping
Sleeping
File size: 2,422 Bytes
cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 08d98c4 2debc3e 08d98c4 cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e 11fa374 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e cd85011 2debc3e |
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 |