Делаем крутые вещи с данными!

Вступление

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

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

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

Узел - это точка на графике, в которой линии пересекаются или разветвляются.

ребро - это линия, соединяющая два узла в графе.

Как видно из графа знаний ниже, Спок, Звездный путь, Звездные войны, Леонард Нимой, Научная фантастика, Оби-Ван Кеноби, Алек Гиннесс - это узлы и играемые, characterIn, starredIn и genre - грани графа.

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

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

Создание сети знаний о навыках резюме

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

В этом блоге мы будем использовать 3 фиктивных резюме.

Итак, давайте теперь погрузимся в код! Полный код и резюме размещены в моем репозитории на Github здесь.

В целях упрощения мы просто сосредоточимся на языках программирования, которые знают разные кандидаты.

Анализ данных из резюме

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

Результатом этого являются языки трех программистов:

Output:
['JavaScript', 'HTML5', 'PHP OOP', 'CSS', 'SQL', 'MySQL']
['Python,R,CSS,PHP,Machine Learning']
['HTML5', 'CSS', 'SQL', 'Jquery’, ‘PHP']

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

Создать сеть знаний с помощью библиотеки Networkx

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

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

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

Здесь, в четвертой строке, мы создаем объект networkx из словаря, который мы создали ранее. Параметр create_using здесь указывает тип графа, который нам нужно создать.

Различные типы графиков и соответствующие им классы networkx указаны в документации networkx следующим образом:

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

Визуализация графа знаний отдельного кандидата

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

Приведенный выше код создаст график для Мэтью и его навыков, как показано ниже:

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

Теперь давайте попробуем визуализировать графики как один связанный граф:

Здесь мы используем функцию draw () для рисования графика с использованием указанных параметров:

  • With_labels - с помощью этого флага можно указать, показывать ли метки на графиках или нет.
  • Node_color - с помощью этого параметра можно указать цвет узлов.
  • Edge_cmap -Используя этот параметр, можно указать цветовую карту графика.
  • Pos -Используя этот параметр, можно указать макет графика.
  • Node_size - с помощью этого параметра можно указать размер узлов.
  • Font_size - с помощью этого параметра мы определяем размер шрифта текста, используемого в узлах.

Полученный график будет выглядеть так:

Как вы можете видеть на приведенном выше графике, мы создали граф знаний с каждым кандидатом и языками программирования, которые они знают.

Изучение нашей сети знаний

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

Просмотр графа знаний может быть утомительным, если код написан с нуля. Чтобы упростить это, рекомендуется хранить график в базе данных графов, такой как Neo4j, и писать запросы на SPARQL. Для целей этого блога мы продемонстрируем некоторые простые методы извлечения, используя граф networkx, который мы создали на рисунке 4 выше.

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

Давай попробуем!

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

Давайте посмотрим, как этого добиться с помощью библиотеки networkx:

Output:
'CSS'
3

Здесь мы просто используем одну функцию из библиотеки networkx, которая называется степень (). Эта функция возвращает количество ребер, связанных с конкретным узлом. В функции, определенной выше get_max_degree_node (), мы перебираем все узлы навыков (все узлы, кроме узлов имени) и получаем максимальную степень в узлах навыков.

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

skill_list = languages_mathew+languages_john+languages_max
max_languages_degree, max_languages_node = get_max_degree_node(skill_list,G)
print(max_languages_node)
print(max_languages_degree)
Output:
Mathew Elliot
6

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

Заключение

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

В Deep Learning Analytics мы очень увлечены использованием машинного обучения для решения реальных проблем. Мы помогли многим компаниям внедрить инновационные решения на основе искусственного интеллекта. Свяжитесь с нами через наш сайт здесь, если вы видите возможность сотрудничества. Этот блог написали Прия Двиведи и Файзан Хан.

использованная литература