import streamlit as st import torch from transformers import AutoTokenizer, AutoModel from sentence_transformers import util class SentenceSimiliarity(): def __init__(self, model_name, sentence1, sentence2): self.sentence1 = sentence1 self.sentence2 = sentence2 self.model_name = model_name self.model = AutoModel.from_pretrained(self.model_name) self.tokenizer = AutoTokenizer.from_pretrained(self.model_name) def tokenize(self): tokenized1 = self.tokenizer( self.sentence1, return_tensors='pt', padding=True, truncation=True ) tokenized2 = self.tokenizer( self.sentence2, return_tensors='pt', padding=True, truncation=True ) return tokenized1, tokenized2 def get_embeddings(self): tokenized1, tokenized2 = self.tokenize() with torch.no_grad(): embeddings1 = self.model(**tokenized1).last_hidden_state.mean(dim=1) embeddings2 = self.model(**tokenized2).last_hidden_state.mean(dim=1) return embeddings1, embeddings2 def get_similarity_scores(self): embeddings1, embeddings2 = self.get_embeddings() scores = util.cos_sim(embeddings1, embeddings2) return scores def results(self): scores = self.get_similarity_scores() statement = f"The sentence has {scores.item() * 100:.2f}% similarity" return statement class UI(): def __init__(self): st.title("Sentence Similiarity Checker") st.caption("You can use this for checking similarity between resume and job description") def get(self): self.sentence1 = st.text_area( label="Sentence 1", help="This is a parent text the next text will be compared with this text" ) self.sentence2 = st.text_area( label="Sentence 2", help="This is a child text" ) self.button = st.button( label="Check", help='Check Sentence Similarity' ) def model_selection(self): available_models = [ "distilbert-base-uncased", "bert-base-uncased", "sentence-transformers/all-MiniLM-L6-v2", # "sentence-transformers/all-mpnet-base-v2", # "intfloat/multilingual-e5-base", # "togethercomputer/m2-bert-80M-32k-retrieval", # "togethercomputer/m2-bert-80M-8k-retrieval", # "togethercomputer/m2-bert-80M-2k-retrieval", ] model_name = st.sidebar.selectbox( label="Select Your Models", options=available_models, ) return model_name def result(self): self.get() model_name = self.model_selection() ss = SentenceSimiliarity(model_name, self.sentence1, self.sentence2) if self.button: st.text(ss.results()) # print(ss.results()) ui = UI() ui.result()