Text Classification
Transformers
Safetensors
Russian
English
bert
tiny-bert
rubert-tiny2
binary-classification
jobs
developer-classification
Eval Results (legacy)
text-embeddings-inference
Instructions to use AndreiTolmachev/dev_roles_1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use AndreiTolmachev/dev_roles_1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="AndreiTolmachev/dev_roles_1")# Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("AndreiTolmachev/dev_roles_1") model = AutoModelForSequenceClassification.from_pretrained("AndreiTolmachev/dev_roles_1") - Notebooks
- Google Colab
- Kaggle
File size: 4,450 Bytes
31c5806 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | ---
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.
|