Spaces:
Build error
Build error
from sentence_transformers import SentenceTransformer | |
import pickle | |
import numpy as np | |
import torch | |
import gradio as gr | |
model = SentenceTransformer('paraphrase-MiniLM-L6-v2') | |
with open("dep_course_title_to_content_embed.pickle", "rb") as handle: | |
loaded_map = pickle.load(handle) | |
dep_name_course_name = list(loaded_map.keys()) | |
deps = list(set([x for (x,y) in dep_name_course_name])) | |
dep_to_course_name = {} | |
dep_to_course_embedding = {} | |
for dep in deps: | |
dep_to_course_name[dep] = [] | |
dep_to_course_embedding[dep] = [] | |
for (dep_name, course_name), embedding in loaded_map.items(): | |
# print(embedding.shape) | |
dep_to_course_name[dep_name].append(course_name) | |
dep_to_course_embedding[dep_name].append(np.array(embedding, dtype = np.float32)) | |
cos = torch.nn.CosineSimilarity(dim=1, eps=1e-6) | |
def give_best_match(query, Department): | |
if not Department: | |
Department = deps | |
course_titles = [] | |
course_content_embeddings = [] | |
for dep in Department: | |
course_titles += dep_to_course_name[dep] | |
course_content_embeddings += dep_to_course_embedding[dep] | |
course_content_embeddings = np.stack(course_content_embeddings) | |
embed = model.encode(query) | |
result = cos(torch.from_numpy(course_content_embeddings),torch.from_numpy(embed)) | |
indices = reversed(np.argsort(result)) | |
predictions = {course_titles[i] : float(result[i]) for i in indices} | |
return predictions | |
demo = gr.Interface(fn = give_best_match, | |
inputs=[ | |
gr.Textbox(label="Describe the course",lines = 5, placeholder = "Type anything related to course/s\n\nTitle, Topics/Sub Topics, Refernce books, Questions asked in exams or some random fun stuff."), | |
gr.CheckboxGroup(deps), | |
], | |
outputs=gr.Label(label = "Most Relevant Courses", num_top_classes=5) | |
) | |
demo.launch() |