ResuVL-S

ResuVL-S is the small model of ResuVL, three models that read CV page images into JSON: ResuVL-S (0.26B parameters), ResuVL-M (0.51B) and ResuVL-L (0.87B), from the tiny-resume-parser project.

It reads one CV page image and writes its content as JSON (name, contact details, work, education, skills, languages, projects and more; schema in schema.py). 0.26B parameters, every weight fine-tuned (base model and its licence: see Licence below); the released model is the average of the weights of 4 fine-tuned runs. Code, training recipe and full evaluation: https://github.com/iamkucuk/tiny-resume-parser.

In short: on 204 held-out CV pages, 67 % of the values ResuVL-S writes match the human-reviewed labels and it finds 63 % of the values in those labels (field F1 0.652). The model that made the training labels, run a second time on 50 reviewed pages, scores 0.912, which is the practical ceiling for models trained on its labels. ResuVL-S reads one page in about 30 seconds on a laptop CPU, with no GPU and no PDF text layer. For the highest accuracy, use ResuVL-L (0.845).

Use

pip install git+https://github.com/iamkucuk/tiny-resume-parser
tiny-resume-parser parse cv.pdf --model furkankucuk/ResuVL-S

PDF pages are rendered at 120 dpi and read one page at a time; the PDF text layer is not used. The command applies the settings the model was trained with: 12 image tiles (longest edge 2,048 px). A CPU reads one page in about 30 seconds (Apple M2 Max, float32).

Results

Field F1 compares each (field, value) pair of the answer with a human-reviewed label. Lenient ignores case, spacing and punctuation; content also accepts correct text placed under another field of the same section.

Score
Test, 204 reviewed pages, lenient field F1 0.652 (0.653 repaired)
Test, strict field F1 0.642
Test, content F1 0.777
Test pages with no parseable answer 13 of 204 (7 reach the token limit)
Development lenient F1, 50 reviewed / 79 validation pages 0.660 / 0.649
Development content F1 0.798 / 0.780

The labelling model itself, run a second time on 50 reviewed pages, scores 0.912 lenient field F1 against them; its run-to-run variation limits what models trained on its labels can reach. Test scores are with transformers 5.5.4. Definitions: evaluation.md.

Training data

1,393 CV page images from the Cv Parsing Dataset (invoiceModelisation, Roboflow Universe, CC BY 4.0), labelled by GLM-5.3-Flash. Mostly French and English CVs. Recipe: training.md.

Limits of the training data

The labels come from a model that was not made for French. Every label was written by GLM-5.3-Flash, whose model card lists English and Chinese as its languages, while 80 % of the CVs are French. Its errors on French text become part of the training labels, and the students learn them. The 254 test and development pages were reviewed by hand starting from those labels, and the review changed fewer than 1 % of values, so the test measures agreement with reviewed model labels, not with labels written independently by people. Run a second time, the labelling model scores 0.912 against the reviewed labels, which limits what models trained on its labels can reach.

English-trained base models, a small and narrow sample of French. The base models that ResuVL was fine-tuned from learned to read mostly on English text. Those of ResuVL-S and ResuVL-M list English as their only language; those of ResuVL-L and ResuVL-L v0.1 are listed as multilingual, but neither model card gives a share per language, and French is likely a small part of their training data next to English. The training set here gives about 330,000 words of French from 1,116 CV pages, and it is narrow French: names, job titles, school names, dates and short skill lists, with half of all values one word long and few full sentences. Fine-tuning therefore asks models that read English well to learn to read French from a small and narrow sample, which covers little of French spelling, accents and vocabulary, while long training on it may weaken the English reading they started with. This makes training harder; how much of the remaining error it causes has not been measured.

Intended use and limits

For drafting a structured record of a CV page, to be checked by a person or by an applicant-tracking system. Not for ranking or rejecting candidates: the model leaves out values and misreads some, and its output must not decide anything about a person without review. One page at a time; other languages, scripts and very unusual layouts are untested; text written on the page is read like any other text.

Licence

The fine-tuned weights are licensed CC BY-NC 4.0: free for research and open-source use, not for commercial use. They were made by changing every weight of granite-docling-258M through fine-tuning. granite-docling-258M is licensed Apache 2.0; the licence texts are in LICENSE-base-model.txt and applies to the parts that come from it.

Citation

@software{kucuk2026tinyresumeparser,
  author = {Kucuk, Furkan},
  title  = {tiny-resume-parser: small vision-language models that read CV page images into JSON},
  year   = {2026},
  url    = {https://github.com/iamkucuk/tiny-resume-parser}
}
Downloads last month
35
Safetensors
Model size
0.3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for furkankucuk/ResuVL-S

Finetuned
(15)
this model