JobLens: Mistral-7B LoRA
вакансии в структурированный JSON
JobLens — LoRA-адаптер для mistralai/Mistral-7B-Instruct-v0.3, который превращает немецкую или английскую вакансию в один JSON по схеме JobLens v1.0.0. Адаптер дистиллирован из Mistral-Small-24B-Instruct-2501 (AWQ 4-bit) и проверен на 200 gold-разметках.
🔥 Ключевые особенности
- 🤖 QLoRA: NF4 4-bit база, LoRA на q, k, v, o, gate, up и down projections; обучение на Kaggle T4.
- 🔥 Извлекает поля: remote_policy, seniority, skills, languages, contract_type, salary, visa_sponsorship, relocation_support, deadline.
- 👀 Немецкий и английский; подходит для батч-извлечения вакансий с German job boards.
- 💯 На 200 тестовых вакансиях: schema_valid_rate 97.5%, micro-F1 62.9%, enum_accuracy 91.5% — против 62.0%, 43.9% и 43.9% у base zero-shot.
- ⛔ Только тексты вакансий, не CV; не для автоматического скрининга или ранжирования кандидатов; языки кроме en/de не заявлены.
- 🚀 Веса адаптера — CC-BY-NC-4.0; база Apache-2.0; код MIT.
👀 Пример
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer
base = AutoModelForCausalLM.from_pretrained('mistralai/Mistral-7B-Instruct-v0.3', load_in_4bit=True, device_map='auto')
tok = AutoTokenizer.from_pretrained('gmohor21/joblens-mistral-7b-lora')
model = PeftModel.from_pretrained(base, 'gmohor21/joblens-mistral-7b-lora').eval()
prompt = tok.apply_chat_template([{'role':'user','content':user_message(title, text)}], tokenize=False, add_generation_prompt=True)
ids = tok(prompt, return_tensors='pt', add_special_tokens=False).to(model.device)
out = model.generate(**ids, max_new_tokens=700, do_sample=False)Подробнее
Тест: 200 вакансий, micro-F1 62.9% (95% CI 59.6–66.3%), schema_valid_rate 97.5%, enum_accuracy 91.5%.Обучение: QLoRA на Kaggle T4, пик GPU ≈13,6 ГБ; r16 — 41,9 млн обучаемых параметров.
Ограничения: дистилляция от teacher, small test set, обрезка длинных вакансий, не покрыты не-IT профессии и рынки вне en/de.
Лицензия весов: CC-BY-NC-4.0 — только некоммерческое использование.








Комментарии