|
import numpy as np |
|
import gradio as gr |
|
import joblib |
|
from pytorch_tabnet.tab_model import TabNetClassifier |
|
|
|
|
|
model = TabNetClassifier() |
|
model.load_model('tabnet_model.zip') |
|
scaler = joblib.load('scaler.save') |
|
encoder = joblib.load('encoder.save') |
|
|
|
|
|
trait_prefixes = { |
|
'Extraversion': 'EXT', |
|
'Emotional Stability': 'EST', |
|
'Agreeableness': 'AGR', |
|
'Conscientiousness': 'CSN', |
|
'Openness': 'OPN' |
|
} |
|
|
|
|
|
questions = [ |
|
"I am the life of the party.", "I feel comfortable around people.", "I often feel blue.", "I am easily disturbed.", |
|
"I enjoy trying new things.", "I am talkative.", "I don't mind being the center of attention.", "I often get upset.", |
|
"I am interested in abstract ideas.", "I am full of energy.", "I would rather sit at home than go out.", |
|
"I don't like to draw attention to myself.", "I am sometimes easily angered.", "I have frequent mood swings.", |
|
"I like to travel to new places.", "I like to meet new people.", "I enjoy having a wide variety of friends.", |
|
"I am good at handling stress.", "I often feel like I’m not in control of my emotions.", "I prefer variety to routine.", |
|
"I am a very anxious person.", "I prefer to stick to one activity at a time.", "I enjoy being active in social settings.", |
|
"I don’t like to take risks.", "I get along with most people.", "I get bored easily.", "I tend to be impulsive.", |
|
"I like being organized.", "I feel uncomfortable around strangers.", "I avoid conflict with others.", "I have a lot of energy.", |
|
"I find it difficult to express my emotions.", "I often feel lonely.", "I like to keep my thoughts and feelings to myself.", |
|
"I find it difficult to relax.", "I am always prepared.", "I sometimes feel down.", "I find it difficult to focus on one task.", |
|
"I enjoy the company of others.", "I like to talk about my feelings.", "I can’t stand being interrupted.", |
|
"I often forget to do things.", "I am good at understanding other people’s feelings.", "I enjoy taking on challenges.", |
|
"I often feel overwhelmed.", "I like to take my time making decisions.", "I enjoy being in charge.", "I am easily distracted.", |
|
"I get along well with others.", "I enjoy being the center of attention." |
|
] |
|
|
|
|
|
inputs = [gr.Slider(1.0, 5.0, value=3.0, label=q) for q in questions] |
|
output = gr.Textbox(label="Prediction") |
|
|
|
|
|
def predict_personality(*inputs): |
|
input_array = np.array(inputs).reshape(1, -1) |
|
scaled_input = scaler.transform(input_array) |
|
pred = model.predict(scaled_input) |
|
personality = encoder.inverse_transform(pred)[0] |
|
return f"Predicted Personality: **{personality}**" |
|
|
|
|
|
demo = gr.Interface( |
|
fn=predict_personality, |
|
inputs=inputs, |
|
outputs=output, |
|
title="Personality Type Classifier (Introvert vs. Extrovert)", |
|
description="Provide scores (1–5) for 50 questions from the IPIP-FFM questionnaire. The model will predict whether the person is an Introvert or an Extrovert." |
|
) |
|
|
|
demo.launch() |
|
|