4-е место в соревновании
Ссылка на решение, прототип веб-сервиса по определению кода ТНВЭД по описанию товара
Необходимо создать интеллектуальную систему для помощи таможенному инспектору в принятии решения по определению кода ТНВЭД. Система должна определять код товара по описанию на основе датасета переданного для анализа текстового описания товаров.
Интеллектуальная система реализована в виде алгоритма, который имеет веб-интерфейс и может определять код товара по его описанию.
Реализованный веб-сервис имеет несколько основных функций:
- Принимает описание товара и определяет соответствующий описанию код;
- Принимает файл со списком описаний, определяет код для каждого описания и передает пользователю файл в котором для каждого описания определен код;
- Принимает код и выдает пользователю описание этого кода;
- Принимает код и описание и сообщает пользователю правильно ли определена пара код-описание.
- Принимает код и описание и в случае если пара код-описание не совпадают по определению модели, то предлагает наиболее вероятные коды ТНВЭД для данного описания.
Дальнейшее развитие нашего сервиса мы видим в интеграции с ЛК декларанта и проверяющего в системе таможенной службы. Пользователь должен иметь возможность при подаче декларации, не переходя в сторонние сервисы, проверить правильность введенного кода и получить рекомендации по его изменению. С другой стороны проверяющий должен получать от системы подсказки соответствует ли введенное описание предоставленному декларантом коду.
Веб-сервис представлен в рабочем виде, исходный код представлен в репозитории. Код модели подготовлен в colab. Для открытия и запуска кода модели необходимо:
- Открыть файл по ссылке ниже;
- Нажать в открывшемся окне "открыть в приложении colab", в верхней части экрана.
- clear_data.py - ноутбук для очистки данных от повторяющихся значений, знаков препинания и лишних символов.
- preprocessing_data.ipynb - ноутбук для препроцессинга данных, токенизации и лемматизации.
- train_model.ipynb - основной файл, где обучается модель.
Для построения модели нами изначально было выбрано 3 алгоритма для проведения экспериментов и нахождения лучшего из них. Были протестированы такие алгоритмы как FastText, SVD, CatBoost. Мы перебрали некоторое количество параметров и обучили каждую модель не по одному разу. В итоге, нами была выбрана модель на основе алгоритма FastText, так как она показала лучшие результаты по метрике F1.
FastText работает с векторным представлением слов и содержит предобученные векторные представления этих слов. Этот алгоритм работает несколько быстрее чем алгоритмы SVD и CatBoost. Две основные особенности которые использует алгоритм - негативное сэмплирование и subword-модель.
Негативное сэмплирование - это подбор в цепочках слов таких сочетаний которые не являются соседями по контексту исходя из данных. Например, "шерстяной свитер" - это положительный сэмпл, а "шерстяная лопата" отрицательный.
Subword-модель разбивает каждое слово на цепочки (n-граммы) от 3 до 6 символов, объединяет это в один список и добавляет в конце слово целиком. Это позволяет модели отсеять слова которые могут начинаться с одинаковых символов, но при этом иметь разный смысл. Также подобный подход помогают алгоритму работать со словами которые он раньше не встречал.
Была выбрана F-мера, на итоговой модели мы получили значение метрики 0.91 (91%).
Основная проблема в масштабируемости - это данные. Их где-то нужно хранить, выгружать и передавать модели. Вычислительные мощности не помогут масштабироваться если нет достаточного количества данных. Мы подготовили решение в виде эскизной базы данных, которую мы разработали для модели.
Мы подготовили схему базы данных, запросы для создания БД и выгрузки из нее нужной для модели информации. Также нами был подготовлен python-скрипт который позволяет выгрузить данные из БД и передать их модели. Более подробно описано в папке этого репозитория sql_database, либо можно перейти по этой ссылке.
Все использованные библиотеки предоставляются с открытым исходным кодом. Список библиотек можно найти в файле requirements.txt