dnzblgn commited on
Commit
9028131
Β·
verified Β·
1 Parent(s): 831751c

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +40 -41
app.py CHANGED
@@ -49,53 +49,52 @@ def process_text_pipeline(text):
49
  return "\n".join(processed_sentences)
50
 
51
  # ---------------- Additional Sentiment Models (No Sarcasm) ----------------
 
52
  additional_models = {
53
- "siebert/sentiment-roberta-large-english": pipeline("sentiment-analysis", model="siebert/sentiment-roberta-large-english"),
54
- "assemblyai/bert-large-uncased-sst2": AutoModelForSequenceClassification.from_pretrained("assemblyai/bert-large-uncased-sst2"),
55
- "j-hartmann/sentiment-roberta-large-english-3-classes": pipeline("text-classification", model="j-hartmann/sentiment-roberta-large-english-3-classes", return_all_scores=True),
56
- "cardiffnlp/twitter-xlm-roberta-base-sentiment": pipeline("sentiment-analysis", model="cardiffnlp/twitter-xlm-roberta-base-sentiment", tokenizer="cardiffnlp/twitter-xlm-roberta-base-sentiment"),
57
- "sohan-ai/sentiment-analysis-model-amazon-reviews": DistilBertForSequenceClassification.from_pretrained("sohan-ai/sentiment-analysis-model-amazon-reviews")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
59
 
60
  def run_sentiment_with_selected_model(text, model_name):
61
- if model_name == "siebert/sentiment-roberta-large-english":
62
- result = additional_models[model_name](text)[0]
63
- emoji = "βœ…" if result["label"].lower() == "positive" else "❌"
64
- return f"{emoji} '{text}' -> {result['label']}"
65
-
66
- elif model_name == "assemblyai/bert-large-uncased-sst2":
67
- tokenizer = AutoTokenizer.from_pretrained(model_name)
68
- model = additional_models[model_name]
69
- tokens = tokenizer([text], return_tensors="pt", padding=True, truncation=True)
70
- outputs = F.softmax(model(**tokens).logits, dim=1)
71
- prob_pos = outputs[0][1].item()
72
- prob_neg = outputs[0][0].item()
73
- emoji = "βœ…" if prob_pos > prob_neg else "❌"
74
- return f"{emoji} '{text}' -> Positive: {prob_pos:.2%}, Negative: {prob_neg:.2%}"
75
-
76
- elif model_name == "j-hartmann/sentiment-roberta-large-english-3-classes":
77
- results = additional_models[model_name](text)[0]
78
- label_scores = {res['label']: res['score'] for res in results}
79
- label = max(label_scores, key=label_scores.get)
80
- emoji = "βœ…" if "positive" in label.lower() else "❌" if "negative" in label.lower() else "⚠️"
81
- score_str = ", ".join([f"{k}: {v:.2%}" for k, v in label_scores.items()])
82
- return f"{emoji} '{text}' -> {score_str}"
83
-
84
- elif model_name == "cardiffnlp/twitter-xlm-roberta-base-sentiment":
85
- result = additional_models[model_name](text)[0]
86
- emoji = "βœ…" if result["label"].lower() == "positive" else "❌" if result["label"].lower() == "negative" else "⚠️"
87
- return f"{emoji} '{text}' -> {result['label']}"
88
-
89
- elif model_name == "sohan-ai/sentiment-analysis-model-amazon-reviews":
90
- tokenizer = DistilBertTokenizer.from_pretrained("distilbert-base-uncased")
91
- model = additional_models[model_name]
92
- inputs = tokenizer(text, return_tensors="pt")
93
  outputs = model(**inputs)
94
- label = "Positive" if outputs.logits.argmax().item() == 1 else "Negative"
95
- emoji = "βœ…" if label == "Positive" else "❌"
96
- return f"{emoji} '{text}' -> {label}"
97
 
98
- return f"⚠️ Could not process with selected model."
 
 
 
 
 
 
 
 
 
 
 
 
99
 
100
  # ---------------- Gradio UI ----------------
101
  background_css = """
 
49
  return "\n".join(processed_sentences)
50
 
51
  # ---------------- Additional Sentiment Models (No Sarcasm) ----------------
52
+ # Pre-load tokenizers + models for safety
53
  additional_models = {
54
+ "siebert/sentiment-roberta-large-english": {
55
+ "tokenizer": AutoTokenizer.from_pretrained("siebert/sentiment-roberta-large-english"),
56
+ "model": AutoModelForSequenceClassification.from_pretrained("siebert/sentiment-roberta-large-english")
57
+ },
58
+ "assemblyai/bert-large-uncased-sst2": {
59
+ "tokenizer": AutoTokenizer.from_pretrained("assemblyai/bert-large-uncased-sst2"),
60
+ "model": AutoModelForSequenceClassification.from_pretrained("assemblyai/bert-large-uncased-sst2")
61
+ },
62
+ "j-hartmann/sentiment-roberta-large-english-3-classes": {
63
+ "tokenizer": AutoTokenizer.from_pretrained("j-hartmann/sentiment-roberta-large-english-3-classes"),
64
+ "model": AutoModelForSequenceClassification.from_pretrained("j-hartmann/sentiment-roberta-large-english-3-classes")
65
+ },
66
+ "cardiffnlp/twitter-xlm-roberta-base-sentiment": {
67
+ "tokenizer": AutoTokenizer.from_pretrained("cardiffnlp/twitter-xlm-roberta-base-sentiment"),
68
+ "model": AutoModelForSequenceClassification.from_pretrained("cardiffnlp/twitter-xlm-roberta-base-sentiment")
69
+ },
70
+ "sohan-ai/sentiment-analysis-model-amazon-reviews": {
71
+ "tokenizer": DistilBertTokenizer.from_pretrained("distilbert-base-uncased"),
72
+ "model": DistilBertForSequenceClassification.from_pretrained("sohan-ai/sentiment-analysis-model-amazon-reviews")
73
+ }
74
  }
75
 
76
  def run_sentiment_with_selected_model(text, model_name):
77
+ model_info = additional_models[model_name]
78
+ tokenizer = model_info["tokenizer"]
79
+ model = model_info["model"]
80
+
81
+ inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True)
82
+ with torch.no_grad():
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  outputs = model(**inputs)
 
 
 
84
 
85
+ logits = outputs.logits
86
+ probs = torch.nn.functional.softmax(logits, dim=-1)
87
+ pred = torch.argmax(probs, dim=-1).item()
88
+
89
+ # Get label from model config if available
90
+ if model.config.id2label:
91
+ label = model.config.id2label[pred]
92
+ else:
93
+ label = "Positive" if pred == 1 else "Negative"
94
+
95
+ emoji = "βœ…" if "positive" in label.lower() else "❌" if "negative" in label.lower() else "⚠️"
96
+ return f"{emoji} '{text}' -> {label}"
97
+
98
 
99
  # ---------------- Gradio UI ----------------
100
  background_css = """