resume-job-classifier

CPU-friendly 3-class text classifier that routes documents into resume, job_post, or other.

Use it to pre-filter text before resume parsers, job extractors, or downstream LLM pipelines.

Labels

Label Description
resume CVs, experience blocks, skills lists
job_post Job descriptions, role requirements, hiring posts
other Everything else (bios, emails, blog posts, product copy, etc.)

Model details

Base model microsoft/MiniLM-L12-H384-uncased
Training Full fine-tune on ~1,389 labeled examples
Max length 512 tokens
Version v1.0.0

Evaluation (test split, n=140)

Metric Value
Accuracy 95.0%
Macro-F1 0.95
Class Precision Recall F1
resume 1.00 0.93 0.96
job_post 0.88 0.95 0.92
other 0.94 1.00 0.97

Known failure modes: very short text, and resume-style phrasing like "seeking a position" can be confused with job posts.

Usage โ€” Transformers

from transformers import pipeline

clf = pipeline(
    "text-classification",
    model="smr123/resume-job-classifier",
    top_k=None,
)

result = clf("We are hiring a Senior Software Engineer with Python experience.")
print(result)
# [{'label': 'job_post', 'score': 0.59}, ...]

Usage โ€” ONNX INT8 (CPU)

Primary deployment artifact: onnx/model_int8.onnx (~34 MB).

import numpy as np
from transformers import AutoTokenizer
from optimum.onnxruntime import ORTModelForSequenceClassification

model = ORTModelForSequenceClassification.from_pretrained(
    "smr123/resume-job-classifier",
    subfolder="onnx",
    file_name="model_int8.onnx",
)
tokenizer = AutoTokenizer.from_pretrained("smr123/resume-job-classifier")

text = "Senior Engineer at Acme Corp. Built APIs with Python and Go."
inputs = tokenizer(
    text,
    return_tensors="pt",
    truncation=True,
    padding="max_length",
    max_length=512,
)
logits = model(**inputs).logits[0].numpy()
probs = np.exp(logits - logits.max())
probs /= probs.sum()
label = model.config.id2label[str(int(probs.argmax()))]
print(label, float(probs.max()))

Intended use

  • Document routing in hiring/recruiting pipelines
  • Pre-filtering before resume or job parsing
  • Research and fine-tuning on custom labeled data

Limitations

  • Not a hiring decision tool
  • Not PII extraction or validation
  • Not legal or compliance screening
  • Performance drops on very short or ambiguous text

Artifacts in this repo

config.json
model.safetensors          # PyTorch weights (fine-tune / reproduce)
tokenizer.json
onnx/model.onnx            # float32 export
onnx/model_int8.onnx       # INT8 โ€” recommended for CPU inference

Source code

Training, eval, and export code: https://github.com/semirturgay/resume-job-classifier

License

Apache-2.0

Downloads last month
70
Safetensors
Model size
33.4M params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support

Model tree for smr123/resume-job-classifier

Quantized
(10)
this model