Руководство по Python для быстрого создания графов знаний

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

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

Если вы хотите продолжить, полный блокнот доступен здесь, в Google Colab.

Подход

Наш подход будет следующим:

  • 🔌 Используйте API Википедии для загрузки информации, связанной с термином
  • 🔁 Повторяйте множество терминов, чтобы создать базу знаний
  • 🔝 Ранжируйте термины по их «важности»
  • 🌐 Визуализируйте граф знаний с помощью библиотеки networkx

Если вы хотите читать вместе с кодом, вы можете найти его здесь, в Google Colab.

API Википедии

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

import wikipedia as wp

ds = wp.page("data science")

Подробнее о пакете можно прочитать в этой статье.

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

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

Пример со страницы науки о данных показан ниже.

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

Поиск в Википедии

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

Алгоритм, которому мы будем следовать, таков:

  1. Начните со списка терминов, которые охватывают интересующую вас область. Например, для графа знаний для «науки о данных» мы можем выбрать «науку о данных», «машинное обучение» и «искусственный интеллект».
  2. Получить страницу Википедии из терминов в списке с помощью API Википедии.
  3. Найти все исходящие ссылки на странице и рассчитать для них вес. Вес может зависеть от того, как часто термин появляется, насколько близко к началу документа или включен ли он в резюме.
  4. Добавьте новые ссылки в список терминов.
  5. Найдите самый важный термин из оставшихся и получите страницу для этого термина. Мы можем определить важность по количеству упоминаний термина в других терминах, а также по весу этих ссылок.
  6. Повторяйте шаги 3–5, пока не будет достигнута достаточная глубина. В следующих примерах это порядка сотен терминов.

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

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

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

Создание сетевых графиков

Когда сеть определена, мы можем начать визуализировать ее. Учитывая графическую природу данных, лучше всего рассматривать их в виде графика. Для этого мы можем использовать удобный пакет networkx. Networkx — это пакет Python для создания, управления и изучения структуры, динамики и функций сложных сетей (Networkx, 2022).

Networkx основывается на базовой теории графов для построения графиков. Ниже показан пример сценария построения графика.

import networkx as nx

G = nx.Graph()
G.add_nodes_from(nodes)
G.add_edges_from(edges)
   
nx.draw(G)

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

Графики для «науки о данных», «физики» и «биологии» показаны ниже.

Глядя на область биологии, мы видим интересный график. Я не биолог, но это кажется довольно точным! Некоторые интересные места:

  • Термин животное тесно связан с биологией и имеет такое же значение, что имеет смысл, учитывая, что биология изучает живые организмы.
  • С левой стороны мы видим группу клеточной биологии: амеба, клеточная стенка, мейоз и бактерии. . Алгоритм networkx группирует различные связанные термины вместе из-за их сильных связей. Таким образом, граф знаний может предложить термины для совместного изучения.
  • Учитывая тесную связь между биологией и окружающей средой, мы видим, что область геологии проявляется в таких терминах, как земля и стратиграфия.
  • Как и следовало ожидать из недавних событий, мы видим, что вопросы, связанные с климатом, изменением климата и временем, поднимаются как важные темы. Это могло бы быть не так, если бы это был график знаний 20-летней давности.
  • У нас появляются термины 1, число и isbn, которые, казалось бы, выходят за рамки. Вероятно, это связано с некоторыми странными ссылками в Википедии, которые следует удалить.

Облегчение образования

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

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

Напоминание: полный блокнот доступен здесь, в Google Colab, поэтому, пожалуйста, не стесняйтесь попробовать его самостоятельно и дайте мне знать, что вы найдете!