Strona główna / Artykuły

GraphRAG kontra Vector RAG: Dlaczego wyszukiwanie wektorowe zawodzi przy dużych skaliach

Vector RAG ma trudności z izolacją fragmentów tekstu, rozumowaniem między dokumentami oraz skalowalnością. Zobacz, jak GraphRAG tworzy społeczności i streszczenia, aby to naprawić, oraz kiedy wybrać jeden z tych podejść.

Wydawca: REACTAPP.TOP8 min czytania1893 słów

Źródła: GraphRAG: Why Vector Search Fails at Scale (And How Knowledge Graphs Fix It)

Generowanie wzbogacone o wyszukiwanie umożliwia modelowi językowemu pracę z danymi, na których nigdy nie był szkoleni. Klasyczna wersja dzieli dokumenty na fragmenty, przechowuje ich wektory w bazie danych wektorowej, a podczas zadawania pytania wybiera te fragmenty najbliższe zapytaniu i włącza je do promptu. W przypadku prostych zadań analitycznych na niewielkiej ilości danych to rozwiązanie dobrze funkcjonuje. Gdy jednak chodzi o złożone dane korporacyjne, zaczynają pojawiać się problemy.

Problem nie leży w kroku wyszukiwania ani w kroku generowania. Wynika on z sposobu reprezentacji danych po przekształceniu ich w wektory.

Gdzie zwykłe RAG wektorowe zawodzi

Fragmenty stają się „wyspami”

Gdy dokument zostanie podzielony na fragmenty, każdy z nich znajduje się sam w przestrzeni wektorowej. Jest odseparowany od otaczających go akapitów oraz od powiązanego materiału w innych dokumentach, a wszelka struktura, jaką miał oryginał, znika. Podczas wyszukiwania ważny otaczający kontekst zostaje pominięty, więc model językowy może pomylić częściowy fakt z całą prawdą. Przecięcie tych logicznych powiązań zmusza model do oceny tekstu bez uwzględnienia środowiska, z którego pochodzi.

Brak rozumowania między dokumentami

Część pytań nie może zostać odpowiedziana na podstawie pojedynczego fragmentu tekstu. Przykładem może być pytanie „Jakie trendy i tematy pojawiają się we wszystkich naszych kwartalnych raportach finansowych?” lub „Czy pracownik może ubiegać się o zwrot kosztów Wi-Fi poniesionych przed datą zatrudnienia?”. Microsoft Research nazywa takie pytania zapytaniami służącymi do wyłaniania sensu. Są one szerokie i wymagają systemu, który potrafi analizować, łączyć oraz podsumowywać relacje w zbiorze danych, zamiast wydobywać już istniejący fakt.

Poszukiwanie wektorowe opiera się na lokalnych dopasowaniach semantycznych: na fragmentach, których wektory znajdują się najbliżej wektora zapytania. Jest to doskonałe rozwiązanie dla pytań o charakterze lokalnym, ale zawodzi w sytuacjach, gdy odpowiedź jest rozproszona między kilkoma fragmentami i dokumentami. Załóżmy, że odpowiedź wymaga powiązania faktu A z jednego dokumentu z faktem B z drugiego oraz faktem C z trzeciego. Każdy fragment jest pobierany niezależnie, w zależności od stopnia jego podobieństwa do zapytania, więc fakt pośredni o niskim wyniku podobieństwa zostaje pominięty, mimo że odpowiedź od niego zależy. W ten sposób łańcuch rozumowania się urywa.

Dokładność spada wraz ze wzrostem ilości danych

Każdy system RAG, który przechodzi od prototypu do wersji produkcyjnej, powiększa swój korpus, a to rozszerzenie ujawnia wadę: dokładność wyszukiwania zaczyna spadać. Więcej dokumentów rozszerza zakres tematów, które system może obejmować, ale jednocześnie obniżają one precyzję. Gdy indeks przechodzi z setek fragmentów na tysiące, udział fragmentów istotnych dla konkretnej pytania stale się zmniejsza. Te istotne zostają przytłumione przez fragmenty o podobnym znaczeniu semantycznym, które są jednak bezużyteczne w danym kontekście. Więcej dokumentów oznacza szerszy zakres pokrycia tematów, ale jednocześnie niższą precyzję wyszukiwania.

GraphRAG jako rozwiązanie

Microsoft Research wprowadził GraphRAG w 2024 roku, aby zaradzić tym słabościom. Zamiast rozproszonych wektorów, system przechowuje ustrukturyzowane relacje ukryte w tekście, przechodząc na graf wiedzy. Graf wiedzy przedstawia fakty z rzeczywistego świata jako węzły, czyli entity takie jak osoby, miejsca lub koncepcje, połączone krawędziami, które pokazują, w jaki sposób się wzajemnie powiązują. Dzięki temu fundamentowi system może analizować cały zbiór danych, a nie tylko wykonywać lokalne wyszukiwania.

