Добрый день, уважаемые читатели. Это третья часть статьи, посвящённой «утечке» конфиденциальных данных на примере больших языковых моделей, реализуемой посредством кибератак. В первых двух частях (раз и два) мы рассмотрели возможные причины и последствия таких атак. Также отдельно затронули их виды, детально остановились на механизмах и методах сбора и формирования наборов данных, их структуре и свойствах.
А здесь мы рассмотрим свойства получаемых графов знаний, а также инструменты для их отображения. Прежде всего, нас интересует получение графа знаний (раз и два) и верная его интерпретация, а также подбор инструмента, который бы объективно отражал граф и мог поддерживать очень быстрое масштабирование, ведь количество данных в модели постоянно растёт, а узлы постоянно мигрируют. Более того, как оказалось, они не статичны и могут быть подвержены слияниям, распадам и перетеканию в смежные области.
Граф знаний
Прежде чем сосредоточиться на подборе инструмента для визуализации графа знаний (раз, два, три, четыре, пять, шесть, семь, восемь) на основе сформированного набора из промптов (вопрос-ответ и метрик расстояния), по которым мы собираемся получить ключевые узлы (ноды), нам необходимо оценить качество получаемого графа: насколько он будет информативный, полный, а главное — достоверный. Именно от выделения ключевых нод зависит и скорость проведения атаки. Чем быстрее мы их находим (ноды), тем быстрее мы понимаем, из чего собран набор и как можно манипулировать им, трансформировать и «травить» его.
Подробное рассмотрение научных работ показало, что теперь запросы к модели укладываются в особую парадигму Learning to Plan from Knowledge Graphs (LPKG). Эта система помогает сети не сразу выдавать ответ на запрос, а планировать целую линейку ответов, по множеству которых и формируется решение. Получается аналог внутреннего критика, то есть модель начинает сама оценивать, насколько хорошо будет ответить тем или иным образом. Получается ещё одна надстройка над основной сетью.
При этом была также создана новая метрика качества, как раз для такой работы — CLQA-Wiki. Она позволяет оценить качество получаемого промпта, равномерно охватывая многоходовые, сравнительные, пересекающиеся и объединяющиеся типы запросов, что является более полным (комплексным) представлением для более релевантного ответа.
Система, конечно же, построена на новой архитектуре RAG (раз, два, три, четыре). Разработаны даже специализированные модули для извлечения цепочек знаний, такие как ToG (статья) и KELP. Работа KELP состоит из трех этапов:
извлечение знаний о пути;
кодирование образца;
тонкий выбор наиболее качественного пути в графе.
Также предложены модульные системы, которые в оперативном режиме вопрос-ответ позволяют извлекать информацию из модели и строить графы знаний. Даже проводился специальный хакатон. При этом основной целью ставится именно понимание свойств графа и его основных характеристик.
Свойства графа
Я вывел небольшой список ключевых параметров, по которым оценивается качество получаемого узла. Сразу оговорюсь: так как мы стараемся по промптам (запрос-ответ) восстановить топологию графа, не все аспекты будут задействованы в полном объеме, однако к их реализации стоит стремиться, чтобы полнее представлять себе всю структуру графа. Если посмотреть серьёзные справочные пособия по теории графов, например здесь и здесь, то можно заметить, что выделяется достаточно много всевозможных характеристик. Охватить их все весьма сложно, да и не всегда обязательно, поэтому я выделил лишь некоторые:
Связность и целостность. Граф должен быть хорошо связным, все ключевые концепты и понятия связаны между собой, что позволило бы проследить взаимозависимости между различными частями модели и более явно выделить топологию узлов. При этом здесь мы можем выделить следующие типы связей, которые наиболее важны:
Иерархические связи между более общими и более конкретными понятиями.
Ассоциативные связи, отражающие тематическую близость и взаимосвязь между концептами.
Причинно-следственные связи, показывающие зависимости и влияния между явлениями.
Функциональные связи, описывающие роли и назначения различных элементов.
Иерархичность. Граф должен отображать иерархические отношения между концептами, где более общие понятия связаны с более конкретными. Такой подход поможет выявить высокоуровневые «хабы» или ключевые узлы, которые влияют на большую часть модели, при этом связь должна рассматриваться предметно.
Семантическая насыщенность. Связи между узлами должны быть семантически богатыми, отображающими различные типы отношений (например, «является частью», «использует», «влияет на» и т. д.). При таком подходе можно подробнее проанализировать структуру и логику модели, а также её взаимодействие и развитие промпта (вопрос-ответ) по сети формирования запроса.
Покрытие предметной области, по возможности, должно охватывать все ключевые аспекты и концепты, относящиеся к предметной области модели. При этом, чем полнее и качественнее она представлена, тем более ценной будет информация, полученная при анализе.
Масштабируемость графа. Должна быть способность расширяться по мере роста модели и добавления новых концептов и связей. Это крайне важно, так как мы всегда оцениваем не конечный этап, а возможность постоянной достройки графа по мере поступления новых данных, а они будут сыпаться постоянно и в весьма большом объёме.
Уровень детализации включает в себя возможность обеспечить необходимый уровень детализации и глубины представления знаний. Более того, желательно включать как высокоуровневые обобщающие концепты, так и более детализированные, специфические понятия в соответствии с требованиями предметной области и целями использования.
Следующий важный момент — настройка инструментов визуализации графа и рассмотрения его инструментария. Поиск навёл меня на некоторые любопытные разработки, которыми я хочу поделиться. Конечно же, самая интересная будет в конце списка, но она не всегда нужна, так как, хоть и полностью отражает поставленную задачу, всегда можно ограничиться более простыми вещами.
Инструменты для визуализации
На сегодняшний день выделяют достаточно много инструментов по работе с графами. Но у меня задача достаточно специфичная: нужны были инструменты, которые работают с графами знаний, поэтому подбор тоже был сопряжён с рядом особенностей:
Анализ центральности узлов. Определение узлов с высокой степенью центральности, таких как узлы с наибольшим количеством связей или расположением на кратчайших путях между другими узлами. Они будут играть ключевую роль в модели. Здесь важны следующие аспекты:
Степень центральности (Degree Centrality). Определение узлов с наибольшим количеством связей, так как они являются ключевыми концептами, связывающими множество других.
Посредническая центральность (Betweenness Centrality). Выявление узлов, находящихся на кратчайших путях между многими другими узлами, что указывает на их роль в передаче информации.
Близость к центру (Closeness Centrality). Анализ узлов, наиболее близких к «центру» графа, так как они могут быть влиятельными концептами.
Определение связующих узлов — которые соединяют различные кластеры или сообщества в графе. Эти узлы могут быть особенно важны для понимания взаимодействия между различными частями модели, могут восстановить пробелы в знаниях. Также они могут содержать важные метаданные или контекстуальную информацию. Более того, они могут оптимизировать поиск и улучшить общую производительность сети.
Оценка влиятельности узлов. Количественная оценка влияния каждого узла на остальную часть графа, например, с помощью метрик, таких как PageRank или близость к центру. Это также помогает выявить наиболее важные концепты в модели, учесть динамическую природу графа, а также полнее интерпретировать результат. При этом учитываются такие аспекты как:
Модульность (Modularity). Определение плотно связанных групп узлов, которые могут представлять собой важные тематические модули или подсистемы.
Структурная эквивалентность (Structural Equivalence). Выявление узлов, играющих аналогичные роли в графе, что может указывать на концепты, связанные с одной и той же сущностью.
PageRank. Оценка важности узлов, основанная на количестве и качестве связей, ведущих к ним, что дает представление об авторитетности концептов.
HITS (Hyperlink-Induced Topic Search). Определение «хабов» (узлов с большим количеством связей) и «авторитетов» (узлов, на которые ссылаются многие «хабы»), что может указывать на ключевые концепты.
Динамический анализ. Отслеживание изменений в графе знаний по мере обновления или расширения модели, что позволит нам понять, как модель развивается во времени и какие узлы являются наиболее стабильными или подвергаются наибольшим изменениям:
Изменение центральности узлов во времени. Отслеживание, как меняется важность концептов по мере обновления графа знаний.
Появление и исчезновение связей. Выявление новых или прекращающихся связей между концептами, что может сигнализировать об их изменяющейся значимости.
Интеграция с другими источниками и предметными областями. Комбинирование графа знаний с другими информационными ресурсами, такими как документация, экспертные знания или данные, чтобы получить более полное представление о модели и её контексте. Здесь могут помочь:
Анализ путей связности (Path Analysis). Определение кратчайших путей между парами концептов. Это позволит обнаружить косвенные связи, которые могут быть неявными. Анализ высокоуровневых путей, которые объединяют удалённые концепты через промежуточные понятия, причём такие пути могут раскрывать скрытые семантические отношения.
Кластерный анализ (Clustering). Применение методов кластеризации, таких как иерархическая кластеризация или алгоритм k-means, для выявления групп сильно связанных концептов. Обнаружение кластеров, которые могут объединять на первый взгляд разрозненные концепты, указывая на скрытые связи между ними.
Анализ общих соседей (Common Neighbors Analysis). Определение концептов, которые разделяют большое количество общих связей с другими узлами. Такие концепты с большим количеством общих соседей могут быть индикаторами скрытых взаимосвязей между ними.
Анализ структурной эквивалентности (Structural Equivalence Analysis). Выявление концептов, которые имеют аналогичные паттерны связей. Структурно эквивалентные концепты могут указывать на скрытые сходства и отношения между ними.
Латентный семантический анализ (Latent Semantic Analysis). Применение методов латентного семантического анализа, таких как SVD или тематическое моделирование. Это может помочь обнаружить скрытые семантические связи между концептами, основываясь на совместной встречаемости в контексте.
Исходя из этого, вот примерный список инструментов; какие-то из них обладают заявленными свойствами, какие-то нет, но всё же все они активно используют:
Graphviz предлагает гибкие возможности для создания диаграмм графов. Он поддерживает различные форматы выходных данных и может генерировать изображения в высоком качестве. Дополнительно в нем реализованы различные макеты графов, присутствует расширенная настройка внешнего вида, поддержка с языков программирования Python, JavaScript, Java, C/C++, Perl, Ruby. Есть возможность кластеризации и подграфов, поддержка форматов представлений для экспорта в SVG, PDF, PS, PNG, JPEG. Настроена развитая система плагинов.
-
Cytoscape специализируется на биологических и медицинских графах, но его функциональность может быть полезна и для других видов. Он предлагает богатые возможности для визуализации и анализа графов. Это достаточно мощная система, здесь поддерживаются разнообразные макеты и компоновки (force-directed, иерархические, круговые и др.) с развитой системой масштабирования, панорамирования и фокусировки. Из алгоритмических составляющих значатся:
Интерактивность с возможностью навигации, выделения и фильтрации элементов.
Вычисление топологических характеристик (степени узлов, кластерность, центральность и т. д.).
Обнаружение сообществ и модулей в графе.
Поиск путей, расчёт расстояний и связности между узлами.
Анализ динамики изменений графа во времени.
Обширная экосистема плагинов, предоставляющих дополнительные возможности.
Возможность разработки собственных плагинов на языке Java.
Интеграция с инструментами анализа данных, машинного обучения и биоинформатики.
TensorFlow Graph Neural Networks (TF-GNN). Фреймворк, разработанный Google для построения и обучения моделей нейронных сетей на графах. Позволяет применять методы глубокого обучения для анализа структуры и свойств графа, включая выявление скрытых связей. Имеет широкий спектр алгоритмов, таких как GraphSAGE, GAT и GCN.
NetworkX. Библиотека Python для создания, манипулирования и изучения структуры, динамики и функций сложных сетей. Предоставляет инструменты для визуализации графов, анализа топологии, обнаружения сообществ, вычисления метрик центральности и эволюции графа.
Apache Spark GraphX. Библиотека для анализа графовых данных, встроенная в экосистему Apache Spark. Поддерживает широкий спектр операций над графами, таких как вычисление центральности, поиск кратчайших путей, кластеризация и др. Обладает высокой производительностью за счёт использования распределённых вычислений. Поддерживает различные алгоритмы компоновки графа, такие как Spring-layout, Fruchterman-Reingold, circular layout и др., и алгоритмы поиска путей, такие как Dijkstra, Bellman-Ford, Флойда-Уоршелла. Кроме того, библиотека способна генерировать случайные графы при поддержке алгоритма Эрдёша-Реньи, модели Барабаши-Альберта и модели Воттса-Строгаца.
При этом самой последней разработкой и наиболее интересной стала методология GraphRAG (статья). Здесь используется подход для построения текстового индекса на основе графов в два этапа: сначала строится граф знаний о сущностях из исходных документов, затем предварительно генерируются краткие описания сообществ для всех групп тесно связанных сущностей. Учитывая запрос, каждое сообщество генерирует резюме, которое используется для создания частичного ответа, после чего все частичные ответы снова суммируются в окончательный ответ пользователю.
Для класса вопросов глобального осмысления на наборах данных в диапазоне 1 млн лексем было показано, что Graph RAG приводит к существенному улучшению по сравнению с «наивным» RAG, как по полноте, так и по разнообразию генерируемых ответов. То есть, здесь делается попытка осмысления ответов в самом широком диапазоне на множестве документов, при этом предлагается следующая схема работы:
Source Documents → Text Chunks. Выполняется детализация входных текстов для обработки с последующим разделением текста на фрагменты для запросов LLM. Более длинные фрагменты требуют меньше вызовов LLM, но ухудшают качество. При этом поддерживается создание более длинного контекстного окна для улучшения производительности с одновременной оценкой влияния размера блока на производительность. Здесь делается ставка на баланс между запоминанием и точностью информации.
Text Chunks → Element Instances. Идентификация и извлечение объектов в тексте и адаптация приглашения к предметной области. По умолчанию извлекаются утверждения, связанные с обнаруженными сущностями, включая тему, объект, тип и описание с учётом заполнения пропусков.
Element Instances → Element Summaries. Выполняется обобщение на уровне экземпляра.
Element Summaries → Graph Communities. Индекс, созданный на предыдущем шаге, можно представить как граф с нормализованными весами рёбер, при этом алгоритмы обнаружения сообществ могут использоваться для разделения графа на сообщества с сильными связями. Далее применяется алгоритм Leiden для восстановления иерархической структуры сообществ в крупномасштабных графах. Получившаяся иерархия позволяет обобщить глобальный подход «разделяй и властвуй», причём каждый уровень иерархии представляет собой раздел сообщества, охватывающий все узлы графа.
Graph Communities → Community Answers. После этого создаются сводки, предназначенные для понимания глобальной структуры и семантики данных. Ещё они полезны для понимания данных без необходимости делать запросы. Сводки могут использоваться для выделения общих тем на разных уровнях иерархии.
-
Community Answers → Global Answer.
Среди ключевых особенностей выделяют поддержку критически важных случаев обнаружения и анализа информации, когда данные, необходимые для получения полезных выводов, охватывают множество документов, зашумлены, содержат недостоверную и/или дезинформацию, или когда вопросы, на которые пользователи хотят ответить, являются более абстрактными или тематическими, чем те, на которые могут непосредственно ответить базовые данные.
Инструмент предназначен для ситуаций, когда пользователи уже обучены ответственным аналитическим подходам и от них ожидается критическое мышление. GraphRAG способен обеспечить высокую степень понимания сложных информационных тем, однако для проверки и дополнения сгенерированных им ответов пока что необходим финальный человеческий анализ экспертом в данной области.