Inspiration

We are applying to internships right now, but we feel like we are getting rejected from positions even though we meet all the qualifications. For example, a key issue is that I [Hannah] have C++ and Java on my resume, but job descriptions often mention 'Object-Oriented Programming' (OOP). I assumed employers would recognize that C++ implies OOP, but I later learned that the first round of applications is screened based on specific keywords. So, we wanted to create a keyword matcher to see how likely we are to make it past that first round and find ways to boost our chances.

What it does

Our app helps users match their resumes to job descriptions by comparing the semantic similarity between the two. When applying for jobs or internships, HR personnel often focus on specific keywords to assess candidates, as they may not fully understand the technical aspects of the role. This leads to many qualified applicants being overlooked due to missing keywords that reflect skills they already possess. So, to increase the chance to land a job our app uses a similarity model to compare the semantic meaning of keywords in your resume with those in the job description, giving you a clear picture of how well you 'match' the role.

  1. The user enters a job description and resume.
  2. The job and resume are split into sentences.
  3. The app calculates the similarity between each job sentence and the resume sentences.
  4. It computes an overall similarity score and displays it.
  5. A detailed report is generated, showing the best matching sentences between the job description and resume.

How we built it

The program builds a Streamlit app. Streamlit is a python framework that simplifies the front-end and back-end process by combining the two.

Overall process of the Program

  • The app breaks both the job description and your resume into sentences then uses a model to understand the meaning of the sentences (semantics).
  • It compares semantics to see how well the skills and experiences in your resume align with what the job is asking for. Even if the wording is different, the model focuses on the meaning.
  • Semantic similarity is stored as vectors in a matrix. The Match score is calculated from that matrix.

front-end: The front end is integrated into the python program (integrated with the back-end) using Streamlit. Streamlit has built-in page configuration functions, but we also used the function st.markdown so that we could use typical html and css to create the front-end.

back-end:

  1. Libraries and Imports: Streamlit: Used to build the web app and handle user inputs. base64: Used to encode images in base64 format to be displayed in the app. Sentence Transformers: This includes models for embedding sentences into vector representations to capture their semantic meaning. (From huggingface) Summarizer: Splits the job description and resume into meaningful sentences for better analysis. Cosine Similarity: A function from Scikit-Learn that calculates how similar two vectorized sentences are. Pandas and Numpy: Provide data manipulation and matrix operations for calculating similarity.
  2. Sentence Extraction: The summarizer model splits job descriptions and resumes into semantic sentences. Then, a pre-trained sentence embedding model from hugging face converts sentences into numerical vector representations. This model ignores the structure and only focuses on the semantic meaning.
  3. Similarity Calculation: The semantic similarity is calculated between each sentence in the job description and each sentence in the resume. Then turned into a vector Cosine similarity from scikit learn is used to compare each pair of sentence vectors and compute similarity. The similarities are stored in a matrix and an overall match score is computed by averaging the highest similarity scores for each sentence in the job description.

Challenges we ran into

We changed ideas: Our original idea was to create a pet matcher. Since the pound doesn’t create profiles for their animals and they have a high put-down rate, we thought we could create an app that matched a person’s wants to a pet profile. However, the hugging face model I chose to use to compare text does not distinguish between similar semantic words like cat and dog. Then, we found that it works for general keywords.

Program bugs:

  • We did not know how to add a button, so currently it works by clicking on the screen to calculate score.
  • You also need to refresh the screen every time you want to enter new text
  • It only works effectively with longer text

Accomplishments that we're proud of

  • The software mostly works!
  • We successfully deployed a website with Github without help.
  • Getting the website to look cute: So many color combinations clashed with our dog images.

What we learned

  • Importing/using python packages.
  • Streamlit Python Framework: We really wanted to use certain python libraries but they dont integrate well with HTMl and CSS, so learning streamlit allowed us to use all three
  • Markdown

During the workshops:

  • Basics of React and Figma. (I think Figma especially is a really convenient tool to use in future hackathons. Had I known about Figma beforehand, I might’ve used that rather than Canva because it imitates an app well. Moreover, it is just as easy to design as Canva.)
  • Basics of HTML and CSS, which surprisingly worked together even though they are considered 2 different coding languages. Using the demo we had at the workshop, I can create a basic website interface.

What's next for Fur Real Match

Expand into an app that allows users to input a profile into a public network and allow employers to automatically see match rates for each profile. Vise versa for those looking for jobs. This software would make it easier for both applicants and employers to optimize compatibility. In addition, a communication system that allows for online conversations could be developed in addition to the profile system, fostering even more connections between applicants and employers. An online face-to-face facetime system could also be implemented to streamline the interviewing process.

Built With

Share this project:

Updates