major-matcher / app.py
waidhoferj's picture
changed device to cpu
5fb1a1e
import gradio as gr
from classifiers.bert import BertClassifier
import os
import numpy as np
from functools import cache
from preprocessing.helper import get_recommendations
CONFIG_FILE = os.path.join("weights", "bert_classifier_deployment_weights")
N_SUGGESTIONS = 3
DEVICE = "cpu"
@cache
def get_model(config_path: str) -> BertClassifier:
bert_classifier = BertClassifier(device=DEVICE)
bert_classifier.load_weights(config_path)
return bert_classifier
def predict(interests: str) -> list[str]:
bert_classifier = get_model(CONFIG_FILE)
probs = bert_classifier.predict_proba(interests)
labels = np.array(bert_classifier.labels)
results_mask = (-probs).argsort(-1)[:,:N_SUGGESTIONS]
suggested_majors = labels[results_mask][0].tolist()
confidences = probs[0][results_mask[0]]
confidences /= confidences.sum()
confidences = confidences.tolist()
return dict(zip(suggested_majors, confidences))
def demo():
title = "Major Matcher"
description = "Describe your interests and the model will suggest a compatible college major."
example_interests = [
"I really enjoy spending time with animals.",
"I like playing music and dancing.",
"A good book makes me happy."
]
app = gr.Interface(
title=title,
description=description,
inputs=gr.TextArea(
label="Describe your interests",
placeholder="I really enjoy..."
),
fn=predict,
outputs=gr.Label(label="Suggested Majors"),
examples=example_interests
)
return app
if __name__ == "__main__":
demo().launch()