sandeeppanem/resume-json-extraction-5k
Viewer โข Updated โข 4.88k โข 167
How to use sandeeppanem/qwen3-0.6b-resume-json with PEFT:
from peft import PeftModel
from transformers import AutoModelForCausalLM
base_model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen3-0.6B")
model = PeftModel.from_pretrained(base_model, "sandeeppanem/qwen3-0.6b-resume-json")A fine-tuned Qwen3-0.6B model for resume parsing and structured JSON extraction using LoRA (Low-Rank Adaptation).
โ ๏ธ IMPORTANT: This repository contains ONLY the LoRA adapter weights.
You must load the base modelQwen/Qwen3-0.6Bseparately.
See the Usage section below for complete loading instructions.
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
import torch
# Load base model
base_model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
torch_dtype=torch.float16,
device_map="auto",
trust_remote_code=True
)
# Load LoRA adapter
model = PeftModel.from_pretrained(base_model, "sandeeppanem/qwen3-0.6b-resume-json")
model.eval() # Set to evaluation mode
tokenizer = AutoTokenizer.from_pretrained("sandeeppanem/qwen3-0.6b-resume-json", trust_remote_code=True)
# Set padding token if not present
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
tokenizer.pad_token_id = tokenizer.eos_token_id
import torch
import json
# Prepare input
resume_text = """Your resume text here..."""
messages = [
{
"role": "system",
"content": "You are an expert resume parser. Extract structured information from resumes and return ONLY valid JSON. Do not include explanations or extra text."
},
{
"role": "user",
"content": f"Resume:\n{resume_text}"
}
]
# Apply chat template
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True,
enable_thinking=False
)
# Tokenize and generate
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=512,
do_sample=False, # IMPORTANT: Use deterministic generation for JSON
pad_token_id=tokenizer.eos_token_id
)
# Extract only the assistant's response (after the input prompt)
assistant_response = tokenizer.decode(
outputs[0][inputs["input_ids"].shape[-1]:],
skip_special_tokens=True
).strip()
# Parse JSON
try:
parsed_json = json.loads(assistant_response)
print("โ Valid JSON")
print(json.dumps(parsed_json, indent=2))
except json.JSONDecodeError as e:
print(f"โ ๏ธ Invalid JSON: {e}")
print("Raw response:", assistant_response)
This model was fine-tuned on 4,879 resume examples and is optimized for:
If you use this model, please cite:
@misc{qwen3-resume-json,
title={Qwen3-0.6B Resume JSON Extraction Model},
author={Sandeep Panem},
year={2026},
publisher={Hugging Face},
howpublished={\url{https://huggingface.co/sandeeppanem/qwen3-0.6b-resume-json}}
}
This model is licensed under Apache 2.0, same as the base Qwen3-0.6B model.