Раскрытие потенциала Big Data увлекательный мир графового обучения

Раскрытие потенциала Big Data увлекательный мир графового обучения

Преобразование неиспользуемых данных в стратегический актив для долгосрочной конкурентоспособности с помощью глубокого обучения.

Фото Натана Андерсона на Unsplash

Крупные компании генерируют и собирают огромное количество данных, и 90% из них были созданы в последние годы. Однако, как вы могли заметить, 73% этих данных остаются неиспользованными [1]. Однако, как вы знаете, данные являются золотой жилой для компаний, работающих с большими данными.

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

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

Почему эти данные остаются неиспользованными?

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

Визуализация причин неиспользования данных. (создано Bing Image Creator)

Есть ли решение для автоматической документации новых данных?

Если вы не знакомы с крупными предприятиями, не проблема – я раньше тоже не был. Интересная концепция в таких средах – использование больших данных, в частности HDFS (Hadoop Distributed File System), который представляет собой кластер, предназначенный для консолидации всех данных компании. В этом огромном пуле данных вы можете найти структурированные данные, а внутри этих структурированных данных ссылки на столбцы Hive. Некоторые из этих столбцов используются для создания дополнительных таблиц и, вероятно, служат источниками для различных наборов данных. Компании хранят информацию между некоторыми таблицами с помощью линеажа.

У этих столбцов также есть различные характеристики (домен, тип, имя, дата, владелец и т. д.). Целью проекта было документирование данных, известных как физические данные, с помощью бизнес-данных.

Различение физических и бизнес-данных:

Проще говоря, физические данные – это название столбца в таблице, а бизнес-данные – это использование этого столбца.

Например, таблица с названием “Friends” содержит столбцы (персонаж, зарплата, адрес). Наши физические данные – это персонаж, зарплата и адрес. Наши бизнес-данные – это, например,

  • Для “Персонажа” -> Имя персонажа
  • Для “Зарплаты” -> Сумма зарплаты
  • Для “Адреса” -> Местонахождение человека

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

«Во время моей финальной стажировки я вместе с моей командой стажеров реализовал решение Big Data / Graph Learning для документации этих данных.

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

Нам предстояло классифицировать 830 меток и не так много строк. К счастью, сила графового обучения пришла на помощь. Даю вам возможность прочитать…

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

Чтобы помочь вам понять мой путь, контур этой статьи содержит:

  • Получение данных: поиск необходимых данных для создания графиков
  • Моделирование на основе графов с помощью GSage
  • Эффективные стратегии развертывания

Получение данных

Как я уже упоминал ранее, данные часто хранятся в столбцах Hive. Если вы еще не знали, эти данные хранятся в больших контейнерах. Мы извлекаем, преобразуем и загружаем эти данные с помощью техник, известных как ETL.

Какие данные мне понадобились?

  • Физические данные и их характеристики (домен, имя, тип данных).
  • Линейность (связи между физическими данными, если они прошли общие преобразования).
  • Отображение «некоторых физических данных, связанных с бизнес-данными», чтобы затем «позволить» алгоритму работать самостоятельно.

1. Характеристики / Особенности получаются непосредственно при хранении данных; они обязательны сразу после хранения данных. Например (зависит от вашего случая):

Пример основных особенностей (сделан автором)

Что касается особенностей, основываясь на опыте, мы решили использовать хеширующую функцию на трех столбцах.

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

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

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

Представьте себе большие данные и все эти данные. В некоторых проектах мы используем данные из таблицы и применяем преобразование через задачу (Spark).

Визуализация продуктовой линейности Atlas, с сайта Atlas, ССЫЛКА

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

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

Совет по машинному обучению, из моего собственного опыта:

Цитируя г-на Андрюа Нга, в классическом машинном обучении есть такое понятие, как жизненный цикл алгоритма. Мы часто думаем об алгоритме, усложняем его, и не просто используем хорошую старую линейную регрессию (я пробовал, это не работает). В этом жизненном цикле есть все стадии предварительной обработки, моделирования и мониторинга… но самое важное – это фокусировка на данных.

Это ошибка, которую мы часто допускаем; мы принимаем ее как должное и начинаем анализировать данные. Мы делаем выводы из набора данных иногда, не задавая вопросов его актуальности. Не забывайте о фокусировке на данных, друзья; это может улучшить вашу производительность или даже привести к изменению проекта 🙂

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

График (networkx) распределения нашего набора данных в графике (сделан автором)

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

В математике мы обозначаем граф как G, G(N, V, f). N представляет узлы, V – вершины (ребра), а f представляет характеристики. Предположим, что все три множества не являются пустыми.

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

