few-shot-demo / validation.py
spdin
add csv file
f0ad92c
import os
import pickle
import pandas as pd
import streamlit as st
import model
from utils import check_columns
# Function to validate the trained model with a new uploaded CSV file
def main():
st.title("Model Validation")
# Display the session ID
# st.write(f"Session ID: {st.session_state.key}")
session_id = st.session_state.key
if not os.path.isdir(f"models/{session_id}"):
st.write("Model is not available")
st.stop()
model_options = [model_name for model_name in os.listdir(f"models/{session_id}")]
models = {
model_name: os.path.abspath(os.path.join(f"models/{session_id}", model_name))
for model_name in model_options
}
model_name = st.selectbox("Select a model", options=model_options)
# Create file uploader for validation CSV file
validation_file = st.file_uploader(
"Choose a CSV file to validate the model", type="csv"
)
# Check if validation file was uploaded
if validation_file is not None:
# Read CSV file into pandas DataFrame
validation_df = pd.read_csv(validation_file)
# Check if DataFrame has expected columns
if check_columns(validation_df):
# Display DataFrame as a table
st.write(validation_df)
# Create pipeline for text classification using the trained model
classifier = model.create_classifier(models[model_name])
with open(f"{models[model_name]}/label.pkl", "rb") as f:
label_map = pickle.load(f)
results = classifier(validation_df["text"].tolist())
# Predict labels for validation DataFrame
validation_df["predicted_label"] = [
label_map[result.item()] for result in results
]
# Display validation DataFrame with predicted labels
st.write("Validation results:")
st.write(validation_df)
else:
st.error("Validation file must have 'text' and 'label' columns.")