dev_roles_1 — Developer vs Non-Developer Classifier

Бинарный классификатор вакансий: отличает разработчиков (dev) от не‑разработчиков (non_dev). Построен на базе cointegrated/rubert-tiny2 — компактной BERT‑модели для русского/английского языка.

Описание задачи

Модель предсказывает, относится ли вакансия к роли разработчика. Положительный класс (dev) определяется как:

role_category ∈ DEV_CLASSES AND team_lead == 0

DEV_CLASSES:

  • Backend
  • Desktop / Systems
  • Embedded
  • Frontend
  • Fullstack
  • ML / AI / Data Scientist
  • Mobile

Тимлиды и менеджеры в положительный класс не входят.

Метки

id label
0 non_dev
1 dev

Метрики (валидация)

Метрика Значение
ROC AUC 0.9964
Precision @ threshold 0.9683
Recall @ threshold 0.9721
Best threshold 0.6978
Target recall 0.97

Лучшая эпоха: 5. pos_weight при обучении: 3.87.

Параметры инференса

  • max_length: 256 токенов
  • Текст вакансии формируется как title + description (description обрезается до 1200 символов)
  • Решающий порог по вероятности класса dev: 0.6978

Использование

import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

MODEL_ID = "AndreiTolmachev/dev_roles_1"
THRESHOLD = 0.6978

tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_ID).eval()

def is_developer(title: str, description: str = "") -> bool:
    text = (title + " " + description[:1200]).strip()
    enc = tokenizer(text, truncation=True, max_length=256, return_tensors="pt")
    with torch.no_grad():
        logits = model(**enc).logits
    prob_dev = torch.softmax(logits, dim=-1)[0, 1].item()
    return prob_dev >= THRESHOLD

print(is_developer("Senior Python Backend Developer",
                   "Разработка микросервисов на FastAPI, PostgreSQL, Kafka..."))

Архитектура

  • Модель: BertForSequenceClassification
  • Слоёв: 3, hidden size: 312, attention heads: 12
  • Vocab size: 83 828
  • Параметры: ~29M
  • max_position_embeddings: 2048

Обучение

  • База: cointegrated/rubert-tiny2
  • Датасет: внутренний датасет вакансий (titles_descriptions_urls_14_05_classified.csv), размечен LLM‑пайплайном
  • Лосс: cross-entropy с pos_weight ≈ 3.87 для баланса классов
  • Подбор порога по target recall = 0.97

Ограничения

  • Обучен преимущественно на русскоязычных вакансиях IT‑домена; качество на других доменах/языках не гарантируется.
  • Тимлид/менеджерские роли относятся к non_dev по дизайну — для классических задач "any developer incl. lead" модель не подходит.
  • Описание вакансии используется в усечённом виде (1200 символов) — очень длинные требования могут быть обрезаны.

Лицензия

MIT.

Downloads last month
-
Safetensors
Model size
29.2M params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for AndreiTolmachev/dev_roles_1

Finetuned
(64)
this model

Evaluation results