Говоря о происхождении, оно частично служит ребрами с уже существующими связями через сопоставление и идентификаторы. Нам пришлось извлекать его через процесс ETL, используя API Apache Atlas.

Вы можете увидеть, как проблема больших данных после создания фундамента становится легкой для понимания, но более сложной для реализации, особенно для молодого стажера…

” Ninja cartoon on a computer ” (сгенерировано Dall.E 3)

Моделирование на основе графа с использованием GSage

Основы обучения графам

Этот раздел будет посвящен объяснению GSage и объяснению его выбора как математически, так и эмпирически.

До этой стажировки я не был привыкать работать с графами. Вот почему я приобрел книгу [2], которую я включил в описание, так как она очень помогла мне понять принципы.

Обучение на основе графов: Поднимите данные о графах на новый уровень, применяя техники машинного обучения…

Noté / 5. Retrouvez Graph Machine Learning: Take graph data to the next level by applying machine learning techniques…

www.amazon.fr

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

Другим источником вдохновения был Maxime Labonne [3] за его объяснения GraphSages и Graph Convolutional Networks. Он продемонстрировал большую педагогику и предоставил ясные и понятные примеры, делая эти концепции доступными для тех, кто хочет в них разобраться.

Модель GraphSage

Если этот термин вам не знаком, не волнуйтесь, всего пару месяцев назад я был в вашем положении. Архитектуры, такие как Attention networks и Graph Convolutional Networks, доставили мне несколько кошмаров и, что более важно, не давали мне спать ночью.

Но чтобы не занимать ваш весь день и, особенно, время в пути, я собираюсь упростить алгоритм для вас.

Когда у вас есть встраивания, вот тогда магия может произойти. Но как это все работает, спрашиваете вы?

Schema based on the Scooby-Doo Universe to explain GSage (made by the author).

Тебя знают по компаниям, с которыми ты общаешься” – эту фразу нужно запомнить.

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

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

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

Разница во времени обучения между архитектурой, статьей Максима Лабонна, ссылка

Как вы видели на этом графике, время обучения уменьшается, когда мы используем тот же набор данных на архитектуре GraphSage. GAT (Graph Attention Network) и GCN (Graph Convolutional Network) также являются очень интересными архитектурами графов. Я настоятельно рекомендую вам обратить на них внимание!

Первый раз, когда я запустил этот код, меня поразило то, что обучение 1000 партий на тысячах строк занимает 25 секунд.

Я знаю, что на этом этапе вы заинтересованы в изучении Graph Learning и хотите узнать больше, и мой совет – прочитать эту статью. Отличные примеры, отличные советы).

GraphSAGE: Масштабирование графовых нейронных сетей

Введение в GraphSAGE с использованием PyTorch Geometric

towardsdatascience.com

Поскольку я являюсь читателем VoAGI, я всегда интересуюсь изучением кода в новых статьях, и для вас мы можем реализовать архитектуру GraphSAGE в PyTorch Geometric с помощью слоя SAGEConv.

Давайте создадим сеть с двумя слоями SAGEConv:

  • Первый использует функцию активации ReLU и слой dropout;
  • Второй непосредственно выводит узловые эмбеддинги.

В нашей задаче многоклассовой классификации мы выбрали кросс-энтропийную функцию потерь как основную. Этот выбор обусловлен его пригодностью для задач классификации с несколькими классами. Кроме того, мы включили L2-регуляризацию со значением 0,0005.

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

