Данный репозиторий содержит базовое решение для задачи NER (Named Entity Recognition), подготовленное в рамках хакатона.
Участникам необходимо разработать решение для задачи извлечения именованных сущностей (NER) из поисковых запросов. Решением является модель, интегрированная в веб-сервис, обеспечивающий ответ на входящие запросы не дольше одной секунды.
Распознаваемые сущности:
- TYPE — категория товара (молоко, хлеб, вода, чипсы и т.п.)
- BRAND — бренд (Coca-Cola, Простоквашино, Lays и др.)
- VOLUME — объём/вес/количество (0.5 л, 1 л, 200 г, 10 шт.)
- PERCENT — процент (2.5%, 15%)
Формат BIO-разметки:
- B-ENTITY — начало сущности,
- I-ENTITY — продолжение сущности,
- O — не сущность.
Оценка В этом хакатоне основной метрикой является macro-averaged F1-score по BIO-разметке для всех типов сущностей (TYPE, BRAND, VOLUME, PERCENT).
Определения:
- True Positive (TP) — сущность, которая выделена моделью, причем выделена верно (начало и конец сущности, а также тип сущности совпадает с эталонной разметкой).
- False Positive (FP) — сущность, предсказанная моделью, но отсутствующая в эталонной разметке (O), либо не совпадающая с сущностью эталонной разметки.
- False Negative (FN) — сущность, которая есть в эталонной разметке, но не была распознана моделью.
Для каждой сущности считаются:
- Precision=TP/ (FP + TP)
- Recall=TP/(FN+TP)
- F1=2*(Precision*Recall) / (Precision+Recall)
Macro-F1 сначала вычисляет F1-score для каждого типа сущностей (TYPE, BRAND, VOLUME, PERCENT), а затем усредняет результаты.
Ограничения:
- Время отклика веб-сервиса для одного запроса не превышает 1 секунду.
- Веб-сервис должен непрерывно работать с момента отправки endpoint в tg бота до конца проверки.
- Сервис должен быть доступен по публичному URL без авторизации.
Участники могут:
- Использовать публично доступные внешние данные.
- Использовать любые архитектуры моделей.
- Использовать готовые предобученные языковые модели.
Важно! Запрещается использовать ручные словари, собранные специально под задачу, готовых коммерческих NER-API, любых закрытых или приватных датасетов, которые не доступны всем участникам.
Бейзлайн реализован на FastAPI и демонстрирует простейший подход на основе правил (rule-based):
- слова, начинающиеся с кириллицы → TYPE
- слова, начинающиеся с латиницы → BRAND
- токены, начинающиеся с цифры → VOLUME
Результатом работы является BIO-разметка входящего запроса.
Чтобы ваше решение было оценено и попало в лидерборд, выполните шаги:
- Разверните веб сервис (инструкция).
- Зарегистрируйте команду в Telegram-боте.
- Отправьте в бот URL вашего сервиса.
- После нажатия
Оценить решение
в Telegram-боте начнется автоматическая проверка и измерение качества модели.
Результаты будут отображены в лидерборде.