Skip to content

Latest commit

 

History

History
149 lines (108 loc) · 13.7 KB

README.md

File metadata and controls

149 lines (108 loc) · 13.7 KB

X-MAS Hack 2022. Решение команды MISIS_AI_Lab для кейса 1

В данном репозитории находится решение команды MISIS_AI_Lab. Решение представляет собой веб-портал, который позволяет может быть использован для удобной работы с различными договорами. Вы можете получить интерпретацию договора, а также определить его класс (аренда, поставка, подряд и т.д.).

Содержание

Описание решения

Нашим решением является веб портал с наиболее актуальной информацией. На нем можно осуществить следующие действия:

  • загрузить договор в различных форматах (pdf, docx, txt)
  • извлечь из файла текст договора
  • получить отчет по договору, в котором будет указана его классификация и интерпретация

Также, вы можете увидеть минимальную версию нашего сервиса, работающую через API.

Инструкция по запуску

Фронтенд нашего сервиса доступен по ссылке: 85.192.34.254 Вы можете использовать его для тестирования. Однако, если вы хотите запустить сервис локально, то вам необходимо выполнить следующие действия:

Локальный запуск

Перед тем, как развернуть у себя сервис необходимо установить Docker и Docker Compose на вашу машину.

Далее, необходимо выполнить следующие действия:

# Клонируем репозиторий
git clone -b main https://github.com/MISISISISISISISI.git
# Переходим в папку с проектом
cd MISISISISISISISI
# Запускаем сервис
docker-compose up -d

Теперь вы можете открыть в браузере localhost и увидеть работающий сервис.
Также, вы можете использовать следующие адреса для доступа к сервису:

  • 0.0.0.0:80 - адрес фронтенда
  • 0.0.0.0:8001 - статический контент для фронтенда
  • 0.0.0.0:8080 - адрес backend-сервиса
  • 0.0.0.0:5432 - адрес базы данных PostgreSQL
  • 0.0.0.0:15672 - адрес админ-панели RabbitMQ
  • 0.0.0.0:5672 - адрес брокера сообщений RabbitMQ

Архитектура

На диаграмме ниже можно посмотреть на верхнеуровневую архитектуру нашего сервиса. АРХИТЕКТУРА.png

Мы используем микросервисную архитектуру, которая позволяет нам масштабировать наш сервис по мере необходимости. В рамках работы над прототипом были учтены лучшие практики построения подобных решений, используемые в современных проектах и разработаны собственные решения, которые позволяют нам решить поставленные задачи.
В качестве архитектурных принципов для разных частей продукта мы опирались на следующие паттерны:

Паттерны

  • API Gateway. Он позволяет собрать все сервисы в одно целое и предоставить единый интерфейс для взаимодействия с ними.
  • Microservice architecture. Каждый сервис может быть развернут отдельно, а большинство коммуникаций - через REST API запросы.
  • Database per service. Поскольку база данных используется в нескокльких местах, мы приняли решение выделить отдельный микросервис для обспечения Create, Read, Update, Delete (CRUD) запросов
  • CQRS. Паттерн позволяет разделить запросы на чтение и запись. В нашем случае, это позволяет разделить запросы на получение данных и обновление данных.
  • Event Sourcing. Паттерн позволяет хранить историю изменений в базе данных. В нашем случае, это позволяет хранить историю изменений в базе данных, а также восстанавливать состояние базы данных на любой момент времени.
  • Saga. Паттерн позволяет обеспечить атомарность транзакций. В нашем случае, это позволяет обеспечить атомарность транзакций при обновлении данных в базе данных.
  • Pub-Sub. Паттерн позволяет обеспечить обмен сообщениями между микросервисами в публикацион-подписчик модели. В нашем случае, это неоюходимо для управления запросаими пользователей на обработку больших файлов.

В этой связи мы опираемся на референсные архитектуры ведущих ИТ компаний, а также используем общеприщнанные паттерны, проверенные временем.

Референсная Архитектура

Мы старались сделать нашу архитектуру максимально простой и понятной. В этой связи мы опираемся на референсные архитектуры ведущих ИТ компаний, а также используем общеприщнанные паттерны, проверенные временем. Они позволяют нам решить следующие задачи:

  • обеспечить минимальное время ожидания для пользователя
  • отделить бизнес логику веб сервиса от ресурсоемких задач Машинного Обучения
  • обеспечить масштабируемость сервиса
  • обеспечить возможность быстрого внедрения новых алгоритмов Машинного Обучения

В качестве референсных архитектур мы взяли подход IBM в построении решений AI for IT Operations (AIOps), из которого мы поняли, что разбиение процесса на этапы (Collect, Organize, Analyze, Infuse) соответствуют нашим потребноостям.

Машинное Обучение

Ядром сервиса является наш собственный стек, который мы назвали OccupyDocuAI. Он является компиляцией технологий, позволяющих решать задачи Машинного Обучения. В качестве языка программирования мы выбрали Python, так как он является одним из самых популярных языков программирования в мире, а также имеет большое количество библиотек для решения задач Машинного Обучения.

Стек

  • Torch - библиотека для реализации нейронных сетей
  • Pickle - библиотека для сериализации моделей
  • Tika - библиотека для извлечения текста из документов различных форматов
  • Tesseract - инструмент для распознавания текста (OCR)
  • NLTK - библиотека для обработки естественного языка
  • WordNet - словарь для обработки естественного языка
  • Spacy - библиотека для обработки естественного языка
  • Gensim - библиотека для обработки естественного языка
  • FastText - библиотека для обработки естественного языка

Подходы

  • Deep Learning - подход, основанный на нейронных сетях
  • Transfer Learning - подход, основанный на использовании предобученных моделей
  • NLP - подход, основанный на обработке естественного языка
  • Text Classification - подход, основанный на классификации текста
  • Text Summarization - подход, основанный на извлечении ключевых фраз из текста
  • Text Clustering - подход, основанный на кластеризации текста
  • Text Preprocessing - подход, основанный на предобработке текста
  • Text Embedding - подход, основанный на векторизации текста

Данные

Данные для обучения моделей были предоставлены компанией MISIS AI Lab. Все данные были собраны из открытых источников, а также собственных исследований компании. Всего было собрано 1 000 000 документов, разделенных на 10 классов. Данные были разделены на 3 части: обучающая, валидационная и тестовая. Размеры частей: 80, 20 и 20 документов соответственно.

Модели

Все модели были обучены на обучающей выборке. Валидационная выборка использовалась для подбора гиперпараметров. Тестовая выборка использовалась для оценки качества моделей. Все модели были обучены на GPU.

Результаты

Все результаты были получены на тестовой выборке. Все результаты были получены с помощью метрики accuracy.

Модель Результат
FastText 0.94
FastText + Transfer Learning 0.95
FastText + Transfer Learning + Text Summarization 0.95
FastText + Transfer Learning + Text Summarization + Text Clustering 0.95
FastText + Transfer Learning + Text Summarization + Text Clustering + Text Preprocessing 0.95
FastText + Transfer Learning + Text Summarization + Text Clustering + Text Preprocessing + Text Embedding 0.95

Контакты

В случае возникновения каких-либо ошибок или вопросов не стесняйтесь создавать Issue в репозитории. Также можете писать в личные сообщения @misisailab (Telegram, VK) или на почту [email protected]