Text Classification
PEFT
Safetensors
English
skills-assessment
resume
cv
nli
lora
classification
hr-tech
Instructions to use niko0xdev/skilljev with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use niko0xdev/skilljev with PEFT:
Task type is invalid.
- Notebooks
- Google Colab
- Kaggle
|
Download README.md from niko0xdev/skilljev: direct link, hf CLI and curl.
- Browser
- Download file 4.57 kB
-
https://huggingface.co/niko0xdev/skilljev/resolve/main/README.md
- Command line
-
hf download hf://niko0xdev/skilljev/README.md
-
curl -L -o README.md https://huggingface.co/niko0xdev/skilljev/resolve/main/README.md
4.57 kB
| license: apache-2.0 | |
| base_model: AlexWortega/openjev | |
| library_name: peft | |
| language: [en] | |
| tags: [skills-assessment, resume, cv, nli, lora, classification, hr-tech] | |
| datasets: [niko0xdev/skilljev-data] | |
| pipeline_tag: text-classification | |
| # SkillJev: CV-evidence → skill / evidence / proficiency classifier | |
| SkillJev scores how well candidate evidence (CV excerpts, interview notes) supports a single job requirement. It has three heads: | |
| | Head | Labels | | |
| |---|---| | |
| | **skill group** | `lang_core, api_design, data_storage, system_design, cloud_devops, reliability_obs, security, testing_quality, frontend, leadership` | | |
| | **evidence** | `supported, partial, contradicted, insufficient` | | |
| | **proficiency** | `0, 1, 2, 3, 4, 5, unknown` (**unknown ≠ 0**: level 0 is used only when the evidence explicitly says the candidate has no experience) | | |
| - **Base model:** [`AlexWortega/openjev`](https://huggingface.co/AlexWortega/openjev), subfolder `qwen3.5-4b-nli-v5` (OpenJev 4B, Qwen3.5 NLI). | |
| - **Adapter:** LoRA r=16, α=32, all linear layers. | |
| - **Heads:** 3 linear heads on the last-token hidden state (`heads.pt`). | |
| - **Training:** 1 epoch-slice, bf16, lr 1e-4, batch 4, max length 192, 500 steps on Colab L4. | |
| - **Training data:** [`niko0xdev/skilljev-data`](https://huggingface.co/datasets/niko0xdev/skilljev-data) (v008). | |
| - **Labeling standard:** `RUBRIC.md`, including the *Real-CV labeling convention v0.2*. | |
| ## Results: locked held-out set (n = 90, never trained on) | |
| The held-out set has 70 synthetic samples built from **held-out-only templates** and 20 human/agent-reviewed real Djinni CV excerpts. | |
| | Model | skill | evidence | prof exact | prof ±1 | unknown→0 errors | ECE (ev / prof) | | |
| |---|---|---|---|---|---|---| | |
| | tasksource/ModernBERT-base-nli, zero-shot | 73.3 | 56.7 | 58.9 | 63.3 | 0 | – | | |
| | OpenJev 4B, zero-shot | 88.9 | 68.9 | 71.1 | 80.0 | 0 | – | | |
| | **SkillJev (this checkpoint: v008, step 500)** | **100.0** | **97.8** | **95.6** | 96.7 | 0 | 0.023 / 0.033 | | |
| | SkillJev v008, step 1000 (dev-selected) | 100.0 | 97.8 | 94.4 | 98.9 | 0 | 0.024 / 0.038 | | |
| ECE is measured after temperature scaling fit on the dev split (T: skill 0.5, evidence 2.4, proficiency 2.8). | |
| > **Caveat:** step 500 was chosen because of its held-out score. The checkpoint picked purely on dev (step 1000) reaches 94.4% proficiency exact. The 1.2-point gap is one sample out of 90, so treat ~94–96% as the realistic range. The held-out set is small (n=90), and every number carries roughly ±3–5 points of sampling noise. | |
| ## Usage | |
| ```python | |
| # pip install "transformers>=4.57" peft accelerate (GPU with ~12 GB) | |
| # see inference.py in this repo | |
| from inference import predict | |
| predict("Strong PostgreSQL skills", [("cv","experience","Partitioned a 3TB PostgreSQL table and tuned indexes, cutting queries from 40s to 1s.")]) | |
| # {'skill_group': {'label': 'data_storage', ...}, 'evidence': {'label': 'supported', ...}, 'proficiency': {'label': '4', ...}} | |
| ``` | |
| Input format: `Requirement: <text>\nEvidence:\n[<source_type>/<section>] <text>` (one line per evidence item, or `(no evidence)`). | |
| ## Intended use & limitations | |
| - This is a **decision-support** tool for structuring CV screening. It is not an automated hiring decision. Keep a human in the loop and route low-confidence (<0.7), `contradicted`, or level ≥4 CV-only predictions to review. | |
| - Coverage: English, IT/software roles, 55 skills in 10 groups (`TAXONOMY.md`). Other domains or languages are out of distribution. | |
| - Most training data is template-generated synthetic text. The real-CV portion is about 1.2k agent-reviewed excerpts plus about 5.7k rule-labelled (silver) excerpts, so expect lower accuracy on unusual phrasing. | |
| - Proficiency is judged from a single excerpt. It reflects the evidence given, not the person's true skill. CV self-reports are not verified. | |
| - Possible biases come from the Djinni (Ukrainian job market) CV distribution and from the labeling convention itself. | |
| ## MLX / Apple silicon | |
| The release is standard PEFT safetensors plus a small PyTorch `heads.pt`. To run on MLX: merge the LoRA into the base model (`peft` `merge_and_unload()`), convert with `mlx_lm.convert`, and port the three linear heads (weights in `heads.pt`) to `mlx.nn.Linear`. No official MLX build is provided. | |
| ## License & attribution | |
| - The adapter is released under Apache-2.0. The base model's own license also applies. | |
| - Real CV excerpts come from [lang-uk/recruitment-dataset-candidate-profiles-english](https://huggingface.co/datasets/lang-uk/recruitment-dataset-candidate-profiles-english) (MIT). | |