dev_roles_1 / README.md
AndreiTolmachev's picture
Upload dev_vs_nondev tiny BERT model
31c5806 verified
---
language:
- ru
- en
license: mit
library_name: transformers
pipeline_tag: text-classification
tags:
- text-classification
- bert
- tiny-bert
- rubert-tiny2
- binary-classification
- jobs
- developer-classification
base_model: cointegrated/rubert-tiny2
metrics:
- precision
- recall
- roc_auc
model-index:
- name: dev_roles_1
results:
- task:
type: text-classification
name: Developer vs Non-Developer Binary Classification
metrics:
- type: roc_auc
value: 0.9964
- type: precision
value: 0.9683
- type: recall
value: 0.9721
---
# dev_roles_1 — Developer vs Non-Developer Classifier
Бинарный классификатор вакансий: отличает **разработчиков** (`dev`) от **не‑разработчиков** (`non_dev`).
Построен на базе [`cointegrated/rubert-tiny2`](https://huggingface.co/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**
## Использование
```python
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.