Views
No views yet
all-mpnet-base-v2 scoring resume-to-job-description fit on a 0-1 scale.
Trained with a combined CoSENT + CosineSimilarity objective on 815 curated pairs from
255 real job postings with 3x augmentation, then calibrated with Platt
scaling fitted on an external calibration split.| Metric | Value | 95% CI |
|---|---|---|
| Spearman (production seed 43) | 0.8163 | [0.7396, 0.8638] |
| MAE | 0.1270 | [0.108, 0.1462] |
| Spearman across 3 seeds | 0.8273 +/- 0.0236 | |
| MAE across 3 seeds | 0.1194 +/- 0.0113 | |
| Base model before fine-tuning | 0.6246 / 0.2138 | |
| Precision@1 over 53 unseen postings | 84.9% | vs 25% random |
1from sentence_transformers import SentenceTransformer
2import numpy as np, pickle
3
4model = SentenceTransformer("dlepighe1/resume-jd-matcher-mpnet")
5emb = model.encode([resume_text, jd_text])
6raw = float(np.dot(emb[0], emb[1]) / (np.linalg.norm(emb[0])*np.linalg.norm(emb[1])))
7
8# calibrated 0-1 score
9platt = pickle.load(open("platt_calibrator.pkl", "rb"))
10score = platt([raw])[0]smart_truncate_jd (see the research repo, src/text_utils.py) to the job
description first — the model was trained on preprocessed JDs capped at
350 words, and skipping it degrades scores silently.