Практическое руководство. Прогнозирование связи с использованием графика знаний и геометрии PyTorch

Прошлое, настоящее и будущее построения GNN с помощью TypeDB

Что такое прогнозирование ссылок и почему важен контекст?

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

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

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

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

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

В этой статье мы объявляем о новом выпуске с совершенно новой архитектурой для построения графовых нейронных сетей (GNN) с помощью TypeDB, читайте об этом и о том, как мы к этому пришли!

Машинное обучение с графом знаний раньше было сложным

Мы впервые начали исследовать машинное обучение для графов знаний в Vaticle еще в 2018 году. Тогда пространство выглядело совсем по-другому, только ранние работы заложили основы того, как думать об обучении на графах. Естественно, первое внимание в литературе уделялось однородным (нетипизированным) данным. Наиболее распространенным примером было предсказание связи новых белок-белковых взаимодействий по существующему набору данных. База данных TypeDB по определению содержит строго типизированные гетерогенные данные, и мы хотим использовать это. Поэтому нам нужно было выйти за рамки современного уровня техники того времени.

Мы начали самостоятельно внедрять GraphSAGE группы Stanford SNAP для прогнозирования ссылок на разнородных данных. Это работало и выглядело многообещающе (см. презентацию здесь), но не было настоящим подходом нативного графа, поскольку он использует выборку по соседству, поэтому направление казалось неправильным. Затем появились Relational Inductive Biases от DeepMind и сопутствующая библиотека: graph_nets. Это было первое правильное обучение на основе графов, которое мы видели, использующее всенаправленную передачу сообщений для построения представлений узлов и ребер. Это было появлением нативного графического обучения. Нам это нравилось, поэтому мы строили вместе с ним.

Мы использовали graph_nets и TensorFlow, чтобы создать специально созданную модель для TypeDB, которая могла бы потреблять данные непосредственно в том виде, в каком они представлены в TypeDB, и выполнять прогнозирование ссылок. Учитывая характер добавленных нами инноваций, мы придумали модель как Сверточная сеть графов знаний (KGCN) (презентация здесь).

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

Все это звучит великолепно: в чем может быть проблема со специальной моделью предсказания ссылок для TypeDB? Проблема в том, что это была очень специфическая реализация, которой не хватало компонуемости и гибкости для пользователей, чтобы создавать модели для своих конкретных целей. По сути, у нас не было пропускной способности, чтобы превратить это в полноценную библиотеку. Многие пользователи хотели поэкспериментировать с методами для нейронных сетей графов (GNN) и сверточных сетей графов (GCN), о которых они читали в последнем наборе статей по изучению графов, будь то архитектура внимания или преобразования. Мы застряли, не имея возможности помочь.

Пространство обучения графам эволюционировало

С 2018 года пространство для обучения на основе графов буквально взорвалось, поскольку первопроходцы осознали потенциал создания моделей, которые могут учиться на основе богатого контекста. На первый план вышло название PyTorch Geometric. У нас было много пользователей, запрашивающих доступ к такому фреймворку. Почему? Чтобы иметь возможность взять один из многих алгоритмов из исследовательских работ, которые поставляются готовыми к использованию, и быстро использовать их в своих данных TypeDB.

Это вполне логично: зачем изобретать велосипед, если смысл существования PyTorch Geometric (PyG) состоит в том, чтобы идти в ногу с последними и лучшими тенденциями обучения графам в литературе и реализовывать эти алгоритмы в качестве строительных блоков, чтобы пользователи могли выбирать и -mix для гибкого создания собственного вкуса модели.

Естественно, в этой области также было сильное агентство для создания моделей, использующих разнородные данные. Это также соответствует основной директиве нашего KGCN — полностью использовать типовые этикетки.

Действительно, PyTorch Geometric поддерживает широкий спектр современных слоев нейронной сети, включая сверточные слои для разнородных данных, таких как:

  • HGTConv, оператор преобразования гетерогенных графов
  • HEATConv, оператор внимания гетерогенного графа с расширенными границами
  • HANConv, оператор внимания гетерогенного графа

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

Эта компонуемая методология явно очень желательна, так как же мы можем использовать ее с TypeDB?

Интеграция TypeDB с платформами Graph ML

Стало совершенно ясно, что самая полезная работа, которую мы могли бы сделать для пользователей TypeDB, — это построить мост между TypeDB и популярными фреймворками для графических данных. Это позволяет пользователям TypeDB быстро приступить к работе и оценить ценность, которую они могут получить от TypeDB для приложений машинного обучения (помимо всех других причин использования TypeDB). Мы рады сообщить, что TypeDB-ML 0.3 уже вышел! Репозиторий был переработан, чтобы обеспечить интеграцию с некоторыми популярными платформами. Следуйте README для получения инструкций по установке.

PyTorch Геометрический

