Strona główna / Artykuły

Gdy RAG pobiera niewłaściwy dokument przy podobieństwie 0,89: bliskość vs istotność.

Dlaczego RAG może odzyskać niewłaściwy dokument przy podobieństwie 0,89: bliskość nie oznacza istotności, geometria embeddingów jest zniekształcona, a hybrydowe wyszukiwanie i ponowna sortowanie pomagają.

Wydawca: REACTAPP.TOP10 min czytania2204 słów

Źródła: *What if Your RAG Retrieves the Wrong Document — Even When the Similarity Score Looks Perfect?*

To powszechny obrazek w generacji wzbogacanej o wyszukiwanie: fragmenty tekstu są embedowane i indeksowane, użytkownik zadaje pytanie, zapytanie to jest również embedowane, podobieństwo kosinowe wybiera najlepsze k fragmenty, które trafiają do promptu, a model językowy udziela odpowiedzi. Najlepszy fragment otrzymał ocenę 0,89, co sugeruje wysoką pewność siebie, a odpowiedź nadal jest błędna.

Każdy, kto wdrożył więcej niż jeden system RAG, widział to zjawisko. Powtarza się ono na tyle często, że żadne modyfikacje sposobu dzielenia tekstu na fragmenty ani zmiany metod embedowania nie mogą go wyeliminować. Dlatego istotne pytanie brzmi: czy system mierzy istotność informacji, czy tylko ich geometryczne zbliżenie.

W przeglądzie technologii RAG z sierpnia 2026 roku opublikowanym w czasopiśmie Symmetry ta sprzeczność jest określana jako jedna z czterech strukturalnych rozbieżności w tej dziedzinie i nazywana jest niezgodnością geometryczno-semantyczną. Ważne jest, aby dokładnie zrozumieć, co oznacza ten termin. Nie stwierdza on, że wyszukiwanie wektorowe jest nieprawidłowe, ani nie jest to udowodniona teoria dotycząca możliwości geometrii. Jest to sposób określenia ograniczenia, które empirycznie występuje w bardzo różnych konfiguracjach wyszukiwania.

Krótki opis procesu

Bez użycia dodatkowych narzędzi RAG składa się z dwóch połączonych ze sobą etapów.

  • Podczas indeksowania dokumenty są dzielone na fragmenty, każdy z nich jest przetwarzany przez kodera w celu utworzenia wektora gęstego, a te wektory trafiają do indeksu takiego jak FAISS lub HNSW.
  • Podczas wyszukiwania pytanie jest również przetwarzane za pomocą tego samego kodera, obliczana jest podobieństwo do wektorów każdego fragmentu, a najbardziej odpowiednie wyniki są wybierane i przekazywane modelowi LLM jako kontekst.

Jedno kluczowe założenie utrzymuje całą strukturę w ruchu: odległość w przestrzeni wektorowej odzwierciedla semantyczną istotność w języku. Teksty o podobnym znaczeniu powinny znajdować się blisko siebie, a te o różnym znaczeniu daleko od siebie.

Przez większość czasu to założenie sprawdza się na tyle dobrze, by być przydatne, dlatego systemy gęstego wyszukiwania w ogóle działają. Problemy pojawiają się na obrzeżach, a w praktyce takie przypadki występują częściej, niż się spodziewa. Gdy system wyszukiwania wysoko ocenia dany tekst, odpowiada wtedy na pytanie, czy ten tekst znajduje się blisko innego w przestrzeni wektorowej, a nie na to, czy rozwiązuje on postawione pytanie. Zazwyczaj obie odpowiedzi są zgodne, a interesujące przypadki to te, w których się nie zgadzają.

Podobieństwo to nie istotność

Podobieństwo kosinowe mierzy, jak blisko dwa wektory wskazują w tym samym kierunku. Nie mierzy bezpośrednio, czy dany fragment odpowiada na pytanie. Przekrycie tych wektorów jest na tyle duże, by gęsty mechanizm wyszukiwania mógł być rzeczywiście przydatny, jednak są to różne koncepcje, a znaczna część niepowodzeń w wyszukiwaniu wynika z tej różnicy.

