Skip to content

ML-model that determines by names, attributes and pictures whether two products are the same

Notifications You must be signed in to change notification settings

maksimlitvinov39kg/ozon-ecup-matching

 
 

Repository files navigation

MISIS Neychev Loss

Состав команды:

  1. Груздев Александр - ML
  2. Рыжичкин Кирилл - ML
  3. Литвинов Максим - ML
  4. Аксеновский Максим - ML
  5. Замышевская Арина - ML

Презентация: тык

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

Итоговое решение представляет собой ансамбль из градиентных бустингов, обученных с применением признаков, полученных без использования моделей глубокого обучения и с использованием различных модификаций модели BERT. Для каждого тестового семпла делается два предсказания:

  1. Предсказание от 5 моделей, которые обучались на всех тренировочных данных с различными сидами, чтобы исключить влияние рандома
  2. Предсказание от 5 моделей, которые обучались на данных из конкретной категории второго уровня с различными сидами

Итоговые предсказания моделей суммируются и усредняются, а после блендятся с весами $w_{full} = 0.6$ и $w_{categories} = 0.4$, получая финальное предсказание. Каждая модель градиентного бустинга использует 109 признаков, из которых 106 признаков получены используя имеющиеся данные без использования моделей машинного обучения, как это продемонстрированно в файле generate_features_train.py, а 3 признака - OOF предсказания, полученные от дообученных open-source моделей.

scheme

Используемые Open-Source модели

  1. rubert-tiny-2
  2. distilbert-base-multilingual-cased

Модель rubert-tiny-2 использовалась для генерации OOF признаков по атрибутам и по описаниям товара, соответственно. Модель distilbert-base-multilingual-cased использовалась для генерации OOF признаков только по атрибутам.

Код обучения моделей и получения OOF предсказаний: тык

Веса моделей, используемые для инференса:

  1. 3epoch_768_name_attr_bert_full
  2. 3epoch_1024_name_desc_bert_full
  3. multi512_attr_bert_full_second_epoch

Модели градиентного бустинга: Ссылка для скачивания

Получение финальных моделей

Процедура обучения моделей градиентного бустинга описана в файле train_boosting_models.py для общей модели и для категориальных моделей.

Итоговый пайплайн для воспроизведения решения

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

  1. VK CLOUD SERVER, 128 Gb RAM 16 CPU Intel Ice Lake;
  2. Kaggle GPU accelerated environment (P100);
  3. Персональные компьютеры (ПК) членов команды.

В связи с этим, для воспроизведения полного пайплайна рекомендуется убедиться, что ресурсов системы достаточно. Так как, например, во время генерации признаков на тренировочном датасете может сильно скакать потребление памяти и, следовательно, объем затраченного времени.

Команда приносит свои извинения за то, что код не идеально оптимизирован, и занимает так много времени для генерации признаков для тренировки

Чтобы воспроизвести решение:

  1. Создайте виртуальное окружение, активируйте его и установите необходимые библиотеки

        python -m venv venv
        source venv/bin/cativate
        pip install -r requirements.txt
  2. Убедитесь, что в репозитории находится папка data, имеющая следующую структуру:

    /project-root-folder
    ├── data
    │   ├── train
    │   │   ├── train.parquet
    │   │   ├── attributes.parquet
    │   │   ├── text_and_bert.parquet
    │   │   ├── resnet.parquet
    │   ├── test
    │   │   ├── test.parquet
    │   │   ├── attributes_test.parquet
    │   │   ├── text_and_bert_test.parquet
    │   │   ├── resnet_test.parquet
    
  3. Запустите файл generate_features_train.py

    1. Запустится генерация признаков на основе тренировочных данных (Файл generate_features_train.py, вызовет последовательно файлы data_preprocessing.py и feature_generation.py)
    2. Полученные паркеты с данными будут сохранены в data/train/.
  4. Запустите файл bert_training.py

    1. Запустится обучение open_source моделей
    2. Веса моделей будут сохранены в models/BERT/
  5. Запустите файл train_boosting_models.py

    1. Запустится скрипт обучения моделей градиентного бустинга на основе ранее полученных паркетов
    2. Полученные модели будут сохранены в models/CATBOOST (общая модель) и в models/CATBOOST/categories (модели для категорий)
  6. Запустите файл make_submission.py

    1. В папке data будет создан файл submission.csv, содержаший предсказания вероятностей для каждой пары из test.parquet

Прочие файлы и папки, примечания

  1. Для инференса через систему CI/CD веса моделей бустинга пушились прямо в репо, веса "тяжелых" моделей и обученные векторизаторы скачивались во время сборки docker контейнера. В связи с этим, для инференса можно скачать необходимые веса и модели напрямую. Также для локального инференса open_source моделей необходимо или скачать их базовые pretrained версии вручную по ссылкам, либо использовать команды:
    huggingface-cli download cointegrated/rubert-tiny2 --local-dir='./models/basemodel/rubert' && \ 
    huggingface-cli download distilbert-base-multilingual-cased --local-dir='./models/basemodel/distilbert'

Если команда выдает ошибку, то установите huggingface-cli

    pip install huggingface-hub
  1. Папка notebooks содержит ноутубки, которые могут содержать куски кода для обучения признаков и/или моделей, которые не вошли в итоговое рещение. Они прикладываются исключительно с целью ознакомления и, скорее всего, могут содержать ошибки:

Запуск через докер-контейнер

Запустить решение возможно используя функционал docker. Для того, чтобы собрать образ решения выполните

docker build . -t matching_object

После сборки контейнера вы можете запустить инференс используя команду

docker run -it --network none --shm-size 2G --name matching_object -v ./data:/app/data matching_object python make_submission.py

Также внутри докер контейнера есть возможность запускать другие .py файлы решения, используя, соответственно

docker run -it --network none --shm-size 2G --name matching_object -v ./data:/app/data matching_object python {sciptname.py}

Однако, в виду того, что при сборке контейнера скачиваются все веса и библиотеки, запуск может занимать много времени.

About

ML-model that determines by names, attributes and pictures whether two products are the same

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Jupyter Notebook 95.4%
  • Python 4.5%
  • Other 0.1%