Downloads · 30 days
49
40% of all-time downloads
Kus-hal/resume-screener-lora
resume-screener-lora is a text generation model from Kus-hal. Use it when you need the model to write or continue text. It is set up for peft. The card lists the license as mit.
A LoRA adapter for Qwen2.5-0.5B-Instruct that returns structured JSON verdicts for resume screening by default, without prompt engineering.
Downloads · 30 days
49
40% of all-time downloads
All-time downloads
122
Public
Repo size
20.1 MB
Likes
0
Public
Click a slice to open those files.
.json14.2 MB · 58%
From the Hugging Face model README
A LoRA adapter for Qwen2.5-0.5B-Instruct that returns structured JSON verdicts for resume screening by default, without prompt engineering.
Code, training notebook, evaluation and hosted demo: github.com/ayush-s-tomar/resume-screener-lora
For a prompt such as Screen this resume for a Backend Engineer position and return a structured verdict. followed by the resume, the model returns:
{
"role": "Backend Engineer",
"ats_score": 56,
"verdict": "moderate_match",
"matched_skills": ["Python", "PostgreSQL", "Docker", "Kubernetes"],
"missing_skills": ["Java", "REST APIs", "Redis"],
"years_experience": 4
}
Verdicts follow the training data: strong_match (ats_score 75-100), moderate_match (50-74) and weak_match (8-48).
import json
import re
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base_id = "Qwen/Qwen2.5-0.5B-Instruct"
tokenizer = AutoTokenizer.from_pretrained(base_id)
base = AutoModelForCausalLM.from_pretrained(base_id)
model = PeftModel.from_pretrained(base, "Kus-hal/resume-screener-lora")
prompt = (
"Screen this resume for a Backend Engineer position and return a structured verdict.\n\n"
"Resume: 4 years of backend experience. Skilled in Python, PostgreSQL, Docker, Kubernetes."
)
inputs = tokenizer.apply_chat_template(
[{"role": "user", "content": prompt}],
tokenize=True, add_generation_prompt=True, return_tensors="pt", return_dict=True,
)
output = model.generate(**inputs, max_new_tokens=200, do_sample=False)
text = tokenizer.decode(output[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(json.loads(re.search(r"\{.*\}", text, re.DOTALL).group(0)))
data/generate_dataset.py in the GitHub repo| Metric | Zero-shot base | Zero-shot + score ranges in prompt | This adapter |
|---|---|---|---|
| Valid JSON rate | 100% | 100% | 100% |
| Verdict accuracy | 17.7% | 18.8% | 88.5% |
| Mean absolute score error | 32.0 | 35.1 | 5.4 |
strong_match there).