To spostrzeżenie jest stare. Artykuł z 2020 roku, który przedstawił metodę DPR, podaje charakterystyczne dane. Mechanizm wyszukiwania oparty na gęstym podwójnym koderze osiągnął 78,4 procent dokładności w rankingu pierwszych 20 wyników w zadaniach Natural Questions, a następnie spadł do 63,2 procent w zadaniach SQuAD, gdzie zwykły algorytm BM25 osiągnął 68,8 procent. Autorzy przypisali to uprzedzeniom związanym z rozkładem danych treningowych: pytania w SQuAD zawierają niezwykle wiele wspólnych słów z odpowiednimi fragmentami tekstu, a mechanizm porównywania leksykalnego lepiej wykorzystuje ten wzorzec niż gęsty koder trenowany na szerszych danych.

Jeden punkt danych nie stanowi dowodu na istnienie uniwersalnego prawa. Pokazuje on jednak konkretnie, że podobieństwo semantyczne i precyzja leksykalna mogą się różnić przy tym samym kryterium oceny i tym samym narzędziu wyszukiwania. Przegląd Symmetry uogólnia ten wzorzec: mechanizm dostosowany do podobnego znaczenia nie jest automatycznie dostosowany do tego jednego słowa, które ma znaczenie, i odwrotnie też jest prawdą. To, czy dotyczy to wszystkich scenariuszy wyszukiwania, najlepiej traktować jako hipotezę roboczą. Pasuje ona do doświadczeń wielu praktyków.

Gdzie zmienia się geometria

Na głębszym poziomie leży sam problem geometryczny. Gęste mapy wyszukiwania przekształcają tekst w ciągłą przestrzeń wektorową, niemal zawsze euklidesową, ponieważ iloczyn skalarny oraz podobieństwo kosinusowe zakładają taką przestrzeń. Przestrzeń euklidesowa dobrze pokazuje, że dwie rzeczy są podobne pod względem niektórych wymiarów. Mniej skutecznie radzi sobie z co najmniej trzema wzorcami, które stale występują w rzeczywistym tekście.

  • Hierarchia. Pies to ssak, który z kolei jest zwierzęciem. Równinna przestrzeń wektorowa nie posiada naturalnego pojęcia zawierania się jednego obiektu w drugim, a aproksymacja drzewa za pomocą odległości liniowych powoduje coraz większe zniekształcenia w miarę pogłębiania się hierarchii.
  • Synonimia versus bliska synonimia. Słowa „tani” i „niedrogi” powinny znajdować się blisko siebie. „Tani” i „słabo wykonany” raczej nie powinny, a mimo to tak często występują razem w tekstach treningowych, że ich wektory mogą być umieszczone bliżej siebie, niż uzasadnia to sama treść.
  • Czas. Prezes firmy to inna osoba w zależności od tego, kiedy napisano zdanie. Statyczne embeddingi nie mają osi dla faktów, które wygasają, chyba że coś wyżej w łańcuchu przekazuje te informacje.

Jednym z rozwiązań proponowanych w literaturze jest użycie przestrzeni hiperbolicznej zamiast przestrzeni euklidesowej. Odległości w niej rosną wykładniczo w kierunku zewnętrznym, dzięki czemu hierarchie przypominające drzewa są reprezentowane z mniejszą zniekształceniem, co umożliwia naturalne mapowanie na wiele poziomów oddalonych od siebie. Metody gęstego wyszukiwania w przestrzeni hiperbolicznej wykazują lepszą zdolność generalizacji w zadaniami związanych z hierarchiami koncepcyjnymi. Jest to jednak raczej kompromis niż pełne rozwiązanie – koszty obliczeniowe rosną, narzędzia są znacznie mniej rozwinięte, a hierarchia stanowi tylko jeden z trzech możliwych wzorców, więc korpus dominowany przez synonimię lub zmiany temporalne może nie odnieść żadnych korzyści z zmiany geometrii.

