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) | |