Используйте общую таксономию для связи RDF и графов свойств и предоставляйте более интеллектуальные рекомендации с помощью вывода
Делиться

Введение
В этом уроке я покажу вам, как управлять таксономией в EDG и публиковать её в экземпляре Neo4j, где её можно будет наполнять дополнительными данными для работы рекомендательной системы. Таксономия, созданная и поддерживаемая в EDG TopQuadrant, определяет её структуру. Набор (фиктивных) статей из академических журналов служит данными экземпляра, заполняющими Neo4j. Я буду использовать небольшую иерархию категорий STEM в качестве таксономии для организации статей. Эти данные защищены лицензией Creative Commons CC0 1.0 Universal Public Domain Dedication.
Примечание 1: Полное раскрытие информации — я работаю в TopQuadrant, компании-разработчике EDG, поэтому, естественно, предпочитаю инструменты, которые мне хорошо знакомы. И Neo4j, и EDG от TopQuadrant — коммерческие продукты, а не с открытым исходным кодом. У каждого из них есть бесплатные пробные версии, подходящие для изучения этого руководства: Neo4j предоставляет один бесплатный экземпляр облачной базы данных (с ограничениями по объёму данных, памяти и процессорному времени), а TopQuadrant предлагает 90-дневную бесплатную пробную версию EDG Desktop. Кроме того, хотя описанная здесь архитектура имеет свои преимущества, это не единственный подход, и это не единственные поставщики, способные поддерживать такой рабочий процесс. Преимущества и недостатки этого подхода перечислены ниже.
Примечание 2: Вот видеозапись того, как выглядит эта демонстрация.
Примечание 3: Все изображения в этом посте созданы автором.

В чём смысл всего этого? Суть в том, что сама таксономия несёт в себе огромный смысл. Каждая статья отмечена тегом наиболее точной категории, но поскольку таксономия кодирует родительско-дочерние связи, мы можем автоматически выводить ассоциации более высокого уровня. Например, если статья отмечена тегом «Математическое программное обеспечение», она также относится к разделам «Компьютерные науки» и STEM, даже если это не указано явно. Таксономия не просто классифицирует, она позволяет рассуждать о взаимосвязи тем, поэтому источнику данных достаточно записать только наиболее релевантный тег, а иерархия заполнит всё остальное.
Мы отделяем информацию на уровне экземпляра о том, чему посвящена отдельная статья, от метаинформации о самих темах и о том, как они связаны друг с другом.
Причины, по которым вам следует строить с использованием именно этой архитектуры:
- Вывод: тегируйте одну концепцию, но используйте таксономию для связывания множества других концепций с контентом. Вместо того, чтобы отмечать статью тегами «Математическое программное обеспечение» и «Информатика», я могу просто тегнуть её тегом «Математическое программное обеспечение». Таксономия определяет «Математическое программное обеспечение» как раздел информатики. Исходная концепция, «Информатика», может быть выведена на основе таксономии.
- Согласование нескольких систем: я могу использовать одну таксономию для создания рекомендательного механизма в Neo4j и приложения GraphRAG в GraphDB. Одна команда может использовать векторную маркировку контента, хранящегося в SharePoint, а другая — тегирование на основе правил обработки естественного языка (NLP) для контента, хранящегося в Adobe Experience Manager (AEM). Все эти приложения согласованы, поскольку используют одни и те же справочные данные.
- Управление изменениями: Если я хочу перевести «Математическое программное обеспечение» в раздел «Математика» вместо раздела «Компьютерные науки», мне нужно просто изменить его родительскую таксономию. Если у меня нет отдельной таксономии, мне пришлось бы переразметить каждый документ с тегом «Математическое программное обеспечение». Если у меня есть несколько нижестоящих приложений, использующих один и тот же список терминов, это превращается в кошмар. Мне пришлось бы переразметить каждую сущность с тегом «Математическое программное обеспечение» в каждом приложении и убедиться, что все остальные теги, связанные с этим документом, верны.
- Используйте сильные стороны инструментов: EDG отлично справляется с управлением метаданными и таксономиями, обеспечивая их согласованность и эффективное управление. Neo4j и другие графовые базы данных отлично подходят для высокопроизводительной масштабируемой аналитики графов, но испытывают трудности с управлением метаданными. С помощью этой конфигурации мы можем получить лучшее из обоих миров.
Конечно, существуют и другие архитектурные подходы к строительству подобных сооружений, и у описанного здесь подхода есть свои недостатки. Вот некоторые из основных:
- Избыток для простых вариантов использования: в этом руководстве используется простая демонстрация, но архитектура наиболее целесообразна, когда ваши данные и варианты использования сложны. Большинство графовых баз данных, включая Neo4j, позволяют определить схему или базовую онтологию и представить таксономии с иерархическими связями. Если ваши данные относительно просты, таксономия понятна или её использует только одна команда, вам может не понадобиться так много инструментов.
- Навыки и кривая обучения: Совместное использование EDG и Neo4j предполагает знакомство с двумя различными парадигмами: моделированием онтологий в RDF/SHACL и запросами к графам в графах свойств/Cypher. Многие команды хорошо знакомы с одной, но не с другой.
- Больше подвижных частей: разделение таксономии и размечаемых данных означает, что теги должны соответствовать таксономии. Если они не совпадают, граф в базе данных перестает корректно согласовываться.
- Привязка к поставщику: Neo4j и EDG являются коммерческими продуктами, поэтому определённая привязка к поставщику и потенциальные затраты на миграцию всегда будут. Стандарты, лежащие в основе EDG (RDF, SHACL и SPARQL), являются стандартами с открытым исходным кодом от W3C, что снижает общую техническую привязку.
Neo4j — это граф маркированных свойств (LPG). EDG — это инструмент для курирования графов знаний, основанный на RDF и SHACL. LPG и RDF — это две разные графовые технологии, которые исторически не были совместимы. Однако EDG недавно разработал функцию интеграции с Neo4j, которая позволяет пользователям создавать проекты с использованием обеих технологий.
Ниже представлено визуальное представление того, как эти две технологии могут работать вместе.

