Fine-tuned version of
jjzha/jobbert-base-cased
(a BERT model continually pretrained on job postings) for 3-class resume-job description fit
classification, built as the main model for the CareerLens capstone project (ULAB).
Fine-tuned on
cnamuangtoun/resume-job-description-fit
(8,000 resume-JD pairs), using a custom resume-level group-stratified split to prevent the same
candidate's resume from leaking across train/validation/test (the original dataset's official
split had ~99.8% resume overlap between train and test).
Trained for 8 epochs in a single continuous run. A 20-epoch extension was also tried but showed
overfitting after epoch 12 with no statistically significant improvement, so the 8-epoch
checkpoint (epoch 7) was kept as final.
Adversarial testing found this model alone has weak sensitivity to the job description —
it can rate an unrelated resume as "Good Fit". In the CareerLens pipeline, predictions from
this model are combined with an ESCO-based skill-overlap check (see careerlens_pipeline.py,
function predict_fit_safe) before being shown to users. Using this model's raw output
without that check is not recommended.
1from transformers import AutoTokenizer, AutoModelForSequenceClassification
2tokenizer = AutoTokenizer.from_pretrained("parvez30/careerlens-fit-classifier")
3model = AutoModelForSequenceClassification.from_pretrained("parvez30/careerlens-fit-classifier")
4
5inputs = tokenizer(resume_text, job_description_text, truncation=True, max_length=512, return_tensors="pt")
6outputs = model(**inputs)
Trained on a relatively small, English-only dataset skewed toward IT/Software job postings;
performance on other industries or non-English resumes has not been validated. See the
"safety net" note above regarding JD-sensitivity.