Główna idea

GraphRAG przekształca rozproszone dokumenty w spójną mapę idei i podsumowuje dane, przechodząc od szerokich tematów do szczegółów. Ponieważ te powiązania są tworzone z góry, model językowy ma zarówno ogólny obraz całego korpusu, jak i dostęp do szczegółowego kontekstu. Istnieją cztery etapy:

  1. Budowanie grafu. Sztuczna inteligencja językowa tworzy graf wiedzy, w którym węzłami są kluczowe elementy korpusu, a krawędziami relacje pomiędzy nimi.
  2. Znajdowanie społeczności. Graf jest dzielony na nawarstwione klastry, od małych lokalnych grup po tematy obejmujące cały zbiór danych. Społeczność to zbiór węzłów ściśle ze sobą połączonych i tylko luźno powiązanych z resztą sieci.
  3. Streszczanie od dołu do góry. Sztuczna inteligencja językowa pisze streszczenie dla każdej społeczności, obejmujące jej elementy, fakty i relacje. Streszczenia są tworzone zgodnie z hierarchią, dzięki czemu społeczności wyższego poziomu wchłaniają streszczenia tych poniżej nich, co pozwala uzyskać uporządkowany przegląd całego zbioru danych.
  • Odpowiedz za pomocą map-reduce. Podczas wyszukiwania podsumowania społeczności są przetwarzane równolegle na częściowe odpowiedzi (map), które następnie są łączone w jedną globalną odpowiedź (reduce).
  • Proces w szczegółach

    Podobnie jak tradycyjny RAG, GraphRAG składa się z dwóch faz: indeksowania i wyszukiwania.

    Indeksowanie, wykonywane offline

    Dokumenty na fragmenty. Proces zaczyna się od podziału dokumentów na fragmenty, zazwyczaj po około 600 tokenów – taka wielkość została wybrana, aby maksymalizować liczbę identyfikowanych elementów.

    Fragmenty na elementy i relacje. LLM czyta kolejno każdy fragment i wyodrębnia ważne elementy oraz relacje między nimi, wraz z krótkimi opisami każdego z nich. Może również wyodrębniać stwierdzenia, czyli istotne fakty dotyczące elementów, takie jak daty, wydarzenia i interakcje z innymi elementami.

    Do grafu wiedzy. Wszystkie wydobyte dane są łączone. Entytety stają się węzłami, a relacje – krawędziami. Aby ograniczyć redundancję, warianty tej samej entytety są łączone, a ich opisy skracane do jednej pozycji. Powtarzające się wzmianki o danej relacji zwiększają jej wagę, wskazując na silniejsze połączenie, a informacje są przypisywane odpowiednim węzłom i krawędziom.

    Od grafu do społeczności. Algorytm hierarchicznego wykrywania społeczności, zazwyczaj Leiden, dzieli sieć na klastry ściśle powiązanych węzłów. Wynikiem jest wielopoziomowa hierarchia, w której na najniższym poziomie znajdują się małe, szczegółowe klastry, a na najwyższym – obszerne grupy obejmujące całą dziedzinę.

    Od społeczności do streszczeń. Pracując od najmniejszych, najbardziej szczegółowych grup w górę, model LLM tworzy streszczenie dla każdego poziomu hierarchii. Dzięki temu można odpowiadać na pytania dotyczące całości oraz przeglądać treści od szerokich tematów aż po najdrobniejsze szczegóły. Aby zachować ograniczenia kontekstowe, streszczenia najniższego poziomu powstają poprzez sklasyfikowanie surowych danych grafowych według ich ważności oraz uzupełnienie promptu najbardziej powiązanymi ze sobą entytetami, relacjami i twierdzeniami, aż wyczerpie się miejsce. Streszczenia wyższych poziomów są tworzone bezpośrednio na podstawie streszczeń poniżej nich, co stanowi rodzaj agregacji agregatów.

    Zadawanie zapytań w czasie wykonywania

    Standardowy RAG traktuje każde zapytanie za pomocą tego samego algorytmu porównywania podobieństwa. GraphRAG wysyła zapytanie jedną z dwóch ścieżek w zależności od intencji. Poszukiwanie globalne służy do analizy szerokich, dotyczących całego zbioru danych wzorców. Poszukiwanie lokalne zajmuje się konkretnymi, skupionymi na konkretnych elementach pytaniami, które wymagają kilku kroków analizy. W przypadku firmy z polityką zwrotów kosztów, zapytanie globalne może dotyczyć głównych ryzyk związanych z przestrzeganiem regulacji oraz zasad zatwierdzania w ramach wszystkich programów zwrotów. Zapytanie lokalne może dotyczyć możliwości zgłoszenia przez pracownika wydatku na internet poniesionego przed oficjalną datą rozpoczęcia pracy.

    Zapytania globalne. Zamiast przeszukiwać miliony surowych fragmentów tekstu, system korzysta z wcześniej obliczonych podsumowań społeczności przy użyciu mechanizmu map-reduce.

    1. Wybierz poziom hierarchii – od szerokich superspołeczności po drobne lokalne klastry (poziom 0, 1, 2 itd.) – w zależności od zakresu, jaki wymaga odpowiedź.
    2. Mapa: pytanie jest wysyłane równocześnie do każdego podsumowania społeczności na danym poziomie. Model językowy ocenia każde z nich niezależnie i generuje tymczasową odpowiedź społeczności wraz z oceną trafności od 0 do 100.
    3. Filtrowanie i ranking: odrzuca się odpowiedzi o niskiej trafności, a pozostałe są uporządkowywane według priorytetów.
    4. Redukcja: najlepiej ocenione wnioski są przekazywane modelowi językowemu w ramach jednego okna kontekstowego, który syntetyzuje je w kompletną, niepowtarzalną odpowiedź z odnośnikami.

    Zapytania lokalne. GraphRAG nie wyrzuca wektorów – zmienia jedynie ich przeznaczenie. W wyszukiwaniu lokalnym wektory służą wyłącznie do lokalizacji entytetów w grafie. Gdy znajdą się te punkty wejścia, wyszukiwanie wektorowe ustaje, a przejście po grafie przejmuje kontrolę. Jako warunek wstępny konieczne jest utworzenie embeddingów opisów entytetów i przechowanie ich w bazie danych wektorowej.

    To stanowi rzeczywistą różnicę. W tradycyjnym RAG podobieństwo wektorowe jest głównym sposobem na pobieranie surowych fragmentów tekstu. W GraphRAG chodzi o celowe wyszukiwanie, które łączy pytanie z odpowiednimi entytetami, które pełnią jedynie rolę bram do grafu. W zależności od konfiguracji wyszukiwanie lokalne może również wykorzystywać jednostki tekstowe lub twierdzenia jako punkty wejścia.

    1. Przeprowadzić wyszukiwanie podobieństwa wektorowego w oparciu o embeddingi opisów entytetów, aby znaleźć punkty wejścia.
    2. Przypisać te entytety do ich dokumentów źródłowych i fragmentów tekstu, przemierzyć graf w celu zebrania informacji o sąsiednich węzłach i opisach krawędzi, pobrać dane współzmiennicze takie jak twierdzenia, adresy URL i daty, a także zebrać streszczenia lokalnych społeczności, do których należą entytety, co dodaje kontekstu otoczenia.
    3. Kazać modelowi językowemu ocenić każde z tych powiązań pod kątem ich istotności dla pytania, odrzucając te mniej istotne.
    4. Dodaj kontekst uporządkowany do promptu i wygeneruj uzasadnioną odpowiedź.

    Który wybrać

    Żaden z tych podejść nie jest lepszy we wszystkich przypadkach. Pasują one do różnych pytań i danych. Decyzja zależy od tego, jak złożony jest zbiór danych, jakie zapytania musisz obsłużyć oraz ile możesz wydać.

    Wybierz vector RAG, gdy chcesz szybkiego i taniego wyszukiwania pojedynczych faktów z niezależnych dokumentów, gdzie odpowiedź znajduje się w jednym akapicie lub na jednej stronie. Wybierz GraphRAG, gdy twoje źródła są gęste i ze sobą połączone, a pytania wymagają syntezy informacji z różnych dokumentów, analizy trendów w całym zbiorze danych lub śledzenia związków między elementami w dziedzinach takich jak prawo, badania naukowe i polityka.

    Praktyczne uproszczenie: vector RAG szuka igły w stogu siana, natomiast GraphRAG najpierw mapuje cały stóg siana, a dopiero potem przeprowadza wyszukiwanie.

    Vector RAG zmienił sposób, w jaki modele LLM pracują z wiedzą z zewnątrz, jednak skalowanie na złożone dane korporacyjne wymaga czegoś więcej niż tylko semantycznie podobnych wyszukiwań. Poprzez organizację tekstu w graf wiedzy z hierarchicznymi podsumowaniami społeczności, GraphRAG łączy celowe wyodrębnianie informacji z rozumowaniem na podstawie całego zbioru danych.

    Jeśli chcesz przeczytać więcej, oryginalny artykuł znajduje się pod adresem https://arxiv.org/abs/2404.16130, a szczegóły dotyczące projektu wyszukiwania lokalnego są opisane na stronie https://microsoft.github.io/graphrag/query/local_search/.

    Podobne materiały