Внизу, выделенном розовым цветом, находится хранилище данных. Я разделил его на внутренние и внешние данные. Внутренние данные — это необработанные данные, которые можно хранить в озере данных, системе управления контентом (CMS), например, SharePoint, или реляционной базе данных. Также могут быть внешние наборы данных, которые вы хотите интегрировать в своё приложение. Это могут быть общедоступные бесплатные источники данных, такие как WikiData, онтологии верхнего уровня, например, Gist, или проприетарные справочные наборы данных, такие как SNOMED или MedDRA (медицинские таксономии).
Затем EDG может выступать в качестве семантического уровня между базовыми данными и нижестоящими приложениями. Вы можете управлять онтологиями, таксономиями, справочными данными и метаданными в одном месте и передавать необходимые данные в приложения, такие как Neo4j, по мере необходимости. Вы также можете загружать данные непосредственно из базовых источников данных в Neo4j или любое другое приложение.
Шаг 1: Получите бесплатные версии EDG и Neo4j
Во-первых, нам нужно будет получить бесплатные версии этих продуктов, чтобы поэкспериментировать.
Для EDG вам нужно перейти на этот сайт и запросить бесплатную пробную версию. Ссылка для скачивания EDG и лицензия будут отправлены вам по электронной почте. После завершения загрузки в папке edg появится исполняемый файл, также называемый edg. Дважды щёлкните по нему, и он должен запуститься в браузере. Если у вас не установлена Java, вам будет предложено сначала установить её.

После этого EDG откроется в новой вкладке браузера с названием, например, http://localhost:8083/. Но будет указано, что он не зарегистрирован. Нажмите «Регистрация продукта» и загрузите файл лицензии, который также был отправлен вам по электронной почте. Затем нажмите «Зарегистрировать продукт».

После загрузки лицензии вы можете вернуться на главный экран, нажав на логотип TopQuadrant в левом верхнем углу. Теперь вы должны увидеть главную страницу EDG.