Теперь у нас есть интеграция с PyTorch Geometric! У нас есть основные компоненты для:

  • Ленивая передача данных из TypeDB (через запросы TypeQL) в объекты PyG Data и HeteroData (объекты графического представления PyG),
  • Кодируйте функции из информации о типе, импортированной из TypeDB, и мы предоставляем кодировщики для значений атрибутов (пользовательские кодировщики могут быть добавлены тривиально).

Больше подробностей в readme.

Рабочий пример
Важно, что мы создали полный пример для прогнозирования ссылок с использованием TypeDB, TypeDB-ML и PyTorch Geometric. Он использует сеть Heterogeneous Graph Transformer для прогнозирования ссылок, согласно этой статье. Подход способен делать прогнозы ссылок по всем возможным допустимым ссылкам в предоставленных данных. Архитектура модели настроена на прогнозирование с использованием точечного произведения представления двух понятий, участвующих в ссылке. Это означает, что мы можем эффективно прогнозировать ссылки даже в плотных сетях, где количество возможных действительных ссылок очень велико.

Подход способен делать прогнозы ссылок по всем возможным допустимым ссылкам в предоставленных данных.

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

СетьX

TypeDB-ML также интегрирует NetworkX для представления графа в памяти. NetworkX поставляется с огромным набором алгоритмов графов общего назначения. Эти алгоритмы являются отличным дополнением к самой TypeDB, которая фокусируется на сопоставлении шаблонов с логическими рассуждениями. Это означает, что если вам действительно нужен алгоритм, у вас есть возможность экспортировать подграф в NetworkX и запустить обработку там, в памяти. Естественно, это имеет ограничения по масштабированию и не является полной заменой OLAP.

Закат KGCN и имя KGLIB

Следующим естественным шагом в нашей поддержке машинного обучения для TypeDB было добавление поддержки PyTorch Geometric и NetworkX. Мы переименовали репозиторий с KGLIB на TypeDB-ML, чтобы превратить его в библиотеку интеграции машинного обучения, а также прощаемся с нашей собственной моделью KGCN. что с помощью интеграций построить модель предсказания ссылок, более эффективную, чем KGCN (опять же, см. пример), довольно просто!

Что мы можем теперь сделать?

Геометрическая интеграция PyTorch позволяет нам создавать произвольные модели для наших задач. Следуя примерам PyG для разнородных данных, мы уже можем видеть формулировки для:

  • Предсказание ссылки
  • Мультиклассовая классификация краев (используется для прогнозирования веса дискретных узлов, например, рейтингов фильмов)
  • Многоклассовая классификация узлов

Это уже отличный набор инструментов для постановки задач, которые можно решить с помощью TypeDB, TypeDB-ML и PyTorch Geometric вместе. Еще лучше то, что вы можете построить модель полностью по своему собственному дизайну. Очень полезно, если у вас нестандартная постановка задачи!

Как создать собственное прогнозирование ссылок для TypeDB

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

  1. Создайте базу данных TypeDB с вашими данными. Требуется время и усилия, чтобы сделать это должным образом для базы данных приличного размера, но проект сообщества TypeDB Loader может сделать всю тяжелую работу, если вы загружаете из табличных источников данных. Существует множество ресурсов о том, как создавать схемы и загружать данные в TypeDB. Вы можете найти их на сайте, в репозитории примеров, на дискуссионном форуме и канале YouTube!
  2. Напишите запросы, которые могут извлечь соответствующий подграф, готовые к разделению на наборы данных для обучения, проверки и тестирования. Взгляните на пример того, как это сделать, сейчас это немного неудобно, но выполнимо!
  3. Создайте кодировщик для каждого типа атрибута, что может включать создание собственных видов кодировщика, специфичных для значения значений вашего собственного атрибута. Например, попробуйте обернуть этот пакет преобразователя предложений BERT, если ваш экземпляр TypeDB имеет текст произвольной формы в любых строковых атрибутах.
  4. Настройте модель прогнозирования ссылок по своему усмотрению, сделав ее подходящей для вашей задачи. Примеры из PyTorch Geometric помогают увидеть, как изменять кадрирование и манипулировать данными для различных учебных задач.

Сообщество разработчиков

Если вы попробуете TypeDB-ML, независимо от того, занимаетесь ли вы прогнозированием ссылок или выполняете любую другую обучающую задачу, то присоединяйтесь к сообществу Vaticle, особенно взгляните на Discord server — есть выделенный #typedb-ml канал и каналы, чтобы попросить помощи в получении начал с TypeDB вообще!

Будущая работа

Мы хотели бы поддерживать больше фреймворков, включая PyKeen и DGL, и значительно расширить примеры с наборами данных из реального мира для тестирования. Если вы хотите внести свой вклад в какую-либо из этих частей, пожалуйста, свяжитесь с Discord server!