Views
No views yet
Fine-tuned DeBERTa-v3-base for the JobLink AI-powered job matching platform. Predicts a continuous match score[0.0 – 1.0]between a job description and a candidate CV/resume. Designed for the Ethiopian graduate job market.
microsoft/deberta-v3-base (86M parameters)JOB: <job description> [SEP] CANDIDATE: <candidate CV>| Parameter | Value |
|---|---|
| Training date | 2026-04-28 |
| Base model | microsoft/deberta-v3-base |
| Epochs | 8 |
| Effective batch size | 32 (batch=4 × accum=8) |
| Learning rate | 8e-06 |
| LR scheduler | Cosine with 3 hard restart(s) |
| Warmup steps | 500 |
| Weight decay | 0.05 |
| Max token length | 512 |
| Dataset size | 16,291 balanced examples |
| Precision | float32 (TF32 disabled for stability) |
| GPU | NVIDIA T4 (Google Colab) |
| Metric | Value | Target | Status |
|---|---|---|---|
| RMSE | 0.1350 | lower is better | ✅ |
| MAE | 0.0741 | lower is better | ✅ |
| R² | 0.8305 | ≥ 0.80 | ✅ |
| F1 Score | 0.9293 | ≥ 0.85 | ✅ |
| Precision | 0.9248 | ≥ 0.80 | ✅ |
| Recall | 0.9339 | ≥ 0.90 | ✅ |
1from transformers import AutoTokenizer, AutoModelForSequenceClassification
2import torch
3
4MODEL_ID = "abnetsisaynew/joblink-match-scorer"
5
6tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
7model = AutoModelForSequenceClassification.from_pretrained(
8 MODEL_ID, num_labels=1, problem_type="regression"
9)
10model.eval().float()
11
12def match_score(job_text: str, candidate_text: str) -> float:
13 sep = tokenizer.sep_token or "[SEP]"
14 text = f"JOB: {job_text} {sep} CANDIDATE: {candidate_text}"
15 tokens = tokenizer(
16 text, truncation=True, padding="max_length",
17 max_length=256, return_tensors="pt"
18 )
19 with torch.no_grad():
20 score = model(**tokens).logits.squeeze().item()
21 return round(max(0.0, min(1.0, score)), 4)
22
23# Example
24score = match_score(
25 job_text="Software Engineer: Python, Django, REST APIs, 3+ years",
26 candidate_text="BSc Computer Science, 4 years Django/FastAPI, Docker, AWS",
27)
28print(f"Match score: {score:.2%}") # e.g. "Match score: 87.34%"1from transformers import pipeline
2
3pipe = pipeline(
4 "text-classification",
5 model="abnetsisaynew/joblink-match-scorer",
6 function_to_apply="none",
7)
8result = pipe("JOB: Python Engineer [SEP] CANDIDATE: 3 years Python")
9print(result[0]["score"]) # 0.0 – 1.0Space UI → https://huggingface.co/spaces/abnetsisaynew/joblink-match-api
API URL → https://abnetsisaynew-joblink-match-api.hf.space/api/predict1curl -X POST \
2 "https://abnetsisaynew-joblink-match-api.hf.space/api/predict" \
3 -H "Content-Type: application/json" \
4 -d '{"data": ["JOB: Software Engineer [SEP] CANDIDATE: 3 years Python"]}'
5# Returns: {"data": [{"score": 0.8712}]}1const response = await fetch(process.env.HUGGINGFACE_SPACE_URL, {
2 method: "POST",
3 headers: { "Content-Type": "application/json" },
4 body: JSON.stringify({ data: [`JOB: ${jobText} [SEP] CANDIDATE: ${candidateText}`] }),
5});
6const { data: [{ score }] } = await response.json();
7console.log("Match score:", score); // 0.0 – 1.0@misc{joblink2025,
author = {Abnet Sisay},
title = {JobLink: AI-Powered Job Matching for Ethiopian Graduates},
year = {2025},
url = {https://huggingface.co/abnetsisaynew/joblink-match-scorer}
}