The model (all-MiniLM-L6-v2, about 90 MB) downloads on first use and is cached after that.
–
Overall score (0.5 semantic + 0.2 keyword + 0.3 skills)
Matched skills
Asked for in the job and found in the CV
Missing skills
Asked for in the job, not found in the CV
Gendered words in the job ad
Whole words only: "he", "his", "man", "she", "her", "woman"
Shared keywords
Words both texts use, strongest first, highlighted below. Filler words such as "and" are hidden here but still count toward the keyword score.
CV
Job description
How it works and what it can't do
- Both texts are lower-cased and stripped of punctuation, then embedded with
all-MiniLM-L6-v2(first 256 tokens, mean pooled). Semantic similarity is the cosine of the two embeddings. - Keyword overlap is a TF-IDF cosine fitted on just these two texts, computed the way scikit-learn's
TfidfVectorizerdoes by default. - Skills come from a fixed list of 16 (Python, Docker, SQL, PyTorch, ...). A skill counts as present when the text names it, or when one of its lines or sentences is within cosine 0.4 of the skill's embedding (so "trained CNNs in PyTorch" can count as deep learning). Skills outside the list are not seen at all.
- The gendered-word check only looks for six pronouns and nouns. It does not detect coded language ("rockstar", "aggressive") and is a prompt for a human to look, not a verdict.
- The scores rank how close two texts are. They say nothing about whether a person can do the job; do not use them to reject candidates automatically.