dnzblgn's picture
Update app.py
cdf1509 verified
raw
history blame
3.12 kB
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# Load models and tokenizers
sarcasm_model = AutoModelForSequenceClassification.from_pretrained("dnzblgn/Sarcasm-Detection-Customer-Reviews")
sentiment_model = AutoModelForSequenceClassification.from_pretrained("dnzblgn/Sentiment-Analysis-Customer-Reviews")
sarcasm_tokenizer = AutoTokenizer.from_pretrained("microsoft/deberta-v3-base", use_fast=False)
sentiment_tokenizer = AutoTokenizer.from_pretrained("FacebookAI/roberta-base", use_fast=False)
# Function to analyze sentiment
def analyze_sentiment(sentence):
inputs = sentiment_tokenizer(sentence, return_tensors="pt", truncation=True, padding=True, max_length=512)
with torch.no_grad():
outputs = sentiment_model(**inputs)
logits = outputs.logits
predicted_class = torch.argmax(logits, dim=-1).item()
sentiment_mapping = {1: "Negative", 0: "Positive"}
return sentiment_mapping[predicted_class]
# Function to detect sarcasm
def detect_sarcasm(sentence):
inputs = sarcasm_tokenizer(sentence, return_tensors="pt", truncation=True, padding=True, max_length=512)
with torch.no_grad():
outputs = sarcasm_model(**inputs)
logits = outputs.logits
predicted_class = torch.argmax(logits, dim=-1).item()
return "Sarcasm" if predicted_class == 1 else "Not Sarcasm"
# Combined function for text file pipeline
def process_text_pipeline(text):
sentences = text.split("\n") # Split text into multiple sentences
processed_sentences = []
for sentence in sentences:
sentiment = analyze_sentiment(sentence.strip())
if sentiment == "Positive":
sarcasm_result = detect_sarcasm(sentence.strip())
if sarcasm_result == "Sarcasm":
processed_sentences.append(f"'{sentence}' -> Sentiment: Negative (due to sarcasm)")
else:
processed_sentences.append(f"'{sentence}' -> Sentiment: Positive")
else:
processed_sentences.append(f"'{sentence}' -> Sentiment: Negative")
return "\n".join(processed_sentences)
# Simple user interface for sarcasm detection
def sarcasm_detection_interface(input_text):
sentences = input_text.split("\n")
predictions = []
for sentence in sentences:
sentiment = analyze_sentiment(sentence.strip())
if sentiment == "Negative":
predictions.append(f"'{sentence}' -> Not Sarcastic (Direct Negative Sentiment)")
else:
sarcasm_result = detect_sarcasm(sentence.strip())
predictions.append(f"'{sentence}' -> {sarcasm_result}")
return "\n".join(predictions)
# Gradio UI
interface = gr.Interface(
fn=sarcasm_detection_interface,
inputs=gr.Textbox(lines=10, placeholder="Enter one or more sentences, each on a new line."),
outputs="text",
title="Sarcasm Detection for Customer Reviews",
description="This web app analyzes customer reviews for sentiment and detects sarcasm for positive reviews.",
)
# Run the interface
if __name__ == "__main__":
interface.launch()