To właśnie wskazuje ta niespójność: różne założenia geometryczne wpływają na to, które relacje semantyczne będą dobrze reprezentowane. Jeśli wybierzemy układ euklidesowy, hierarchia zazwyczaj ucierpi. Gdy skorzystamy z układu hiperbolicznego, kosztem są wyższe wymagania obliczeniowe oraz niedojrzałe narzędzia, podczas gdy kwestie synonimii i czasu pozostaną nierozwiązane. Niezależnie od wybranego układu, ta decyzja pośrednio określa, które relacje system wyszukiwania potrafi dobrze obsłużyć, a które najprawdopodobniej błędnie oceni.

Przykład z dokumentacją

Załóżmy zestaw dokumentacji produktu i pytanie: jak sformatować moje hasło API?

Retriever zwraca fragment z tytułem „Jak sformatować hasło konta” z podobieństwem kosinowym 0,87. Jest to wysokie wartość, ponieważ funkcje sformatowania, klucze API oraz hasła znajdują się w bliskiej relacji z obszarami autoryzacji i zarządzania kontem. Fragment dotyczący rotacji kluczy API znajduje się w innej sekcji, jest sformułowany za pomocą mniej ogólnikowego słownictwa i ma wynik 0,81.

Najpierw wrócił niewłaściwy dokument, którego wynik przekraczałby każdy prosty próg istotności. Przestrzeń embeddingów poprawnie zauważyła, że oba tematy dotyczą bezpieczeństwa konta. Nie było jednak możliwości odróżnienia konkretnych procedur dla jednego tematu od procedur dla drugiego, gdy oba należą do tego samego klastra semantycznego.

To samo wzorzec ma zastosowanie do klauzul umownych różniących się jedynie negacją, instrukcji dotyczących dawek różniących się w zależności od podgrupy pacjentów oraz warunków finansowych różniących się w zależności od roku budżetowego. Za każdym razem bliskość wektorów odzwierciedla wspólny temat i nic nie mówi o tym, czy odpowiedź jest zgodna.

Szukarka sortuje kandydatów, ale nie wydaje werdyktu

Wiele pipeline’ów RAG zakłada bez słowa krytyki, że wynik z najwyższym rankiem (top-1 lub top-k) to odpowiedź na pytanie o miejsce przechowywania informacji. Lepiej postrzegać go jako kandydata, który nadal musi zdobyć miejsce w zapytaniu.

Retriwer, który przywraca stronę z hasłem w odpowiedzi na pytanie dotyczące klucza API, niekoniecznie zawodzi w swojej roli. Mówiąc ściśle, jego zadaniem jest tania pierwsza faza przetwarzania: zmniejszenie ogromnej liczby wyników do kilku prawdopodobnych kandydatów. Słabym punktem jest projekt, który przyjmuje pierwszy wynik jako ostateczną prawdę i nie bada go dalej. Łańcuch nie musi składać się z kroku zapytania, retriewera, wyboru najlepszych 1 wyniku oraz modelu LLM – może obejmować zapytanie, taniego retriewera o wysokim wskaźniku odnalezienia, zbiór kandydatów, wolniejszy i dokładniejszy model do ponownego rankowania, najlepszego kandydata oraz model LLM.

Błędy przy wyszukiwaniu i generowaniu są powiązane, ale odrębne, a ich mylne traktowanie sprawia, że niezgodność wydaje się gorsza, niż jest w rzeczywistości. Proces top-1 w jednym kroku nie może się naprawić, gdy ranking jest błędny. Proces, który traktuje wyszukiwanie jako tworzenie kandydatów i przekazuje rzeczywistą ocenę istotności do drugiego etapu, ma szansę zauważyć te niemal trafne wyniki – dokumenty wystarczająco bliskie w przestrzeni wektorowej, by wyglądać na zwycięzców, ale na tyle błędne pod względem treści, by mieć znaczenie.

Dlaczego produkcja zwraca na to uwagę