Теперь нам нужна бесплатная версия Neo4j. Перейдите по этой ссылке, чтобы начать пользоваться бесплатной пробной версией. Если у вас ещё нет учётной записи, вам нужно её создать. После создания учётной записи Neo4j вы попадёте на такой экран:

Нажмите «Создать экземпляр», а затем выберите бесплатный вариант.

При нажатии кнопки «Создать экземпляр» вам будут показаны имя пользователя и пароль. Имя пользователя обычно просто «Neo4j», но пароль уникален, поэтому запишите его где-нибудь.
Шаг 2: Настройка интеграции
В EDG в правом верхнем углу нажмите на значок пользователя (он выглядит как человечек). Затем нажмите «Администрирование сервера». Откроется экран с множеством опций. Нажмите «Параметры конфигурации продукта». На левой панели инструментов вы увидите множество опций интеграции. Нажмите «Neo4j».

Вы можете настроить отправку данных в несколько баз данных Neo4j, но в этом руководстве мы укажем только что созданный экземпляр Neo4j. Справа от пустой строки базы данных Neo4j есть знак «плюс». Щелкните по нему, и вам будет предложено ввести учётные данные Neo4j.

Вы можете назвать эту конфигурацию как угодно, но я выбрал «neo4jtest1». Идентификатор должен быть автоматически заполнен EDG. Чтобы получить URL-адрес базы данных Neo4j, вам нужно проверить экземпляр Neo4j, созданный в Neo4j. Он будет выглядеть примерно так: neo4j+s://cd227570.databases.neo4j.io.
Нажмите «Создать и выбрать». Теперь вам нужно будет ввести пароль. Это тот, который Neo4j предоставил вам при создании вашего экземпляра Neo4j.

Теперь мы все настроены.
Шаг 3: Импорт таксономии
Перейдите на мой GitHub и скачайте эту таксономию. Это список STEM-тем в иерархии, то есть таксономия.
Нажмите «Новый +» в верхней части экрана в EDG, затем «Импортировать коллекции ресурсов из TriG или ZIP-файла». Выберите ZIP-файл, полученный с моего GitHub, и загрузите его в EDG. Нажмите «Готово». Перейдя в таксономию, вы увидите иерархический список различных категорий STEM.

Шаг 4: Перенос таксономии в Neo4j
Нажмите на раскрывающееся меню «Облако», чтобы управлять интеграциями. В раскрывающемся меню вы увидите опцию «Подключиться к базе данных Neo4j».

Нажав эту кнопку, вы сможете выбрать нужную интеграцию Neo4j. Выберите ту, которую вы создали на шаге 2 выше.

После выбора интеграции с Neo4j будет создана интеграция между этой таксономией и вашим экземпляром Neo4j. Она будет выглядеть, как показано на всплывающем окне ниже. Щёлкните по интеграции, чтобы перейти к ней. В моём примере ниже она называется «Интеграция с базой данных Neo4j neo4jtest1». Затем нажмите «ОК».

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

Нажмите «Изменить» и прокрутите вниз до раздела «Включённые классы». Здесь мы указываем, какие классы из нашей таксономии мы хотим передать в этот экземпляр Neo4j. В этом руководстве выберите «Концепция». В этот раздел должны быть включены все классы таксономии. Это может показаться излишним, но важно для больших таксономий с множеством видов классов.

Также выберите «Always overwrite» (Всегда перезаписывать) в значение «True» (Истина). Это гарантирует, что при отправке данных будет перезаписано всё, что находится в экземпляре Neo4j.

Теперь нажмите «Сохранить изменения».
Вернувшись в интерфейс редактора, нажмите на значок «Cloud Push» на верхней панели инструментов после настройки интеграции с Neo4j. Должно появиться всплывающее окно, как на изображении ниже. Если у вас настроено несколько интеграций с несколькими различными приложениями, все они будут здесь. В этом руководстве вы увидите только созданную вами интеграцию, и она будет выбрана автоматически. Нажмите «ОК».

Вы должны увидеть индикатор хода передачи ваших концепций в Neo4j.

Шаг 5: Изучите данные в Neo4j
Теперь вернитесь к экземпляру Neo4j Aura. Если нажать «Экземпляры» на левой панели инструментов, вы увидите экземпляр, созданный на шаге 1. Теперь в нём есть узлы и связи!

