SentimentAnalysis / chatbot.py
KrSharangrav
changes in the model with topic extraction
f763dd0
raw
history blame
2.46 kB
import os
import streamlit as st
import google.generativeai as genai
from transformers import pipeline, AutoModelForSequenceClassification, AutoTokenizer
from keybert import KeyBERT # Topic Extraction
# πŸ”‘ Fetch API key from Hugging Face Secrets
GEMINI_API_KEY = os.getenv("gemini_api")
if GEMINI_API_KEY:
genai.configure(api_key=GEMINI_API_KEY)
else:
st.error("⚠️ Google API key is missing! Set it in Hugging Face Secrets.")
# Correct Model Path
MODEL_NAME = "cardiffnlp/twitter-roberta-base-sentiment"
# Load Sentiment Analysis Model
try:
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
sentiment_pipeline = pipeline("sentiment-analysis", model=MODEL_NAME, tokenizer=tokenizer)
except Exception as e:
st.error(f"❌ Error loading sentiment model: {e}")
# Load KeyBERT for topic extraction
kw_model = KeyBERT()
# Function to analyze sentiment
def analyze_sentiment(text):
try:
sentiment_result = sentiment_pipeline(text)[0]
label = sentiment_result['label'] # Extract sentiment label (POSITIVE, NEGATIVE, NEUTRAL)
score = sentiment_result['score'] # Extract confidence score
# Convert labels to readable format
sentiment_mapping = {
"LABEL_0": "Negative",
"LABEL_1": "Neutral",
"LABEL_2": "Positive"
}
return sentiment_mapping.get(label, "Unknown"), score
except Exception as e:
return f"Error analyzing sentiment: {e}", None
# Function to extract key topics
def extract_topics(text, num_keywords=3):
try:
keywords = kw_model.extract_keywords(text, keyphrase_ngram_range=(1, 2), top_n=num_keywords)
return [word[0] for word in keywords] # Return only the keywords
except Exception as e:
return [f"Error extracting topics: {e}"]
# Function to generate AI response, analyze sentiment, and extract topics
def chatbot_response(user_prompt):
if not user_prompt:
return None, None, None, None
try:
# AI Response from Gemini
model = genai.GenerativeModel("gemini-1.5-pro")
ai_response = model.generate_content(user_prompt)
# Sentiment Analysis
sentiment_label, confidence = analyze_sentiment(user_prompt)
# Topic Extraction
topics = extract_topics(user_prompt)
return ai_response.text, sentiment_label, confidence, topics
except Exception as e:
return f"❌ Error: {e}", None, None, None