/vk-graphs-prep

Материалы, собранные и написанные при подготовке к хакатону. Здесь много ссылок на полезные материалы и кода, пользуйтесь

Primary LanguageJupyter Notebook

Материалы к хакатону

Установка зависимостей

Если вы не используете conda, то вам придется. Перед непосредственным созданием среды вам нужно залезть в файл environment.yml и отредактировать в нем следующие строчки:

- cudatoolkit=11.6 -> cudatoolkit=??
- -f https://data.pyg.org/whl/torch-1.12.0+cu116.html -> -f ???

Строчки редактриуется в соотвествии с подходящей для вас версии куды. Конкретные значения для подстановки можно узнать на сайтах Pytorch и PyG.

Как поддерживаемую версию cuda?

С помощью вот этой команды (информация в шапке таблицы):

nvidia-smi

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

После редактирования файла envrionment.yml используйте следующую команду, что создать новую среду из файла конфигурации:

conda env create -f environment.yml

После этого у вас появится среда ml-graphs, хранящая все необходимые зависимости.

Общая постановка задачи

Участникам хакатона предстоит спрогнозировать склонность пользователя VK к благотворительной деятельности.

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

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

Четкая постановка

//

ХочуВсеЗнать

Обязательно прочитать

Getting Deeper

База статей по всему и вся: https://github.com/thunlp/GNNPapers

Библиотеки, инструменты

  1. PyG (PyTorch Geometric) - основной фреймворк для обучения на графах
  2. NetworkX - библиотека для визуализации графов
  3. TorchMetrics - удобная библиотека с кучей реализаций стандартных метрик

Что мы вообще будем делать

Краткое изложение ориентировочного плана действий

  1. Загрузка и предобработка данных - здесь могут возникуть любые форматы и данные любой степени грязности (а могут и не возникнуть).
    • Какие данные являются лишними для поставленной задачи?
    • Как работать с пропусками в данных?
    • Как превратить .csv/.json/.xyz в объект Dataset?
  2. Анализ данных, выдвижение гипотез, еще предобработка - здесь важно сделать правильные предположения относительно применимых методов решения
  3. Построение модели и пайплайна обучения - тривиальная часть, но нужно много кода.
  4. Обучение => Тюнинг => Обучение => Тюнинг... - долго, нудно, борьба за +1e-5 в качестве, возможно круто будет применить что-то вроде GraphGym (а может это и слишком)
  5. Упаковка модели и анализ (Explainatory AI, см. пункт про анализ)
  6. Презентация - просто рассказать краткую историю решения + анализ результатов

Датасеты для тренировки

Модели стоит протестировать на различных датасетах, получив информацию о их результативности в зависимости от данных.

  • Генируемые данные - в качестве параметра name указывать "PATTERN" или "CLUSTER", данные моделируют взаимосвязь между некоторыми сообществами в социаьлных сетях. Может быть актуально, т.к. люди, занимающиеся благотворительностью, часто занимаются ей в рамках каких-то некоммерческих объединений.
  • GitHub Social Network - пользователи гитхаба, поставившие звездочку каким-то репозиториям и имеющие связи между друг другом (взаимные подпсики). Требуется научиться предсказывать, к какому типу относится разраб - веб или ML. (Тоже есть в PyG, вот тут)
  • Twitch Social Network - пользователи платформы Twitch, связи соответствуют взаимным подпискам (ненаправленные). Фичи у пользователей - просматриваемые игры, локация и привычки (?). Датасет многозадачный, бинарная классификация на нем сводится к предсказанию оттока пользователя (churn prediction), но могу быть неправ (тоже есть в PyG, вот тут)

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

Анализ результатов

sources: Explainability in Graph Neural Networks: An Experimental Survey, GNNExplainer: Generating Explanations for Graph Neural Networks

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

Вообще есть целая область, называемая Exaplainable AI, главной задачей которой является извлечение скрытой информации из моделей, анализ принципов ее работы и "мышления". Это важно, т.к. в сыром виде модели глубокого обучения представляют собой черные ящики, волшебным образом выдающие результат.

В PyG реализован класс специально для объяснения предсказаний любых графовых моделей: GNNExplainer. В документации есть код с примером использования, будет круто использовать его для обоснования работы модели.

Факультативное чтиво

Очень много и подробно. Не для всех, но потенциально нужно.

  1. Курс от Standford про GNN
  2. Network Science - книга про графы/сети и их применение - здесь нет ничего про графовые модели обучения, но много чего просто интересного про графы, короче знание предметной области