Вы можете нажать «Подключиться», а затем «Исследовать», что приведет вас к визуальному представлению вашего графика.

Ниже представлен визуальный обозреватель Neo4j Aura. Просто введите в поиск общий термин «Ресурс – БОЛЕЕ ШИРОКИЙ – Ресурс», чтобы увидеть все концепции, которые мы перенесли из EDG, а также их родительские концепции.

Шаг 6: Загрузите статьи в Neo4j
Скачайте список журнальных статей с моего GitHub здесь. Это краткий список фейковых статей из академических журналов. Идея заключается в том, что мы хотим, чтобы таксономия была взята из EDG, а метаданные статьи — откуда-то ещё.
Теперь в Neo4j нажмите «Импорт» на левой панели инструментов и выберите «Новый источник данных». Появится список параметров. Вы можете импортировать данные экземпляра откуда угодно, но в этом руководстве мы просто загрузим CSV-файл напрямую. Источник данных не важен, важно, чтобы данные экземпляра были размечены терминами из таксономии, которой мы управляем в EDG. Таким образом, мы можем согласовать метаданные статьи с нашей таксономией и более широким семантическим уровнем.

Загрузите CSV-файл, скачанный с моего GitHub. Вам будет предложено указать, как вы хотите определить свою модель. Выберите «Сгенерировать из схемы».

Вы увидите файл Articles.csv в виде узла. Щёлкните по нему. Вам нужно указать, какое свойство вы хотите использовать в качестве первичного ключа. В этом списке статей есть свойство «id», которое мы будем использовать в качестве первичного ключа. Чтобы установить его в качестве ключа, щёлкните по значку ключа в правом нижнем углу строки «id». Затем выберите «Выполнить импорт».

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

Видно, что создано 15 узлов. CSV-файл содержал 15 статей, каждая из которых стала узлом. Теперь можно вернуться к функции «Исследование» и найти «Articles.csv». Вы увидите, что раздел «Статьи» отображается в визуальном представлении розовым цветом, а разделы STEM — зелёным. Это замечательно, но они пока не связаны. Чтобы связать данные экземпляра (статьи) с категориями, нам нужно выполнить запрос шифра.

Шаг 7: Свяжите данные экземпляра с таксономией
Нажмите «Запрос» на левой панели инструментов. В поле запроса введите:
// 1) Сопоставить каждый импортированный узел статьи, имеющий topicUri MATCH (a:`Articles.csv`) WHERE a.topicUri IS NOT NULL // 2) Найти соответствующее понятие по его свойству uri MATCH (c:Concept {uri: a.topicUri}) // 3) Создать отношение TAGGED_WITH (идемпотентное) MERGE (a)-[:TAGGED_WITH]->(c) // 4) Вернуть проверку корректности RETURN count(*) AS totalTaggedRelationships;
Это должно выглядеть так:

Затем нажмите «Выполнить». Прямо под этим запросом вы увидите сообщение «Создано 15 связей». Это хороший знак. Вернитесь в Проводник. Найдите «Статьи.csv – С ТЕГОМ – Ресурс». Вы увидите, что все эти розовые узлы теперь связаны с нашей зелёной таксономией!

Шаг 8: Создайте рекомендательную систему
Мы выполним несколько самых простых запросов на сходство, чтобы продемонстрировать, как использовать только что построенный нами граф для рекомендаций. Сначала давайте посмотрим на статью и на её категорию. Введите этот шифровальный запрос в интерфейс запросов. Будет выведен список категорий, к которым была отнесена статья «Достижения в области изучения математического программного обеспечения №7».
MATCH (a:`Articles.csv` {title: 'Достижения в изучении математического программного обеспечения #7'}) MATCH (a)-[:TAGGED_WITH]->(c:Concept) RETURN a.title КАК статья, c.prefLabel КАК тег, c.uri КАК uri ORDER BY тег;
Вы должны увидеть следующий вывод и категорию «Математическое программное обеспечение».

