import streamlit as st import transformers import torch from transformers import AutoTokenizer, AutoModelForSequenceClassification # Define the paths of the pre-trained models model1_path = "saisi/finetuned-Sentiment-classfication-ROBERTA-Base-model" model2_path = "saisi/finetuned-Sentiment-classfication-DISTILBERT-model" # Initialize the tokenizer and models for sentiment analysis tokenizer1 = AutoTokenizer.from_pretrained(model1_path) model1 = AutoModelForSequenceClassification.from_pretrained(model1_path) tokenizer2 = AutoTokenizer.from_pretrained(model2_path) model2 = AutoModelForSequenceClassification.from_pretrained(model2_path) # Define a function to preprocess the text data def preprocess(text): new_text = []     # Replace user mentions with '@user'     for t in text.split(" "):         t = '@user' if t.startswith('@') and len(t) > 1 else t         # Replace links with 'http'         t = 'http' if t.startswith('http') else t         new_text.append(t)     # Join the preprocessed text     return " ".join(new_text) # Define a function to perform sentiment analysis on the input text using model 1 def sentiment_analysis_model1(text):     # Preprocess the input text     text = preprocess(text)     # Tokenize the input text using the pre-trained tokenizer     encoded_input = tokenizer1(text, return_tensors='pt')         # Feed the tokenized input to the pre-trained model and obtain output     output = model1(**encoded_input)         # Obtain the prediction scores for the output     scores_ = output[0][0].detach().numpy()         # Apply softmax activation function to obtain probability distribution over the labels     scores_ = torch.nn.functional.softmax(torch.from_numpy(scores_), dim=0).numpy()         # Format the output dictionary with the predicted scores     labels = ['Negative', 'Positive']     scores = {l:float(s) for (l,s) in zip(labels, scores_) }         # Return the scores     return scores # Define a function to perform sentiment analysis on the input text using model 2 def sentiment_analysis_model2(text):     # Preprocess the input text     text = preprocess(text)     # Tokenize the input text using the pre-trained tokenizer     encoded_input = tokenizer2(text, return_tensors='pt')         # Feed the tokenized input to the pre-trained model and obtain output     output = model2(**encoded_input)         # Obtain the prediction scores for the output     scores_ = output[0][0].detach().numpy()         # Apply softmax activation function to obtain probability distribution over the labels     scores_ = torch.nn.functional.softmax(torch.from_numpy(scores_), dim=0).numpy()         # Format the output dictionary with the predicted scores     labels = ['Negative', 'Neutral', 'Positive']     scores = {l:float(s) for (l,s) in zip(labels, scores_) }         # Return the scores     return scores # Define the Streamlit app def app():     # Define the app title     st.title("Sentiment Analysis")     # Define the input field     text_input = st.text_input("Enter text:")     # Define the model selection dropdown     model_selection = st.selectbox("Select a model:", ["Model 1", "Model 2"])     # Perform sentiment analysis when the submit button is clicked     if st.button("Submit"):         if text_input