Конкурс на Кластеризацию Данных 2021

В рамках конкурса участникам предлагается создать библиотеку на C/C++ для определения языка и тематики каналов. Первый этап продлится до 23:50 14 февраля (дубайское время) и открыт для всех желающих.

Задания конкурса

  1. Определение языка. Алгоритм должен определить язык канала по его названию, описанию и текстам нескольких сообщений в канале – и вернуть двухбуквенный ISO-код языка (или “other”, если у языка нет двухбуквенного кода).

  2. Определение тематики канала. Для русско- и англоязычных каналов алгоритм должен определить относительный вес для каждой выделенной тематики. Список возможных тематик представлен ниже:

  • Art & Design
  • Bets & Gambling
  • Books
  • Business & Entrepreneurship
  • Cars & Other Vehicles
  • Celebrities & Lifestyle
  • Cryptocurrencies
  • Culture & Events
  • Curious Facts
  • Directories of Channels & Bots
  • Economy & Finance
  • Education
  • Erotic Content
  • Fashion & Beauty
  • Fitness
  • Food & Cooking
  • Foreign Languages
  • Health & Medicine
  • History
  • Hobbies & Activities
  • Home & Architecture
  • Humor & Memes
  • Investments
  • Job Listings
  • Kids & Parenting
  • Marketing & PR
  • Motivation & Self-Development
  • Movies
  • Music
  • Offers & Promotions
  • Pets
  • Politics & Incidents
  • Psychology & Relationships
  • Real Estate
  • Recreation & Entertainment
  • Religion & Spirituality
  • Science
  • Sports
  • Technology & Internet
  • Travel & Tourism
  • Video Games
  • Other

Исходные данные

Участникам предлагается тестовый набор данных:

Набор данных представляет из себя текстовый файл, где каждая строка – это данные канала в формате JSON:

{
  title:        "Channel title",
  description:  "Channel description",
  recent_posts: [
    "text #1 of message or caption of media or content of poll etc.",
    "text #2 of message or caption of media or content of poll etc.",
    ...
  ]
}

В ходе конкурса будут периодически публиковаться дополнительные наборы данных.

Для проверки работ будет использоваться набор данных, отличный от тестовых.

Разработка и тестирование

Участникам доступен простейший пример реализации библиотеки libtgcat.tar.gz. В файле tgcat.h описан интерфейс библиотеки, который необходимо реализовать в рамках конкурса. Для сборки библиотеки можно использовать следующий код:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .

Полученный файл библиотеки libtgcat.so можно протестировать на тестовых данных используя тестовый скрипт libtgcat-tester.tar.gz. Для этого нужно скопировать полученный файл libtgcat.so в папку с тестовым скриптом, после чего собирать с помощью cmake стандартным образом:

mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .

Для тестирования библиотеки следует запускать полученный бинарный файл tgcat-tester со следующими параметрами:

tgcat-tester <mode> <input_file> <output_file>

где:

  • <mode>language или category,
  • <input_file> – путь до файла с тестовым набором входных данных,
  • <output_file> – путь до файла с соответствующим набором выходных данных.

Файл с выходными данными представляет из себя текстовый файл, где каждая строка это результат обработки данных канала в формате JSON:

mode=language

{
  "lang_code": "en"
}

mode=category

{
  "lang_code": "en",
  "category": {
    "Art & Design": 0.9,
    "Other": 0.1
  }
}

где:

  • lang_code – ISO 639-1 language code или “other”,
  • category – объект, ключом которого является одна из тематик (см. выше), значением – вес этой тематики.

Пример вызова скрипта:

$ ./tgcat-tester language dc0130-input.txt dc0130-language-output.txt
Processed 50297 queries in 0.026331 seconds
$ ./tgcat-tester category dc0130-input.txt dc0130-category-output.txt
Processed 50297 queries in 0.033010 seconds

Общие требования к работам

  • Библиотека не должна использовать сеть.
  • Библиотека должна отличаться высокой относительной скоростью работы.
  • Использование внешних зависимостей рекомендуется свести к минимуму. Зависимости, которые все же необходимы, нужно перечислить в текстовом файле deb-packages.txt. Они будут установлены перед запуском командой sudo apt-get install ...
  • Библиотека будет тестироваться на серверах с Debian GNU/Linux 10 (buster), x86-64 с 8 ядрами и 16 GB RAM. Обязательно проверьте корректность ее работы на чистой системе перед отправкой работы.
  • На выходе требуется ZIP-файл (максимальный размер файла, который может принять бот, 2 Гб) со следующей структурой:

    submission.zip
      -> src - директория с исходным кодом приложения (обязательно)
      -> libtgcat.so - библиотека (обязательно)
      -> resources - директория с дополнительными файлами, необходимыми для работы библиотеки (используйте относительные пути для доступа к ним) (опционально)
      -> deb-packages.txt - текстовый файл с названиями пакетов внешних зависимостей, разделенных переводом строки (опционально)

Оценка работ

При оценке работ, будет сделан упор на скорость и точность работы алгоритмов. Точность будет иметь наивысший приоритет.

Библиотеки, обрабатывающие каждую 1000 каналов более чем за 60 секунд, рассматриваться не будут.