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()) dep_name = [x for (x,y) in dep_name_course_name] course_titles = [y for (x,y) in dep_name_course_name] course_content_embeddings = np.array(list(loaded_map.values()), dtype=np.float32) cos = torch.nn.CosineSimilarity(dim=1, eps=1e-6) def give_best_match(query): 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.") ,outputs=gr.Label(label = "Most Relevant Courses", num_top_classes=5)) demo.launch()