Классификатор обращений граждан – Минюст
Модуль на ансамбле из четырёх моделей RuBERT-large читает обращения граждан, поступившие через сайт Минюста России, определяет одну из 10 тематических рубрик и дописывает в регистрационную карточку коды рубрики и департамент-получатель. Работает в закрытом контуре заказчика, без интернета и без видеокарты.
О проекте
Обращения граждан приходят в Минюст России через форму на официальном сайте. Дальше их вручную разбирают сотрудники территориальных органов: читают текст, заполняют регистрационную карточку в СЭД, выбирают рубрику и исполнителя. Смысловой анализ каждого обращения делает человек, поток круглосуточный и неравномерный. Министерство с 2021 года развивает модуль предварительной классификации входящей корреспонденции, и в 2026 году понадобилась отдельная версия для территориальных органов: со своим набором рубрик, переобучением на свежей выгрузке и статистикой обработки.
Классификатор работает по схеме «из бакета в бакет» и не интегрируется с СЭД напрямую. Сервис заказчика кладёт письмо .eml во входное S3-хранилище, классификатор забирает его, извлекает текст из файла обращения, определяет рубрику ансамблем из четырёх моделей RuBERT-large и дописывает в XML-карточку ведомственный код, код классификатора Администрации Президента и департамент-получатель. Готовое письмо под тем же именем уходит в выходное хранилище, откуда его забирает СЭД. Параметры обработки пишутся во встроенную базу SQLite, статистика и состояние сервиса доступны по REST API. Всё поставляется автономным комплектом Docker Compose: образы, модели и зависимости ставятся в закрытом контуре без интернета.
Технологии
- Python
- PyTorch
- RuBERT-large
- Docker Compose
- MinIO (S3)
- SQLite
- REST API
- Prometheus
Что разработано
- Подготовка обучающего корпуса по выгрузке обращений заказчика: разбор писем, очистка, анализ распределения рубрик и сверка с рубрикатором из ТЗ
- Обучение и подбор моделей: четыре дообученные модели RuBERT-large, ответы которых усредняются
- Замер качества на отложенной выборке из 807 обращений, которые не участвовали в обучении: точность, полнота и F1 по каждой рубрике
- Порог уверенности: если модель сомневается, обращение получает стандартную рубрику и уходит на ручной разбор, а предположение модели сохраняется для оператора
- Опрос входного S3-хранилища с настраиваемым периодом и датой начала, отбор только необработанных писем, отдельные ключи доступа к входному и выходному бакетам
- Разбор .eml и выбор источника текста: только файл обращения (pdf, doc, docx, rtf), сопроводительные документы, подписи и изображения не анализируются; при скане без текстового слоя можно взять текст из тела письма
- Дополнение карточки обращения без пересборки исходного письма: меняется только карточка, остальные вложения и имена файлов остаются как были
- Справочник рубрик, в котором каждой рубрике сопоставлены ведомственный код, код классификатора Администрации Президента и департамент-получатель
- Защита от повторной обработки: если результат с тем же именем уже лежит в выходном хранилище, письмо не обрабатывается второй раз
- Журнал событий в SQLite на отдельном томе со сроком хранения 90 суток: обработано, отклонено с причиной, повтор, опрос, запуск
- Статистика по REST API: сколько обращений обработано, по каким рубрикам, время обработки, доля нераспознанных, разбивка по дням, месяцам и годам, выгрузка в JSON и CSV
- Наблюдаемость: health-check, различающий запуск и готовность модели, метрики в формате Prometheus для системы мониторинга заказчика
- Автономный комплект поставки для закрытого контура и два варианта сборки: с видеокартой и на процессоре общего назначения
- Эксплуатационная документация по ГОСТ: техническое задание, программа и методика испытаний, руководства администратора и оператора, инструкция по развёртыванию
Ключевые фичи
- Сотрудник получает обращение уже с рубрикой, кодами и департаментом-исполнителем вместо ручного смыслового разбора каждого письма
- Сомнительные обращения не распределяются молча: ниже порога уверенности они помечаются для ручной проверки
- Исходные данные не изменяются: в письме дописывается только карточка, имена файлов сохраняются
- Работа в закрытом контуре без интернета, видеокарта не обязательна: на процессоре одно письмо обрабатывается примерно за 1,5 секунды
- Ради скорости ансамбль можно сократить до одной модели, точность при этом снижается примерно на 1,5 пункта
- Сбой записи статистики или журнала не останавливает обработку обращений
- Статистика и состояние сервиса доступны по REST API и в системе мониторинга заказчика
Решение задачи
Первая сложность была в самих данных. В ТЗ было 13 рубрик, а реальная выгрузка с ними не совпала: по двум рубрикам не нашлось ни одного обращения, две новые встречались в выгрузке, но отсутствовали в ТЗ, ещё одна набирала всего 42 обращения на весь массив и была исключена по согласованию с заказчиком. Рубрикатор пересобрали по фактическим данным, а не по документу.
Вторая сложность: границы между некоторыми рубриками в разметке не соблюдались. Обращения с идентичным текстом операторы относили к трём разным рубрикам («Законодательство Российской Федерации», «Законодательство субъектов Российской Федерации», «Деятельность федеральных государственных органов»). Модель не может выучить различие, которого нет в данных, поэтому три рубрики объединили в одну. Это подняло общую точность на 4 процентных пункта, итоговый классификатор работает с 10 рубриками.
Третья сложность связана с ценой ошибки: неверно распределённое обращение уходит не тому исполнителю. Поэтому вместо одной модели работает ансамбль из четырёх (84,5 % верных рубрик против 82,6 % у одиночной модели), а каждое решение сопровождается оценкой уверенности. Если уверенность ниже порога, обращение получает стандартную рубрику и идёт на ручной разбор, а предположение модели остаётся в журнале, чтобы оператору было с чего начать.
Четвёртая сложность в инфраструктуре: отечественная ОС в закрытом контуре, устаревшая версия CUDA без возможности обновления и никакого доступа в интернет. Решение поставляется автономным комплектом с образами, моделями и зависимостями и умеет работать на процессоре. Обмен с системами заказчика идёт только через S3-хранилище, поэтому замена модели в будущем не потребует менять формат карточки и интеграцию с СЭД.
Метрики
Заказать похожий проект
Оставьте заявку, обсудим задачу и предложим решение под ваш бизнес.
Оставить заявку