Resume NER (BERT, fine-tuned)
A BERT token classifier that finds the fields of a resume: name, email, phone, location, skills, job titles, companies, degrees, colleges, graduation years and years of experience.
It is yashpwr/resume-ner-bert
(commit 3ea6ecf) fine-tuned on about 2,400 resumes. It is the parser
behind the engineering domain of
Smart Resume Analyzer,
where it runs fully offline.
A smaller distilled version (6 layers, 81 % / 90 %) is published as
biswas2200/resume-ner-distilbert-careeros.
Usage
from transformers import pipeline
ner = pipeline("token-classification", model="biswas2200/resume-ner-bert-careeros", aggregation_strategy="simple")
ner("Priya Sharma. Software Engineer at Tata Consultancy Services, Pune. Skills: Java, Spring Boot, Docker.")
Long resumes go over BERT's 512-token limit. Split the text into chunks (the app keeps line breaks and chunks on them) and run each chunk.
Labels
25 BIO labels over 12 entity types: Name, Email Address, Phone,
Location, Skills, Designation, Companies worked at, Degree,
College Name, Graduation Year, Years of Experience and UNKNOWN.
They are the same labels as the base model.
Results
Field macro F1, scored by the app's own parser on the same splits as the base model. Each cell is F1 (precision / recall).
| Field | Base model | This model |
|---|---|---|
| Name | 97 % (99 / 94) | 97 % (99 / 94) |
| Degree | 69 % (78 / 62) | 81 % (81 / 81) |
| Institution | 73 % (92 / 61) | 77 % (85 / 71) |
| Graduation year | 73 % (87 / 64) | 87 % (91 / 84) |
| Job title | 79 % (81 / 76) | 86 % (95 / 80) |
| Company | 66 % (92 / 51) | 76 % (86 / 68) |
| Macro F1, DataTurks test (110 resumes) | 76 % | 84 % |
| Macro F1, unseen LiveCareer (20 resumes) | 64 % | 90 % |
Best entity F1 on the 5 % dev split during training: 78.3 %
(train_summary.json, per entity in dev_scores.json).
Training
- Data: 2,431 resumes.
- 2,331 from the LiveCareer resume dataset (Kaggle
snehaanbhawal/resume-dataset, declared CC0), labelled withgemini-3.5-flash-liteand checked against hand labels (97 % F1 on a tuning set). - 100 from DataTurks "Resume Entities for NER" (Kaggle
dataturks/resume-entities-for-ner), with their human labels; only their skills were re-labelled with Gemini, as one span per skill.
- 2,331 from the LiveCareer resume dataset (Kaggle
- Procedure: 5 epochs of full fine-tuning in plain PyTorch on one L4 GPU (about 11 minutes); the best epoch on dev was kept.
- No resume text is published with the model.
Limitations
- Companies and locations are the weakest fields. LiveCareer replaces employers with the placeholder "Company Name", so there were few real company names to learn from. Indian-style resumes fare worst.
- Phone numbers are not learnt well; the app finds them with a rule.
- The test sets are not pristine. The DataTurks key was corrected after seeing model outputs (308 values added, 21 removed, by fixed rules), and both test sets have now scored three rounds of experiments. Nothing was tuned on them, but treat the numbers as indicative.
- English resumes only.
Intended use and licence
Research and non-commercial use: parsing resumes for students' and job-seekers' own feedback. It is not meant for automated hiring decisions.
The weights are released under Apache-2.0, like the base model. The training sources carry their own terms, and the reasons for keeping use non-commercial are:
- the DataTurks dataset has no stated licence;
- the LiveCareer resumes were collected from livecareer.com, so the CC0 declaration may not cover all rights;
- the labels come from Gemini, and Google's Service Specific Terms (§17) restrict using its output to replace a Google model.
Attribution
Fine-tuned from yashpwr/resume-ner-bert
(Apache-2.0). Trained by Amitosh Biswas for Smart Resume Analyzer.