To nie jest tylko akademickie ujęcie. Różnica między bliskością a istotnością powoduje konkretny i kosztowny brak skuteczności.

  • Ciche wzmacnianie halucynacji. LLM nie potrafi rozpoznać, że dany fragment jest powiązany z tematem, ale jest błędny. Tworzy płynną, pewną siebie odpowiedź na podstawie niewłaściwego źródła, a taka pewna siebie, lecz błędna odpowiedź jest gorsza niż przyznanie się do braku wiedzy w niemal każdym zastosowaniu późniejszym.
  • Spadek precyzji w hierarchicznych korpusach. Zarówno przykłady z praktyki, jak i literatura wskazują, że im głębsza i bardziej zorganizowana jest baza wiedzy – z zagnieżdżonymi zasadami, wersjonowanymi specyfikacjami czy schematami organizacyjnymi – tym większe trudności ma prosty wyszukiwacz wektorowy. W opracowaniu proponuje się formalną metodę diagnostyczną, która mierzy, w jaki sposób precyzja spada wraz ze wzrostem głębokości hierarchii. Jest to przedstawiane jako przydatna miara, a nie ustalona krzywa, przy czym lepiej jest ją mierzyć w danym korpusie, niż zakładać jej wartości a priori.
  • Niewidoczne w zestawie do oceny, dopóki nie powodują kosztów. Standardowe metryki, takie jak recall@k na ogólnych parach pytań, nie podkreślają hierarchicznych ani blisko-synonimicznych różnic w taki sposób, jak to robi rzeczywiste korpusy dziedzinowe. Początkowo wszystko działa poprawnie, ale w trzecim tygodniu działania systemu pojawia się wersja problemu z hasłem kontra kluczem API.
  • Środki łagodzące

    To wcale nie oznacza, że metody intensywnej wyszukiwania nie działają. Oznacza to, że metoda wyszukiwania oparta na jednym mechanizmie jest niewystarczająco precyzyjna dla rzeczywistych korpusów. Te środki łagodzące są wymienione mniej więcej według tego, jak dużo architektura musi zostać zmodyfikowana.

    Hybrydowa wyszukiwanka, leksykalna plus intensywna. Uruchom BM25 oraz intensywną wyszukiwankę równolegle i połącz wyniki, na przykład za pomocą metody fuzji rankingu wzajemnego – to prosty i powszechnie stosowany sposób. Dzięki temu bezpośrednio eliminuje się problem związany z przeoczeniem pokrycia leksykalnego, nie ingerując przy tym w model embeddingów.

    # Minimal hybrid retrieval sketch: dense + BM25 fused via RRF
    from rank_bm25 import BM25Okapi
    import numpy as np
    
    def reciprocal_rank_fusion(dense_ranked_ids, bm25_ranked_ids, k=60):
        scores = {}
        for rank, doc_id in enumerate(dense_ranked_ids):
            scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank + 1)
        for rank, doc_id in enumerate(bm25_ranked_ids):
            scores[doc_id] = scores.get(doc_id, 0) + 1 / (k + rank + 1)
        return sorted(scores.items(), key=lambda x: -x[1])# dense_ranked_ids  = [doc_id, ...] from your vector store's top-k search
    # bm25_ranked_ids   = [doc_id, ...] from bm25.get_top_n(query_tokens, doc_ids, n=k)
    fused = reciprocal_rank_fusion(dense_ranked_ids, bm25_ranked_ids)
    

    Ponowna sortowanie za pomocą cross-encodera. Wykorzystaj gęste wyszukiwanie w celu taniego generowania 50 do 100 kandydatów o wysokim stopniu odnalezienia, a następnie przeprowadź ponowne sortowanie za pomocą cross-encodera, który bierze pod uwagę zarówno zapytanie, jak i dokument. Metoda ta jest droższa za parę elementów, ale znacznie lepiej radzi sobie w przypadkach, gdy treści są tematycznie bliskie, ale faktograficznie błędne, ponieważ nie polega na pojedynczym, stałym wektorze dla każdego tekstu.

    Przepisywanie lub dekompozycja zapytania. Przykładem jest RQ-RAG: system jest szkolony do ponownego sformułowania niejasnych lub wieloczęściowych zapytań przed przeprowadzeniem jakiegokolwiek wyszukiwania. Są one przydatne, gdy niezgodność wynika z zbyt ogólnego sformułowania zapytania, a nie z trudnej struktury w korpusie danych.

    Wyszukiwanie z uwzględnieniem struktury w stylu GraphRAG. W przypadku materiałów rzeczywiście hierarchicznych lub relacyjnych, takich jak schematy organizacyjne, zależności składniowe czy taxonomie produktów, należy tę strukturę wyraźnie przedstawić w postaci grafu, zamiast przymuszać jej przedstawienie w formie płaskiej struktury. Nie próbuje się już zwalczać jej geometrii – po prostu się jej unika.

    Embeddingi dostosowane do dziedziny. Należy dokonać drobnej optymalizacji kodera na podstawie trudnych przykładów negatywnych pochodzących z własnego korpusu organizacji, czyli par niemal synonimicznych, które są bliskie pod względem znaczenia, ale błędne jako odpowiedzi. Wyniki pokazują istotne zmniejszenie rozbieżności, choć nie jej całkowite usunięcie.

    Każda z tych metod naprawia tylko konkretny objaw, a żadna nie rozwiązuje leżącej u podstaw sprzeczności, co warto otwarcie przyznać.

    Większe pytanie badawcze

    Jeśli różne geometrie dobrze oddają różne rzeczy, naturalnym krokiem jest zastanowienie się, czy kształt przestrzeni reprezentacji mógłby dostosowywać się do zapytania lub korpusu, zamiast być ustalony z góry.

    Praca recenzji Symmetry wskazuje w tym kierunku i przedstawia to jako łamanie symetrii: wybór metryki euklidesowej, hiperbolicznej lub mieszanej oznacza wybór tej semantycznej symetrii, której rezygnujemy. Proponowanym kierunkiem jest hybrydowe uczenie się przestrzeni geometrycznych, w którym system dostosowuje swoją strukturę metryczną zgodnie z relacjami kodowanymi w każdym punkcie korpusu i nie przyjmuje jednej globalnej geometrii dla całego indeksu. Jest to kierunek zaproponowany w artykule recenzji, a nie gotowa technika z dostępnymi benchmarkami. Jest to hipoteza wartą obserwacji, a nie fundament, na którym można budować obecnie.

    To, co faktycznie zmienia się w sposób użyteczny, to pytanie, które należy zadać. Zamiast pytać, który model embeddingu jest najlepszy, pytanie zmienia się na to, jaki kształt faktycznie przybierają relacje semantyczne w danych oraz czy architektura wyszukiwania posiada jakiś mechanizm do reprezentowania tego kształtu.

    Co wynieść z tego

    W warunkach produkcyjnych wysoka podobieństwo kosinowe oraz prawidłowe wyszukiwanie zazwyczaj są na tyle blisko siebie, że różnica jest niewidoczna. Wysiłki projektowe powinny być skupione na przypadkach, gdy te dwa parametry oddalają się od siebie niezauważalnie – gdy wektory znajdują się blisko siebie ze względu na wspólny temat, a nie wspólną odpowiedź.

    Lepszy model embeddingów tego nie naprawi, podobnie jak żadna pojedyncza architektura. Równina geometryczna, niezależnie od tego, która zostanie wybrana, zawiera ukrytą hipotezę na temat tego, które relacje są najważniejsze w korpusie, i właśnie dlatego istnieją hybrydowe metody wyszukiwania, ponownego sortowania oraz indeksowanie uwzględniające strukturę: nikt nie może postawić takiej hipotezy bez żadnych środków ostrożności. Modele embeddingów nie są złe. Od przestrzeni geometrycznej wymagano wykonywania rozumowania semantycznego, do którego nigdy w pełni nie była przeznaczona, i radzi sobie ona imponująco aż do momentu, w którym przestaje to być możliwe.