onet-match: free text to O*NET occupations

This is the pretrained bundle for onet-match: occupation classification and job-title normalization against the ONET-SOC taxonomy. A fine-tuned retrieve-and-rerank pipeline maps job titles, resume bullets, job postings, project descriptions, interest statements and skill lists to the 923 ONET 31.0 occupations. It ranks the right occupation first 51% of the time on held-out O*NET text (TF-IDF: 21%) and 65% on messy, human-style inputs (TF-IDF: 17%). Each match comes with calibrated confidence, key tasks, skills, knowledge and RIASEC interests.

pip install "onet-match[matching]"
from onet_match import match          # downloads this bundle on first use
r = match("Must know survival analysis, R, SAS and clinical trial data", top_k=5)
print(r.matches[0].soc, r.matches[0].title, r.matches[0].confidence)
# 15-2041.01 Biostatisticians 0.6037

Contents

path what
biencoder/ bge-base-en-v1.5, fine-tuned with contrastive loss and hard negatives on O*NET title, task and activity pairs plus LLM-written informal text
reranker/ ms-marco-MiniLM-L6-v2 cross-encoder, fine-tuned on the same data. It rescores the bi-encoder's top 20
doc_embeddings.npy precomputed occupation embeddings
catalog/ the 923 O*NET occupations: titles, descriptions, tasks, skills, knowledge, abilities, interests and detailed work activities
bundle.json blend weight (0.3 reranker), calibration temperature, provenance

The bi-encoder and reranker scores are z-scored per query and blended. Then a temperature-scaled softmax over the top 20 gives the confidence.

Evaluation

The splits are held out; validation was used only for model selection and calibration.

test set n top-1 top-5 MRR@20 ECE
O*NET text (titles, tasks, activities, descriptions) 6,792 51.1% 79.1% 0.633 0.037
informal text written by a different LLM than the training text 4,703 65.4% 92.9% 0.774 0.102

A TF-IDF baseline gets 20.5% and 17.4% top-1 on the same sets. Median latency is 46.7 ms per query on an Apple laptop GPU. Per-input-type results, ablations and error analysis are in RESULTS.md.

Limitations

  • English only.
  • Weakest on raw task statements (about 38% top-1) and seniority-coded titles such as "Sr. Backend Eng II".
  • The informal-text training and test sets were LLM-written. There is no human-written test set yet.
  • Single training seed, so differences under about 1 point are noise.
  • It suggests occupations; it is not a hiring or eligibility decision tool.

License and attribution

The model weights and code are MIT-licensed. The base models are bge-base-en-v1.5 (MIT) and ms-marco-MiniLM-L6-v2 (Apache-2.0).

This product includes information from the ONET 31.0 Database by the U.S. Department of Labor, Employment and Training Administration (USDOL/ETA), used under the CC BY 4.0 license. ONET® is a trademark of USDOL/ETA. USDOL/ETA has not approved, endorsed or tested this product.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for BenjaminChan12/onet-match

Finetuned
(505)
this model

Space using BenjaminChan12/onet-match 1