加载中…
加载中…
Бинарный классификатор вакансий: отличает разработчиков (dev) от не‑разработчиков (non_dev).
Построен на базе cointegrated/rubert-tiny2 — компактной BERT‑модели для русского/английского языка.
Модель предсказывает, относится ли вакансия к роли разработчика. Положительный класс (dev) определяется как:
role_category ∈ DEV_CLASSES AND team_lead == 0
DEV_CLASSES:
Тимлиды и менеджеры в положительный класс не входят.
| 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.6978import 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..."))
BertForSequenceClassificationmax_position_embeddings: 2048cointegrated/rubert-tiny2titles_descriptions_urls_14_05_classified.csv), размечен LLM‑пайплайномpos_weight ≈ 3.87 для баланса классовnon_dev по дизайну — для классических задач "any developer incl. lead" модель не подходит.MIT.