Ended 22 months ago
15 participants
200 submissions

Финальный этап «Соревнования по структуризации чеков ОФД»

Финальный этап соревнования от Альфа-Банка! Это не будет соревнованием по машинному обучению, так как на последнем этапе вы не будете подбирать гиперпараметры, а будете выбирать данные для разметки, как это происходит на практике, чтобы улучшить свое решение

Перед тем, как участвовать в соревновании, приглашаем вас в трек “NLP in practice”, где мы подробно разбираем все технические этапы, с которыми сталкиваются дата-сайентисты в NLP на практике. Переходите по ссылке, смотрите обучающие видео и участвуйте в квизах по ним!

Обязательные действия для участия в финальном этапе:

  1. До 27 июля 23:59 объединиться в те же команды, что и в первом этапе

Задача

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

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

Данные

Участникам соревнования предоставляются два датасета с чековыми позициями, размеченный и неразмеченный:

  1. В размеченном датасете для каждой чековой позиции указаны нормализованные бренды и товары входящие в нее в исходном виде.
  2. В неразмеченном датасете даны только сами чековые позиции.

Метрика соревнования

Метрика соревнования - (F1_good + 2 * F1_brand) / 3, где F1_good- это метрика F1 на товарах, а F1_brand - это метрика F1 на брендах. Для подсчета F1 мы для считаем две метрики:

  • Precision - доля сущностей из предсказания модели, которые оказались верными (то есть присутствуют в ответе для соответствующих примеров)
  • Recall - доля сущностей в ответах, которые выделила модель

После чего метрика считается по знакомой формуле F1 = 2 / (1 / precision + 1 / recall)

Подробнее о данной модификации F1 для задач, подобных NER, можете прочитать по ссылке (раздел CoNLL).

Этапы соревнования

  1. CSV-соревнование (ПРОШЛО).
    • Сроки проведения: 2 июня 17:00 - 1 июля 23:59
    • Решения принимаются в формате CSV-файлов с ответами на тестовый датасет. Подробнее смотрите в пункте "Проверка решения"
    • В следующий этап проходят топ-20% (но не более 20) участников согласно окончательной таблице лидеров соревнования
  2. Docker-соревнование (ПРОШЛО).
    • Сроки проведения: 2 июля 12:00 - 15 июля 23:59
    • Решения принимаются в формате Docker-контейнеров с инференсом модели. Подробнее смотрите в пункте "Проверка решения"
    • Для подтверждения участия в этом соревновании необходимо до 4 июля 23:59
      • объединиться в те же команды, что и в первом этапе
      • отправить в соревнование решение в виде Docker-контейнера (формат описан в пункте “Проверка решения”) с лучшим решением этапа 1 в тестирующую систему (до этого момента в системе будет тестовый датасет из этапа 1). Участники, чей результат в CSV-соревновании будет сильно отличаться от результата их Docker-контейнера, будут дисквалифицированы. Эти сабмиты не будут учитываться при отборе участников в следующий этап
    • 5 июля лидерборд сброситься, а также в тестирующую систему будет загружена тестовая выборка второго этапа. Отбор будет происходить именно по результатам на новой тестовой выборке
    • В следующий этап проходят топ-10 команд согласно окончательной таблице лидеров соревнования.
  3. Доразметка (ПРОШЛО).
    • Сроки проведения: 16 июля 12:00 - 23 июля 23:59
    • Для получения дополнительной разметки каждая команда дошедшая до данного этапа может выбрать среди неразмеченного датасета не более 3000 примеров и направить их идентификаторы организаторам не позднее 16 июля 23:59 в telegram.
    • Формат запроса: csv-файл c ≤ 3000 идентификаторов (колонка id) из файла train_unsupervised.csv. Пример есть на вкладке данные.
    • Не позднее 23 июля 23:59 организаторы вышлют всем командам, которые запрашивали дополнительную разметку, их размеченные примеры через telegram.
  4. Docker-соревнование (ВЫ НАХОДИТЕСЬ ЗДЕСЬ).
    • Сроки проведения: 24 июля 12:00 - 6 августа 23:59
    • На данном этапе разрешается использовать доразметку полученную на этапе 3
    • Решения принимаются в формате Docker-контейнеров с инференсом модели. Подробнее смотрите в пункте "Проверка решения"
    • Авторы трех решений с наибольшей метрикой на private-части объявляются победителями и делят денежный приз

Проверка решения

Этап 1

Решения принимаются в виде csv-файла с тремя колонками: "id" - уникальный идентификтор, "brand" - бренды содержащиеся в данной чековой позиции, и "good" - товары содержащиеся в данной чековой позиции. Пример сабмита можно найти в файле sample_submission.csv.

Если в чековой позиции содержится больше одного бренда или товара, то нужно указать их через запятую. Промежуточные итоги подводятся на public-части тестовой выборки. Победители и призеры определяются на private-части тестовой выборки.

Этапы 2 и 4

Решения принимаются в виде zip-архива размером не более 5Gb, имеющего структуру:

  • metadata.json
  • user_file_1
  • user_file_2
  • user_file_n

В файле metadata.json должны быть два поля:

  • image - публичный образ в DockerHub, например “xterrafunny/baseline-nlp-in-practice:latest”
  • entry_point - команда для запуска в контейнере, например “python run.py”

Решение запускается в Docker-контейнере, указанном в metadata.json. На вход в entry_point подаются:

  • --dataset DATASET_PATH - путь к датасету
  • --output OUTPUT_PATH - путь для сохранения предсказаний модели

Пример подаваемых аргументов: --dataset ./dataset.csv --output ./pred.csv

Примеры Dockerfile'а и архива с решением вы можете найти на вкладке Данные

Ресурсы для образа:

  • 8 vCPU
  • 96Gb RAM
  • Nvidia V100, 32Gb
  • 10Gb дискового пространства
  • Время на исполнение - 45 минут
    • 5 минут на check - 10 примеров, не учитывается в метрике
    • 20 минут на public - 5000 примеров (2500 до 4 июля включительно)
    • 20 минут на private - 5000 примеров (2500 до 4 июля включительно)

Предсказания модели должны представлять собой csv-файл с тремя колонками: "id" - уникальный идентификтор, "brand" - бренды содержащиеся в данной чековой позиции, и "good" - товары содержащиеся в данной чековой позиции. Пример предсказаний можно найти в файле sample_submission.csv. Если в чековой позиции содержится больше одного бренда или товара, то нужно указать их через запятую.

Промежуточные итоги подводятся на public-части тестовой выборки. Победители и призеры определяются на private-части тестовой выборки. И промежуточную, и окончательную таблицу лидеров текущего этапа можно найти во вкладке Таблица лидеров.

Использование внешней разметки

Запрещается использовать полученную вручную разметку, кроме предоставленной организаторами в датасетах и в рамках процесса доразметки, в выборках для модели, а также в посылках. Организаторы имеют право запросить Docker-контейнер с обучением и инференсом модели для подтверждения честности полученных результатов.

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

Базовые решения и полезные функции

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

Призовой фонд

Призовой фонд разделят авторы 3 решений с наибольшей метрикой на private-части тестовой выборки на этапе 4

  • 1 место – 450 000 рублей
  • 2 место – 250 000 рублей
  • 3 место – 100 000 рублей

Для получения денежных призов победителям и призерам соревнования необходимо прислать свое решение в виде Docker-контейнера, содержащего код для обучения и инференса лучшей модели на языке Python.

Our website uses cookies, including web analytics services. By using the website, you consent to the processing of personal data using cookies. You can find out more about the processing of personal data in the Privacy policy