import torchfrom torch.nn import Linear, Dropoutfrom torch_geometric.nn import SAGEConv, GATv2Conv, GCNConvimport torch.nn.functional as Fclass GraphSAGE(torch.nn.Module):  """GraphSAGE"""  def __init__(self, dim_in, dim_h, dim_out):    super().__init__()    self.sage1 = SAGEConv(dim_in, dim_h)    self.sage2 = SAGEConv(dim_h, dim_out)#830 for my case    self.optimizer = torch.optim.Adam(self.parameters(),                                      lr=0.01,                                      weight_decay=5e-4)  def forward(self, x, edge_index):    h = self.sage1(x, edge_index).relu()    h = F.dropout(h, p=0.5, training=self.training)    h = self.sage2(h, edge_index)    return F.log_softmax(h, dim=1)  def fit(self, data, epochs):    criterion = torch.nn.CrossEntropyLoss()    optimizer = self.optimizer    self.train()    for epoch in range(epochs+1):      total_loss = 0      acc = 0      val_loss = 0      val_acc = 0      # Train on batches      for batch in train_loader:        optimizer.zero_grad()        out = self(batch.x, batch.edge_index)        loss = criterion(out[batch.train_mask], batch.y[batch.train_mask])        total_loss += loss        acc += accuracy(out[batch.train_mask].argmax(dim=1),                         batch.y[batch.train_mask])        loss.backward()        optimizer.step()        # Validation        val_loss += criterion(out[batch.val_mask], batch.y[batch.val_mask])        val_acc += accuracy(out[batch.val_mask].argmax(dim=1),                             batch.y[batch.val_mask])      # Print metrics every 10 epochs      if(epoch % 10 == 0):          print(f'Epoch {epoch:>3} | Train Loss: {total_loss/len(train_loader):.3f} '                f'| Train Acc: {acc/len(train_loader)*100:>6.2f}% | Val Loss: '                f'{val_loss/len(train_loader):.2f} | Val Acc: '                f'{val_acc/len(train_loader)*100:.2f}%')            def accuracy(pred_y, y):    """Calculate accuracy."""    return ((pred_y == y).sum() / len(y)).item()@torch.no_grad()def test(model, data):    """Evaluate the model on test set and print the accuracy score."""    model.eval()    out = model(data.x, data.edge_index)    acc = accuracy(out.argmax(dim=1)[data.test_mask], data.y[data.test_mask])    return acc

Развертывание модели:

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

Три логотипа от Google

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

Mirantis: Инфраструктура нашего проекта была построена и размещена на облачной платформе Mirantis. Mirantis известен своими надежными, масштабируемыми и надежными облачными решениями, предлагая прочное основание для развертывания нашего проекта.

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

Кроме того, мы хранили наш код машинного обучения в Artifactory компании. Но что такое Artifactory вообще?

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

<p, готовы к использованию для поддержки нашего развертывания через Jenkins.

ET VOILA! Решение было развернуто.

Я много говорил об инфраструктуре, но не так много о машинном обучении и результате, который мы получили.

Результаты:

Доверие к предсказаниям:

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

Как такое возможно?

probabilities = torch.softmax(raw_output, dim = 1) #torch.topk для получения 3-х вероятностей и их индексов для каждого предсказанияtopk_values, topk_indices = torch.topk(probabilities, k = 2, dim = 1)

Сначала я использовал функцию softmax, чтобы сделать выходы сравнимыми, а затем использовал функцию с именем torch.topk. Она возвращает k наибольших элементов заданного входного тензора вдоль указанного измерения.

Так что, вернемся к первому предсказанию, вот наша распределение после тренировки. Скажу вам, ребята и девчата, это замечательно!

График (из matplotlib) вероятностей вывода модели, первое предсказание (сделано автором)

Точность, потери на тренировке / тестировании / валидации.

Я не буду учить вас, что такое точность и потери в машинном обучении, я предполагаю, что вы все профессионалы… (спросите у чатгпт, если вы не уверены, нет ничего стыдного). На тренировке, на разных масштабах, вы можете увидеть сходимость на кривых, что замечательно и показывает стабильное обучение.

График (matplotlib) точности и потерь. (сделан автором)

t-SNE :

t-SNE (t-Distributed Stochastic Neighbor Embedding) – это техника снижения размерности, используемая для визуализации и изучения многомерных данных путем сохранения сходства между парами точек данных в пространстве меньшей размерности.

Другими словами, представьте случайное распределение до обучения:

Распределение данных перед обучением, (сделан автором)

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

Распределение данных после обучения, (сделан автором)

Заключение:

Нашей целью было прогнозирование деловых данных на основе физических данных (и мы справились с этим). С радостью сообщаю вам, что алгоритм теперь находится в производстве и привлекает новых пользователей на будущее.

Хотя я не могу предоставить всю решение в силу собственных причин, я уверен, что у вас есть все необходимые детали или вы хорошо подготовлены, чтобы реализовать его самостоятельно.

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

Если у вас есть вопросы, пожалуйста, не стесняйтесь обращаться ко мне. Смело свяжитесь со мной, и мы можем провести подробное обсуждение об этом.

В случае, если я не увижу вас, добрый день, добрый вечер и спокойной ночи!

Вы все поняли?

Как бы сказал Чендлер Бинг:

“Всегда лучше лгать, чем вести сложное обсуждение”

Не забудьте поставить лайк и поделиться!

Ссылки и ресурсы

[1] Inc (2018), Веб-статья от Inc

[2] Графическое машинное обучение: Помощь в анализе графовых данных с помощью техник и алгоритмов машинного обучения (2021), Клаудио Стамиле

[3] GSage, Масштабирование графовой нейронной сети, (2021), Максим Лабонн

Источники изображений