YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
model_card = f"""--- license: apache-2.0 base_model: tomaarsen/Qwen3-Reranker-0.6B-seq-cls tags: - sentence-transformers - cross-encoder - reranker - text-ranking - recruitment language: - en - uk - multilingual pipeline_tag: text-ranking
CV Reranker — Qwen3-Reranker-0.6B fine-tuned
Cross-encoder reranker for matching CVs to job vacancies. Fine-tuned from
tomaarsen/Qwen3-Reranker-0.6B-seq-cls on recruitment domain data.
Used as the second stage of a retrieve-then-rerank pipeline: dense retrieval narrows 200k+ CVs to top-30, this model reorders them into a final top-10.
Results
Evaluated on a held-out human-labeled golden set (10 vacancies, 0-3 graded relevance). The model never saw these vacancies during training.
| Metric | Baseline | Fine-tuned | Δ |
|---|---|---|---|
| NDCG@10 | 0.3244 | 0.5649 | +74% |
| MAP@10 | 0.0808 | 0.2056 | +154% |
| MRR@10 | 0.3560 | 0.6333 | +78% |
| Recall@10 | 0.1644 | 0.2349 | +43% |
| Precision@10 | 0.1500 | 0.2800 | +87% |
Training
- Loss: CachedMultipleNegativesRankingLoss (pairwise ranking)
- Data: 1,209 (vacancy, positive CV, hard negative CV) triples
- Hard negatives: mined from dense/BM25 retrieval tops, scored low by an LLM judge
- Hyperparameters: lr 1e-5, effective batch 16, 3 epochs, max_length 512, bf16
A distillation stage was also tested (BCE regression against Qwen3-Reranker soft scores) but degraded performance across all metrics — the fine-tuned student had already surpassed the teacher, so distillation pulled it back toward weaker behavior. This checkpoint is the pairwise-only model.
Usage
from sentence_transformers import CrossEncoder
model = CrossEncoder("{REPO_ID}")
vacancy = "Senior Python Developer. Requirements: 5+ years Python, FastAPI, PostgreSQL, Docker."
cvs = [
"Role: Senior Backend Engineer\\nSkills: Python, FastAPI, PostgreSQL, Docker, AWS...",
"Role: Marketing Manager\\nSkills: SEO, content strategy...",
]
scores = model.predict([[vacancy, cv] for cv in cvs])
ranked = sorted(zip(cvs, scores), key=lambda x: x[1], reverse=True)
Limitations
- Tuned specifically for CV↔vacancy matching; not a general-purpose reranker
- Golden set is small (10 vacancies) — metrics carry meaningful variance
- Training data skews toward tech roles; niche and non-English categories are underrepresented """
with open("/tmp/README.md", "w") as f: f.write(model_card)
api.upload_file( path_or_fileobj="/tmp/README.md", path_in_repo="README.md", repo_id=REPO_ID, ) print("✅ Model card завантажено")
- Downloads last month
- 9