Главная / Статьи

GraphRAG против Vector RAG: почему векторный поиск терпит неудачу при масштабировании

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

Издатель: REACTAPP.TOP8 мин чтения1893 слов

Источники: GraphRAG: Why Vector Search Fails at Scale (And How Knowledge Graphs Fix It)

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

Проблема не в этапе поиска и не в этапе генерации. Она заключается в том, как представляются данные после преобразования их в векторы.

Где терпит неудачу простой метод RAG с векторами

Фрагменты превращаются в изолированные единицы

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

Отсутствие рассуждений между документами

Некоторые вопросы невозможно ответить с помощью одного лишь отрывка текста. Возьмем, к примеру, вопросы вроде «Какие тенденции и темы прослеживаются во всех наших квартальных финансовых отчетах?» или «Может ли сотрудник претендовать на возмещение расходов на Wi-Fi, понесенных до даты его трудоустройства?» Microsoft Research называет такие вопросы вопросами формирования смысла. Они имеют широкий охват и требуют системы для анализа, объединения и обобщения взаимосвязей внутри набора данных, а не извлечения уже существующего факта.

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

Точность снижается по мере увеличения объема данных

Каждая система RAG, переходящая от прототипа к промышленному использованию, расширяет свой корпус данных, и это расширение выявляет недостаток: точность поиска начинает снижаться. Увеличение количества документов расширяет спектр тем, которые может обрабатывать система, но в то же время снижает её точность. Когда количество чанков в индексе растёт с сотен до тысяч, доля чанков, важных для конкретного вопроса, продолжает уменьшаться. Релевантные чанки теряются среди соседних, которые семантически похожи, но бесполезны в данном контексте. Большее количество документов означает более широкий охват, но в то же время более низкую точность поиска.

GraphRAG как решение

В 2024 году Microsoft Research представила GraphRAG для преодоления этих недостатков. Вместо разрозненных векторов она сохраняет структурированные связи, скрытые в тексте, путем перехода к графу знаний. Граф знаний представляет реальные факты в виде узлов — это такие сущности, как люди, места или понятия, — соединённых рёбрами, которые показывают их взаимосвязи. Благодаря этой основе система может анализировать целый набор данных, а не только выполнять локальные поиски.

Основная идея

GraphRAG преобразует разрознённые документы в связную карту идей и обобщает данные от общих тем до деталей. Поскольку эти связи создаются заранее, большая языковая модель получает как обзор всего корпуса, так и доступ к детальному контексту. Существует четыре этапа:

  1. Создание графа. ГЛМ формирует граф знаний, в котором узлы представляют собой ключевые сущности корпуса, а рёбра — связи между ними.
  2. Поиск сообществ. Граф делится на вложенные кластеры, начиная с небольших локальных групп и заканчивая темами, охватывающими весь набор данных. Сообщество — это набор узлов, тесно связанных между собой и лишь слабо связанных с остальной частью сети.
  3. Суммаризация снизу вверх. ГЛМ пишет краткое описание для каждого сообщества, охватывающее его сущности, факты и связи. Описания формируются в соответствии с иерархией: сообщества более высокого уровня включают в себя описания сообществ нижнего уровня, в результате чего получается структурированный обзор всего набора данных.
  • Ответ с использованием метода map-reduce. Во время запроса резюме сообщества обрабатываются параллельно с формированием частичных ответов (map), которые затем объединяются в один глобальный ответ (reduce).
  • Подробное описание рабочего процесса

    Как и в традиционных системах RAG, GraphRAG включает два этапа: индексацию и запросы.

    Индексация, выполняемая офлайн

    Документы на фрагменты. Процесс начинается с разделения документов на фрагменты, обычно по 600 токенов — такой размер выбирается для максимизации количества выявляемых сущностей.

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

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

    От графа к сообществам. Алгоритм иерархического обнаружения сообществ, как правило, алгоритм Лейдена, разделяет сеть на кластеры тесно связанных узлов. Результатом является многоуровневая иерархия, в которой на самом низком уровне находятся мелкие, детализированные кластеры, а на самом высоком — обширные группировки по всей области.

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

    Запросы во время выполнения

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

    Глобальные запросы. Вместо сканирования миллионов необработанных фрагментов информации система использует заранее вычисленные краткие сводки с помощью механизма map-reduce.

    1. Выберите уровень иерархии — от общих сверхкоммуникативных групп до детальных локальных кластеров (уровни 0, 1, 2 и т. д.) — в зависимости от объема информации, необходимого для ответа.
    2. Карта: вопрос отправляется одновременно ко всем кратким описаниям сообществ на данном уровне. ГЛМ оценивает каждое из них независимо и формирует промежуточный ответ сообщества с оценкой релевантности от 0 до 100.
    3. Фильтрация и ранжирование: отбрасываются ответы с низкой релевантностью, а оставшиеся сортируются по степени приоритета.
    4. Сведение к минимуму: лучшие по рангу результаты передаются в ГЛМ в одном окне контекста, где он синтезирует их в полный, без повторений ответ с цитатами.

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

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

    1. Провести поиск по векторному сходству среди эмбеддингов описаний сущностей для нахождения точек входа.
    2. Связать эти сущности с их исходными документами и фрагментами текста, пройтись по графу для сбора информации о соседних узлах и описаниях рёбер, получить дополнительные данные, такие как утверждения, URL-адреса и даты, а также собрать краткие обзоры локальных сообществ, к которым принадлежат сущности, что добавляет дополнительный контекст.
    3. Позволить большой языковой модели оценить каждую из этих связей по степени релевантности к вопросу, отсеивая менее значимые из них.
  • Добавьте учитывающий ранг контекст в промпт, чтобы получить обоснованный ответ.
  • Что выбрать

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

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

    Простое сравнение: vector RAG похож на поиски иголки в стоге сена, тогда как GraphRAG сначала создает карту всего стога, а затем уже проводит поиск.

    Vector RAG изменил способ работы нейронных сетей большого размера с внешними знаниями, однако масштабирование на сложные корпоративные данные требует чего-то большего, чем просто поиск семантически похожих записей. Благодаря организации текста в граф знаний с иерархическими краткими описаниями сообществ GraphRAG соединяет целенаправленный поиск с рассуждениями на основе всего набора данных.

    Если вы хотите узнать больше, оригинальная статья доступна по адресу https://arxiv.org/abs/2404.16130, а информация о дизайне локального поиска — по адресу https://microsoft.github.io/graphrag/query/local_search/.