Предположим, мы хотим найти статьи, похожие на эту статью, чтобы рекомендовать их потенциальным читателям. Мы можем поискать другие статьи с тегом «Математическое программное обеспечение», но также можем воспользоваться таксономической структурой нашего графа. Согласно таксономии STEM, «Математическое программное обеспечение» является подклассом «Компьютерные науки». Вы можете вернуться к EDG, чтобы изучить категории и их дочерние категории. Чтобы найти статьи, похожие на нашу статью «Математическое программное обеспечение», нашей системе рекомендаций нужно найти другие статьи с тегом «Математическое программное обеспечение», а также статьи с тегами других разделов компьютерных наук.
Мы можем сделать это с помощью следующего шифровального запроса:
// 0) Начальная статья по ее реальной метке MATCH (me:`Articles.csv` {title: 'Достижения в изучении математического программного обеспечения #7'}) // 1) получить каждую отмеченную тему и ее родителя MATCH (me)-[:TAGGED_WITH]->(child:Concept)-[:BROADER]->(parent:Concept) // 2) найти любую другую статью с меткой родителя в той же родительской статье MATCH (siblingChild:Concept)-[:BROADER]->(parent)<-[:BROADER]-(child) MATCH (rec:`Articles.csv`)-[:TAGGED_WITH]->(siblingChild) WHERE rec <> me // 3) вычислить оценку рекомендации WITH rec, count(DISTINCT parent) AS score // 4) теперь извлечь все прямые теги для каждой рекомендуемой статьи OPTIONAL MATCH (rec)-[:TAGGED_WITH]->(t:Concept) // 5) вернуть заголовок, оценку и полный список тегов RETURN rec.title AS рекомендация, оценка AS sharedParentCount, collect(DISTINCT t.prefLabel) AS allTaggedTopics ORDER BY оценка DESC, рекомендация LIMIT 5;
Вы должны получить следующие результаты:

Других статей с тегом «Математическое программное обеспечение» нет, но есть статьи с тегами других разделов компьютерных наук. Статья «Достижения в области компьютерных исследований и общества» относится к категории «Компьютеры и общество». Рекомендуется выбрать этот вариант, поскольку граф учитывает, что и «Компьютеры и общество», и «Математическое программное обеспечение» являются разделами компьютерных наук.
Шаг 9: Корректировка нашей таксономии
Ранее я упоминал, что одна из причин, по которой стоит отделить таксономию от базы данных графов, заключается в том, что вы сможете вносить изменения в таксономию и легко отслеживать их влияние на свои приложения. Давайте попробуем это сделать.
Предположим, мы хотим перевести «Математическое программное обеспечение» из категории «Компьютерные науки» в раздел «Математика». Для этого в нашей таксономии мы просто перетаскиваем термин в древовидную структуру EDG.

Теперь верните таксономию в Neo4j, используя ту же кнопку облака.

Теперь, когда мы снова запускаем Neo4j и алгоритм рекомендаций, результаты совершенно иные. Это связано с тем, что наша исходная статья была помечена тегом «Математическое программное обеспечение», которое мы теперь классифицируем как раздел «Математика». Остальные рекомендуемые нам статьи — это статьи по математике, а не по информатике.

Заключение
Эта простая демонстрация показывает, как таксономия может привнести структуру, гибкость и интеллект в ваши приложения для работы с данными. Отделив таксономию (в EDG) от метаданных экземпляра (в Neo4j), вы получаете возможность выводить взаимосвязи, согласовывать системы и развивать модель с течением времени без необходимости менять теги или перестраивать нижестоящие приложения. Результатом является модульная архитектура, которая делает ваш граф интеллектуальнее по мере расширения вашего понимания предметной области.
Об авторе: Стив Хедден — руководитель отдела управления продуктами в TopQuadrant, где он отвечает за стратегию развития EDG, платформы для управления графами знаний и метаданными. Его работа сосредоточена на объединении управления корпоративными данными и искусственного интеллекта посредством онтологий, таксономий и семантических технологий. Стив регулярно пишет и выступает с докладами о графах знаний и меняющейся роли семантики в системах искусственного интеллекта.
Источник: towardsdatascience.com



























