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 processing sentences 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 == "Negative": processed_sentences.append(f"'{sentence}' -> Sentiment: Negative") else: sarcasm_result = detect_sarcasm(sentence.strip()) if sarcasm_result == "Sarcasm": processed_sentences.append(f"'{sentence}' -> Sentiment: Negative (Sarcastic Positive)") else: processed_sentences.append(f"'{sentence}' -> Sentiment: Positive") return "\n".join(processed_sentences) # Gradio UI interface = gr.Interface( fn=process_text_pipeline, 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()