Instructions to use BenjaminChan12/onet-match with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use BenjaminChan12/onet-match with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("BenjaminChan12/onet-match") sentences = [ "That is a happy person", "That is a happy dog", "That is a very happy person", "Today is a sunny day" ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [4, 4] - Notebooks
- Google Colab
- Kaggle
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.
Model tree for BenjaminChan12/onet-match
Base model
BAAI/bge-base-en-v1.5