Spaces:
No application file
No application file
| import streamlit as st | |
| from transformers import BertTokenizer, BertForSequenceClassification | |
| import torch | |
| # Load the fine-tuned model and tokenizer | |
| def load_model(): | |
| model = BertForSequenceClassification.from_pretrained('nik20004/absa-sentiment-app') # Path to your saved model | |
| tokenizer = BertTokenizer.from_pretrained('nik20004/absa-sentiment-app') | |
| return model, tokenizer | |
| model, tokenizer = load_model() | |
| device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') | |
| model.to(device) | |
| # Streamlit app title | |
| st.title("Aspect-Based Sentiment Analysis Web App") | |
| # Input fields for sentence and aspect | |
| sentence = st.text_area("Enter the review or sentence:") | |
| aspect = st.text_input("Enter the aspect to analyze (e.g., 'food', 'service'):") | |
| # Function to predict sentiment | |
| def predict_sentiment(sentence, aspect): | |
| if not sentence or not aspect: | |
| return "Please enter both a sentence and an aspect." | |
| # Preprocess the input | |
| inputs = tokenizer.encode_plus( | |
| aspect, | |
| sentence, | |
| add_special_tokens=True, | |
| max_length=128, | |
| padding='max_length', | |
| truncation=True, | |
| return_tensors='pt' | |
| ) | |
| input_ids = inputs['input_ids'].to(device) | |
| attention_mask = inputs['attention_mask'].to(device) | |
| # Get predictions | |
| model.eval() | |
| with torch.no_grad(): | |
| outputs = model(input_ids, attention_mask=attention_mask) | |
| logits = outputs.logits | |
| predicted_class = torch.argmax(logits, dim=1).item() | |
| # Map class index to sentiment | |
| label_map = {0: "Negative", 1: "Neutral", 2: "Positive"} | |
| return label_map[predicted_class] | |
| # Button for prediction | |
| if st.button("Analyze Sentiment"): | |
| result = predict_sentiment(sentence, aspect) | |
| st.subheader(f"Aspect: {aspect}") | |
| st.write(f"Predicted Sentiment: **{result}**") | |