Эта библиотека содержит инструменты для работы с графовыми нейронными сетями, а также вспомогательные модули и алгоритмы, которые, в совокупности, позволяют создавать, обучать и использовать модели, слои и наборы данных, работающие с данными в графовом представлении.
Библиотека находится в стадии активного развития с конечной целью решения задач прогнозной аналитики в области анализа социальных сетей и построения карьерных траекторий для студентов и выпускников университетов, а также для компаний, заинтересованных в развитии своих сотрудников и подборе персонала.
Для этого уже на текущем этапе разработки, помимо базовых моделей графовых нейронных сетей, примеров и инструментов для создания унаследованных решений, в библиотеку включен анализатор связей социальной сети "ВКонтакте" и биржи труда HeadHunter, а также алгоритмы поиска кратчайшего пути во взвешенном графе с различными типами соединений и вершин.
Все это вместе взятое дает исследователям и разработчикам основу для создания собственных решений в области графовых нейронных сетей для решения сложных социальных и технических проблем.
Библиотека содержит определения для работы с datasets, созданными в соответствии с принципами наследования от базового класса. Базовый класс набора данных задается в соответствующей части модуля набора данных. Библиотека также определяет частные реализации наборов данных (социальные сети) для разработки примеров и тестов (в частности, Cora dataset для примеров с анализом цитирования сообщений в социальных сетях), а также пример датасета для индустриального применения в плане поиска вакансий SfeduDataset и специальный датасет для загрузки данных из графовой базы данных ArangoDataset.
Для загрузки наборов данных с сервера было решено реализовать специальный SingleLoader для реализованных элементов графовой нейронной сети и несколько примеров. Кроме того, добавлен BatchLoader для пакетной загрузки данных (butch) и DisjointLoader для раздельной.
Основная работа графовой нейронной сети определяется базовым классом Graph, который является контейнером для данных. Контейнер работает со следующими параметрами:
x
: для представления особенностей узлов,a
: для представления матрицы смежности,e
: для представления атрибутов ребер графа,y
: для представления узлов или меток графа.
Дополнительно реализован алгоритм нахождения кратчайшего расстояния Беллмана-Форда, представленный соответствующим классом и измененным алгоритмом.
Для основной работы библиотеки были созданы следующие слои нейронной сети:
- Сверточный слой Чебышева для графовой нейронной сети.
- Основной (базовый) класс для сверточного слоя Графическая нейронная сеть.
- Сверточный слой графовой нейронной сети.
- Специальный сверточный слой с пропусками во время обучения.
- Основной (базовый) класс слоя для GlobalPool.
- Глобальная сумма является реализацией базового класса GlobalPoolLayer.
- Основной слой с алгоритмом GraphSAGE.
Для реализации алгоритма продвижения информации по графовой нейронной сети был реализован алгоритм с помощью Базового класса для передачи сообщений в графовой нейронной сети (для алгоритма GraphSage).
Основная модель создана для сверточной нейронной сети, дополняя модель Tensorflow/Karas и специальная модель для индустриального примера SfeduModel.
Для базовой функции передачи сообщений Generic Message Passing
, а также для вспомогательной библиотеки функций были реализованы модели рассеяния:
- scatter_max: Уменьшает количество сообщений.
- scatter_mean: Усредняет сообщения.
- scatter_min: Уменьшает количество сообщений.
- scatter_prod: Умножает сообщения.
- сумма рассеяния: Суммирует сообщения.
Определяется базовым классом преобразования LayerPreprocess. Он реализует функцию предварительной обработки в сверточном слое для матрицы смежности.
Библиотека обладает достаточным количеством утилит и вспомогательных функций, необходимых для работы:
- add_self_loops: Добавляет циклы к заданной матрице смежности.
- batch_generator: Перебирает данные с заданным количеством эпох, возвращает генератор python по одному пакету за раз.
- chebyshev_filter: Реализация фильтра Чебышева для заданной матрицы смежности.
- chebyshev_polynomial: Вычисляет полиномы Чебышева от X до порядка k.
- check_dtypes: Проверка типа набора данных.
- check_dtypes_decorator: Декоратор для автоматической проверки типа.
- collate_labels_disjoint: Определяет соответствие списка меток для непересекающегося (disjoint) режима.
- degree_power: Вычисляет отклонение.
- deserialize_kwarg: Десериализация аргументов.
- deserialize_scatter: Десериализация рассеяния (
scatter
) - dot_production: Вычисляет умножение
a @ b
дляa
иb
одного ранга (оба 2-го или оба 3-го ранга). - gcn_filter: Фильтры для графа.
- get_spec: Возвращает спецификацию (описание или метаданные) для тензора типа
tensorflow.Tensor
. - idx_to_mask: Возвращает маску по индексам.
- load_binary_file: Загружает значение из файла, сериализованного модулем pickle.
- mask_to_float_weights: Преобразует битовую маску в простые веса для вычисления средних потерь по узлам сети.
- mask_to_simple_weights: Преобразует битовую маску в простые веса для вычисления средних потерь по узлам сети.
- dot_production_in_mixed_mode: Вычисляет эквивалент функции
tf.einsum('ij, bjk->bik', a, b)
. - dot_production_modal: Вычисляет матричное умножение для
a
иb
. - normalized_adjacency_matrix: Нормализует заданную матрицу смежности.
- normalized_laplacian: Вычисляет нормализованный лапласиан заданной матрицы смежности.
- preprocess_features: Вычислительные возможности.
- read_file: Чтение файла с данными.
- rescale_laplacian лапласиан: Масштабирует собственные значения Лапласа до
[-1,1]
. - reshape: Изменяет форму в соответствии с формой, автоматически справляясь с разрежением.
- serialize_kwarg: Сериализация атрибутов.
- serialize_scatter: Сериализация разброса.
- shuffle_inplace: Перемешивание
np.random.shuffle
. - sparse_matrices_to_sparse_tensors: Преобразование разреженных матриц Scipy в тензор.
- sparse_matrix_to_sparse_tensor: Преобразует разреженную матрицу Scipy в разреженный тензор.
- convert_node_objects_to_disjoint: Преобразует списки узловых объектов, матриц смежности и граничных объектов в непересекающийся режим.
- to_tensorflow_signature: Преобразует сигнатуру набора данных в сигнатуру тензорного потока.
- transpose: Переносит параметр
a
, автоматически справляясь с разреженностью с помощью перегруженных функций тензорного потока.
Конфигурация библиотеки устанавливает множество файлов в каталоге config.
Основной состав (именованные параметры):
- методы агрегирования,
- свойства и атрибуты,
- константы приложения,
- типы данных,
- наборы данных,
- папки,
- именованные функции,
- инициализаторы,
- модели,
- имена,
- ссылки.
Может быть использован следующим образом.
Настройка envs
cp .env.dist .env
Создать виртуальную среду
virtualenv -p <path_to_python>
источник venv venv/bin/активировать
Установка пакетов
установка
pip install -r requirements.txt
Если вы измените некоторые пакеты, вы можете заморозить это с помощью команды
pip freeze > requirements.txt
Определяет генератор набора данных вакансий /ключевых слов из HH.ru .
Коллекция простых скриптов для обхода вакансий с сайта HH.ru через API для генерации CSV-файла по полям данных, таким как: имя, описание и ключевые навыки.
Это помогает сгенерировать CSV-файл в следующем формате: ``csv "$name1 & $description1","ключевые навыки1" "$name2 & $description2","ключевые навыки2" "$name3 & $description3","ключевые навыки3" ...
Скрипты протестированы на python 3.10, но должны работать и на предыдущих версиях.
#### Получение страниц
Измените поле "текст" в `download.py` к твоему:
```py
text = 'НАЗВАНИЕ:Наука о данных'
Затем запустите скрипт
cd ./gns/crawlers/hh
python download.py
Этот скрипт загрузит результаты сохранения из API в папку ./gns/crawlers/docs/pagination
в формате JSON.
На следующем шаге нам нужно загрузить расширенную информацию о вакансиях:
python parse.py
Скрипт вызовет API и сохранит ответы в папку "./gns/crawlers/docs/vacancies".
python generate.py
Результат будет сохранен в папке ./gns/crawlers/docs/csv
.
cd ./gns/crawlers/vk
python main.py <vk_nickname_or_id>
Для автоматизации некоторых задач предоставляется Makefile. Доступные команды:
- install: установка пакетов.
- freeze: фиксация установленных пакетов.
- clear: очистка.
- serve: управление библиотекой:
- автоматическое форматирование,
- автоматическая сортировка импортов,
- проверка типов.
- test: запуск тестов.
Примеры приведены в каталоге examples:
- Тестовый пример для набора данных
Cora
(анализ графf цитирования сообщений в социальных сетях). - Тестовый пример для набора данных
Cora
для сверточного слоя Чебышева (анализ граф цитирования сообщений социальной сети). - Простой тестовый пример для набора данных Cora (анализ графа цитирования сообщений в социальных сетях).
- Примеры нахождения кратчайшего расстояния на графе для алгоритма Беллмана-Форда и модифицированного алгоритма Беллмана-Форда.
- Индустриальный пример подбора вакансий персонала для производства. Тренировка модели на базе данных полученных при помощи класса SfeduDataset, модель представляет из себя GraphSAGE решение, в её задачи входит поиск похожего графа описывающего вакансию на граф описывающий пользователя.
- Индустриальный пример генерации большого графа. Данный пример демонстрирует способ генерации большого графа совместимого с библиотекой GNS при помощи класса TechDataset, в результате работы скрипта создаётся два файла содержащие 249 (полный - jd_data) и 177 (сжатый - jd_data2) вершин (в зависимости от набора исходных данных). Данные берутся из источника https://github.com/ZhongTr0n/JD_Analysis
- Индустриальный пример тренировки модели для класса TechDataset. Это пример тренировки модели с использованием данных полученных при помощи класса TechDataset. Модель представляет из себя стандартную Graph Convolutional Network, в её задачи входит поиск возможных связей между узлами описывающими граф пользователя: карьерная траектория.
- Индустриальный пример ренировки модели Graph Convolutional Network. Пример тренировки модели Graph Convolutional Network с усложнённой логикой проверки и с применением продвинутых методов использования штатного инструментария библиотеки GNS. Пример также демонстрирует процедуру загрузки датасета, его применение на уровне модели, далее происходит тренировка после чего отображается точность полученной модели. Основная задача модели это поиск возможных связей между узлами описывающими граф пользователя: карьерная траектория.
- Индустриальный пример генерации серии графов. Данный пример демонстрирует способ генерации серии небольших графов совместимых с библиотекой GNS при помощи класса SfeduDataset, из неё выбираются графы описывающие пользователей и вакансии, после чего происходит преобразование данных в необходимый формат.
Для визуализации примеров данные загружаются в ArangoDB, для этого был использован docker-compose файл с монтированием раздела.
Визуализация полного графа технологий.
Визуализация графа компетенций PHP-разработчика.
Визуализация графа компетенций devops-разработчика.
Визуализация графа компетенций JS-разработчика.