Instructions to use ZenMan67/support-ticket-classifiers-minilm with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use ZenMan67/support-ticket-classifiers-minilm with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="ZenMan67/support-ticket-classifiers-minilm")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("ZenMan67/support-ticket-classifiers-minilm", device_map="auto") - Notebooks
- Google Colab
- Kaggle
license: apache-2.0
language:
- ru
library_name: transformers
pipeline_tag: text-classification
tags:
- customer-support
- hierarchical-classification
- mps
- minilm
base_model: sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2
Классификаторы тикетов
Базовый encoder:
sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2.
Архитектура каждой модели:
MiniLM encoder → masked mean pooling → Dropout(0.2) → Linear(384, N)
Обучены четыре независимые версии:
| Папка | Классы | Назначение |
|---|---|---|
handler |
3 | human, llm, auto |
human |
22 | Категории обязательной ручной обработки |
llm |
20 | Категории ответа/черновика LLM |
auto |
18 | Категории безопасного автоответа |
Данные
Использован encoder_dataset.json:
- 3000 уникальных запросов;
- 60 категорий;
- 50 запросов на категорию;
- 10 независимых смысловых формулировок на категорию;
- пять стилевых вариантов каждой формулировки.
Train/validation/test разделены по смысловым формулировкам в пропорции 80/10/10. Стилевые варианты одной исходной фразы всегда находятся в одном split.
Результаты
| Модель | Test accuracy | Test macro-F1 |
|---|---|---|
handler |
0.817 | 0.817 |
human |
0.745 | 0.690 |
llm |
0.800 | 0.755 |
auto |
0.778 | 0.713 |
В test router допустил 2 ошибки human → auto на 110 human-примерах.
Поэтому в MVP автоматическую отправку нужно дополнительно ограничивать
confidence threshold, allowlist и risk-правилами.
На Apple M1 Pro один уже загруженный handler выполняет batch-1 inference
примерно за 7.8 мс median и 8.7 мс p95. Время запуска CLI и загрузки весов в этот
замер не входит.
Запуск
Каскадный прогноз:
.venv/bin/python predict.py \
"С меня два раза сняли деньги за одну покупку"
Прогноз конкретной головой:
.venv/bin/python predict.py \
"Где выключить рекламные уведомления?" \
--task auto
Повторное обучение:
.venv/bin/python train_encoder_heads.py
Загрузка с Hugging Face при старте сервиса
Публичный репозиторий не требует токена:
from hub_runtime import HubTicketClassifier
classifier = HubTicketClassifier(
repo_id="ZenMan67/support-ticket-classifiers-minilm"
)
result = classifier.predict(
"С меня два раза сняли деньги за одну покупку"
)
При создании HubTicketClassifier вызывается snapshot_download. Router
загружается сразу, а соответствующая category-head — при первом обращении к
ней. Если нужны все четыре модели в памяти, передайте preload_all=True.
В каждой папке модели:
model.safetensors— encoder и линейная голова в FP16;config.json— base model, pooling и порядок labels;metrics.json— split, история обучения и ошибки test.
FP16 используется только для хранения: текущий loader создаёт модель в FP32 и при загрузке приводит checkpoint к dtype модели. Это уменьшает размер репозитория примерно вдвое без изменения API.
Ограничения
Это baseline для MVP на полностью синтетических данных. Confidence не калиброван, реальные опечатки, новые продуктовые термины и изменение входного потока не представлены полноценно. Перед автозакрытием нужны реальные деидентифицированные тикеты, shadow mode и отдельный safety-набор.