В данном репозитории находится решение команды MISIS_AI_Lab. Решение представляет собой веб-портал, который позволяет может быть использован для удобной работы с различными договорами. Вы можете получить интерпретацию договора, а также определить его класс (аренда, поставка, подряд и т.д.).
Нашим решением является веб портал с наиболее актуальной информацией. На нем можно осуществить следующие действия:
- загрузить договор в различных форматах (pdf, docx, txt)
- извлечь из файла текст договора
- получить отчет по договору, в котором будет указана его классификация и интерпретация
Также, вы можете минимальную версию нашего сервиса, работающую через API.
Фронтенд нашего сервиса доступен по ссылке: 62.84.127.116:3001 Вы можете использовать его для тестирования. Однако, если вы хотите запустить сервис локально, то вам необходимо выполнить следующие действия:
Перед тем, как развернуть у себя сервис необходимо установить Docker и Docker Compose на вашу машину.
Далее, необходимо выполнить следующие действия:
# Клонируем репозиторий
git clone -b main https://github.com/itatmisis/MISIS_AI_Lab_Xmas.git
# Переходим в папку с проектом
cd MISIS_AI_Lab_Xmas/dockerItems
# Запускаем сервис
docker-compose up -d
Теперь вы можете открыть в браузере localhost и увидеть работающий сервис.
Также, вы можете использовать следующие адреса для доступа к сервису:
- 0.0.0.0:3001 - адрес фронтенда
- 0.0.0.0:8001 - статический контент для фронтенда
- 0.0.0.0:8888 - адрес backend-сервиса
- 0.0.0.0:5432 - адрес базы данных PostgreSQL
- 0.0.0.0:15672 - адрес админ-панели RabbitMQ
- 0.0.0.0:5672 - адрес брокера сообщений RabbitMQ
Репозиторий состоит из следующих папок:
- dockerItems - содержит файлы для запуска сервиса через Docker
- frontend - содержит фронтенд нашего сервиса
- nginx - содержит статический контент для фронтенда
- Crud.API - содержит обработчики запросов к базе данных
- ML_Worker - содержит обработчики запросов к моделям машинного обучения
- Xmas.API - содержит обработчики запросов к брокеру сообщений
На диаграмме ниже можно посмотреть на верхнеуровневую архитектуру нашего сервиса.
Мы используем микросервисную архитектуру, которая позволяет нам масштабировать наш сервис по мере необходимости.
В рамках работы над прототипом были учтены лучшие практики построения подобных решений, используемые в современных проектах и разработаны собственные решения, которые позволяют нам решить поставленные задачи.
В качестве архитектурных принципов для разных частей продукта мы опирались на следующие паттерны:
- API Gateway. Он позволяет собрать все сервисы в одно целое и предоставить единый интерфейс для взаимодействия с ними.
- Microservice architecture. Каждый сервис может быть развернут отдельно, а большинство коммуникаций - через REST API запросы.
- Database per service. Поскольку база данных используется в нескокльких местах, мы приняли решение выделить отдельный микросервис для обспечения Create, Read, Update, Delete (CRUD) запросов
- Event Sourcing. Паттерн позволяет хранить историю изменений в базе данных. В нашем случае, это позволяет хранить историю изменений в базе данных, а также восстанавливать состояние базы данных на любой момент времени.
- Pub-Sub. Паттерн позволяет обеспечить обмен сообщениями между микросервисами в публикацион-подписчик модели. В нашем случае, это неоюходимо для управления запросаими пользователей на обработку больших файлов.
В этой связи мы опираемся на референсные архитектуры ведущих ИТ компаний, а также используем общеприщнанные паттерны, проверенные временем.
Мы старались сделать нашу архитектуру максимально простой и понятной. В этой связи мы опираемся на референсные архитектуры ведущих ИТ компаний, а также используем общеприщнанные паттерны, проверенные временем. Они позволяют нам решить следующие задачи:
- обеспечить минимальное время ожидания для пользователя
- отделить бизнес логику веб сервиса от ресурсоемких задач Машинного Обучения
- обеспечить масштабируемость сервиса
- обеспечить возможность быстрого внедрения новых алгоритмов Машинного Обучения
В качестве референсных архитектур мы взяли подход IBM в построении решений AI for IT Operations (AIOps), из которого мы поняли, что разбиение процесса на этапы (Collect, Organize, Analyze, Infuse) соответствуют нашим потребноостям.
- Torch - библиотека для реализации нейронных сетей
- xztrainer - библиотека с обучающим пайплайном для торча
- HuggingFace Transformers & Tokenizers & Hub - набор библиотек от HuggingFace, используем оттуда реализацию RoBERTa
- Tika - библиотека для извлечения текста из документов различных форматов
- Tesseract - встроен в Tika, инструмент для распознавания текста из фото (OCR)
- Razdel - библиотека для алгоритмического разделения текста на блоки
- Catboost - библиотека для работы с GBDT-моделями
- Scikit-Learn - библиотека с алгоритмами классического МО
- Deep Learning - подход, основанный на нейронных сетях
- Transfer Learning - подход, основанный на использовании предобученных моделей
- NLP - подход, основанный на обработке естественного языка
- Text Classification - подход, основанный на классификации текста
- Text Preprocessing - подход, основанный на предобработке текста
Делили выборку на main и holdout подвыборки. Для проверки, что все работает, использовали Stratified 5-Fold на main'е. Смотрели avg и std Macro F1 score по фолдам. Все модели были обучены на серверных мощностях с GPU.
Используются для вычленения самых важных слов/словосочетаний из документа. Достаем их по ShapValues. Ансамблировали модели по 5 фолдам, дополнительно проверяли, что все ок, на holdout.
После обучения на фолдах для проверки устойчивости, переобучали модель на всем main, и проверяли, что все ок, на holdout. Обучение - сэмплировали случайные подотрезки токенов из документов. Валидация - разделяли документ на фрагменты при помощи razdel, скорили каждый фрагмент Бертом. Усредняли скоры по фрагментам для итогового предикта. Показываем самые большие по вероятности фразы для каждого из классов на фронте.
В случае возникновения каких-либо ошибок или вопросов не стесняйтесь создавать Issue в репозитории. Также можете писать в личные сообщения @misisailab (Telegram, VK) или на почту [email protected]