Корпоративная почта — одна из самых уязвимых и при этом перегруженных точек в инфраструктуре компаний. Сотрудникам нужно ежедневно обрабатывать десятки категорий писем — от финансовых запросов до юридических документов. Универсальные фильтры в таких условиях работают неточно: категории уникальны, а контекст меняется. Помимо этого, работе мешает спам, а безопасности угрожают фишинг-письма.
На хакатоне Skillfactory компания «АВ Софт» предложила студентам разработать MailLens — сервис интеллектуальной категоризации почтового трафика, способный классифицировать письма по произвольно заданным категориям и корректно обрабатывать случаи неопределенности. Рассказываем, как команда победителей подошла к задаче, какие архитектурные решения выбрала и каким получился итоговый прототип.
«Интеллектуальная категоризация вместо универсальных фильтров»: с каким брифом пришли партнеры
Соорганизатором и ментором на хакатоне выступила компания «АВ Софт» — российский разработчик ПО в сфере информационной безопасности.
Эксперты компании дали студентам бриф на стыке ML и практической кибербезопасности: разработать сервис MailLens для интеллектуальной категоризации почтового трафика. Компания предложила участникам решить задачу, которая уже имеет готовое эталонное решение в продуктовой линейке «АВ Софт». Это позволило построить образовательный процесс вокруг сравнения: студенческий MVP против профессиональной модели.
Студентам предстояло разработать классификатор писем с гибкой системой категорий, анализом вложений и ссылок, устойчивостью к спаму и поддержкой zero-shot-подхода. Особое внимание уделили пограничным случаям: если письмо не подходит ни под одну категорию, система должна была относить его в «Не определена» с четкой калибровкой порога уверенности.
Участники справились с мультиязычностью, обработкой метаданных и даже экспериментальным модулем обнаружения prompt-инъекций. Но главным результатом для студентов стала возможность получить экспертную обратную связь: над чем еще предстоит работать, на чем сделать акцент и как доработать свои решения, чтобы они соответствовали стандартам промышленной разработки.
«Искать причину неопределенности в ML — это творческий процесс»: как студенты организовали работу
Над разработкой MailLens работали шесть команд. В итоге лучшее решение по оценке заказчика разработала команда под лидерством студента магистратуры по машинному обучению МИФИ и Skillfactory Романа Кулебакина.
Роман взял на себя обязанности тимлида и Fullstack Data Lead, отвечал за архитектуру решения, координацию и бэкенд, а также участвовал в ML-части. Помимо него, на проекте работали пять специалистов с разными ролями. ML-инженер занимался ядром модели: обучением, построением эмбеддингов и настройкой порогов уверенности. Data Scientist анализировал и готовил данные. Backend-разработчик реализовывал API, интеграцию с почтовыми протоколами и бизнес-логику. DevOps/MLOps-инженер отвечал за контейнеризацию и пайплайны развертывания, а frontend-разработчик создавал интерфейс для настройки категорий и визуализации результатов.
Сначала команда проанализировала задачу и предложила несколько вариантов архитектуры. Каждый участник сформулировал свое видение, после чего идеи обсудили и выбрали оптимальный вариант — с учетом ограничений по времени и требований хакатона. Все промежуточные решения передавались тимлиду, который собирал их в единый прототип. Коммуникация велась в мессенджере, где регулярно синхронизировали прогресс.
Проект проходил через последовательные этапы: анализ задачи, выбор архитектуры, работа с данными, подбор моделей, разработка backend- и frontend-частей, настройка Docker-контейнеров, интеграция всех компонентов и тестирование итогового решения. В качестве технологической базы использовали Python, PyTorch и Transformers, SentenceTransformers, Scikit-learn и Streamlit.
Самой сложной частью стала реализация динамического добавления пользовательских категорий без полного переобучения модели и корректная настройка порога «Не определена». Модель по умолчанию могла относить письмо к какой-либо категории даже при низкой уверенности, что снижало практическую ценность сервиса.
Партнер сопровождал проект консультативно: в ходе хакатона представители «АВ Софт» проводили встречи с участниками, помогали уточнить требования и понять бизнес-контекст. При этом архитектурные и инженерные решения студенты принимали самостоятельно.
«Результат во многом превосходит ожидания»: каким получился MVP
В основе финального решения — дообученная модель XLM-RoBERTa-large, мощная мультиязычная архитектура трансформеров, показывающая высокие результаты на бенчмарке MTEB (Massive Text Embedding Benchmark). Выбор этой модели позволил обеспечить качественную семантическую классификацию писем на разных языках и сделать сервис пригодным для промышленного применения.
Команда реализовала не отдельный ML-эксперимент, а целостный сервис. Проект занял первое место среди шести команд и получил 39 баллов из 40 возможных.
По итогам хакатона вся команда из шести человек получила приглашение на стажировку в «АВ Софт», а также памятный мерч от компании. Компания рассматривает возможность использования отдельных архитектурных подходов и технологических наработок в будущих версиях своих систем.
Хакатон в итоге оказался не только конкурсом прототипов, но и точкой входа в профессиональное сотрудничество.


