Spaces:
Sleeping
Sleeping
import gradio as gr | |
import torch | |
from transformers import AutoTokenizer, AutoModel | |
tokenizer = AutoTokenizer.from_pretrained('distilbert/distilbert-base-uncased') | |
model = AutoModel.from_pretrained('distilbert/distilbert-base-uncased') | |
options = [ | |
"Visual", "Auditory", "Kinesthetic", | |
"Recorded lectures", "Instant messaging (e.g., chat)", "Video calls", | |
"Clarify concepts", "Improve grades", "Prepare for exams", "Career guidance", | |
"1-2 hours", "3-5 hours", "6+ hours", | |
"0 years", " 2 years", "5 years", | |
"AIML", "Web dev", "App dev", | |
"Slow and steady", "Moderate", "Fast-paced", | |
"Explaining with examples", "Interactive discussions", "Problem-solving exercises", | |
"Yes", "No", | |
"Trouble with specific concepts", "Time management", "Test anxiety", | |
"Experienced teacher", "Industry experience", "Should answer question" | |
] | |
def calculate_similarity(student_inputs, mentor_inputs): | |
""" | |
Check for values in options that are not in student_inputs. | |
Then append a 'not' to such options and place them at same index as in student_inputs. | |
Also we need to take care of value shifts after adding 'not' to some options, so use a new list | |
""" | |
# student = [] | |
# mentor = [] | |
# for i in range(len(options)): | |
# if options[i] in student_inputs: | |
# student.append(options[i]) | |
# else: | |
# student.append(f"NOT {options[i]}") | |
# for i in range(len(options)): | |
# if options[i] in mentor_inputs: | |
# mentor.append(options[i]) | |
# else: | |
# mentor.append(f"NOT {options[i]}") | |
# print(f"Student inputs: {student}") | |
# print(f"Mentor inputs: {mentor}") | |
student_tokens = tokenizer(student_inputs, return_tensors="pt", padding=True) | |
mentor_tokens = tokenizer(mentor_inputs, return_tensors="pt", padding=True) | |
with torch.no_grad(): | |
student_output = model(**student_tokens).last_hidden_state.mean(dim=1) | |
mentor_output = model(**mentor_tokens).last_hidden_state.mean(dim=1) | |
similarity = torch.nn.functional.cosine_similarity(student_output, mentor_output) | |
print(similarity) | |
similarity = similarity.mean().item() | |
print(similarity) | |
normalized_similarity = (similarity - 0.9)/0.1 * 100 | |
print(normalized_similarity) | |
return round(normalized_similarity, 2) | |
with gr.Blocks() as demo: | |
with gr.Column(): | |
with gr.Row(): | |
gr.Markdown("Student Options") | |
with gr.Column(): | |
student_inputs = gr.CheckboxGroup(choices=options, label="Student Options") | |
mentor_inputs = gr.CheckboxGroup(choices=options, label="Mentor Options") | |
with gr.Row(): | |
btn = gr.Button("Calculate Similarity") | |
with gr.Row(): | |
output = gr.Number() | |
btn.click( | |
fn=calculate_similarity, | |
inputs=[student_inputs, mentor_inputs], | |
outputs=output | |
) | |
demo.launch(debug=True) | |