Wyszukiwanie hybrydowe w systemach RAG: BM25, wektory oraz fuzja rankingu wzajemnego w praktyce
Hybrydowe wyszukiwanie w RAG: dlaczego metoda oparta wyłącznie na wektorach traci dokładne identyfikatory, jak Reciprocal Rank Fusion łączy BM25 z embeddingami oraz gdzie hybrydowe podejście wciąż pozostaje niewystarczające.
Źródła: Hybrid Search in RAG — BM25, Vectors, and Reciprocal Rank Fusion in Practice
Dodanie wyszukiwania według słów kluczowych do systemu wyszukiwania opartego wyłącznie na wektorach to jeden z najtańszych sposobów poprawy dokładności w RAG, a Anthropic zmierzył to na własnych korpusach: zastosowanie BM25 w kontekście obok embeddingów kontekstualnych zmniejszyło liczbę nieudanych wyników z pierwszej dwudziestki o aż 49 procent, bez żadnych zmian w modelu embeddingów.
Rozważmy przyczynę tego wyniku. Użytkownik wpisuje identyfikator pojazdu, np. GX-V5-5N. System czysto wektorowy zwraca ogólne instrukcje rejestracyjne i historię serwisową, a prawidłowy dokument nie znajduje się nawet w pierwszych dziesięciu wynikach. Embedding doskonale oddaje kontekst motoryzacyjny, i właśnie dlatego odrzuca tę dosłowną sekwencję. Nie chodzi tu o słabe embeddingi – problem ma charakter strukturalny i dotyczy każdego systemu RAG opartego wyłącznie na wektorach, co odpowiada temu, co tworzą większość standardowych instrukcji.
Poniżej: dlaczego łączenie wyszukiwania leksykalnego i wektorowego wymaga innej matematyki niż średniowanie ocen, co robi Reciprocal Rank Fusion, gdzie hybrydowy podejście przestaje być skuteczne oraz co należy zmierzyć przed jego włączeniem.
Idea w dwóch minutach
Czyste wyszukiwanie wektorowe systematycznie traci dokładne dopasowania, takie jak kody błędów, identyfikatory produktów i nazwy własne. Sam embedding nie jest zły – bliskość semantyczna i dopasowanie dosłowne to po prostu różne właściwości.
BM25, funkcja rankingu leksykalnego z lat 90., dostarcza tego, czego brakuje wektorom. Potrafi niemal bezkosztowo wykrywać rzadkie, specyficzne tokeny, ale w zamian pomija parafrazy i synonimy. Obie metody zawodzą w przeciwnych kierunkach, co stanowi strukturalną przyczynę ich łączenia, a nie tylko przejściową modę inżynieryjną.
Problem polega na tym, że ich wyniki nie mogą być dodawane. Wyniki BM25 są nieograniczone i zależą od korpusu, natomiast podobieństwo kosinowe mieści się w przedziale od ujemnej jedynki do jedynki. Suma 15,3 i 0,82 nie ma żadnego znaczenia. Dlatego nowoczesne silniki nie łączą tych wyników. Zamiast tego łączą pozycje rankingowe za pomocą metody Reciprocal Rank Fusion.
Hybryda jednak nie zawsze wygrywa. W przypadku zapytań opartych na dokładnych identyfikatorach sam BM25 może przewyższyć całą metodę fuzji. Ważne pytanie brzmi nie o to, czy używać hybrydy, ale jaki udział zapytań faktycznie tego wymaga, a to jest coś, co można zmierzyć.
Dwa uzupełniające się „ślepe punkty”
Wyobraźmy sobie dwóch młodszych kolegów o przeciwnych słabościach.
Pierwszy podejście jest tak dosłowne jak Ctrl+F. Gdy prosi się o stronę z kodem błędu ERR_CONNECTION_RESET, natychmiast ją znajduje. Gdy pyta się o problemy z połączeniem, pomija dokument dotyczący utraty sesji, ponieważ żadne z słów z zapytania się w nim nie pojawia.
Drugi podejście polega na czytaniu między wierszami. Wie, że problemy z połączeniem i utrata sesji opisują to samo. Gdy jednak prosi się o dokładny kod błędu, przekazuje ogólny opis awarii sieci, ponieważ rzadki zapis został rozcieńczony w ogólnej znaczeniowości całego zdania.
Żadne z tych podejść samo w sobie nie wystarcza. To cały argument w dwóch akapitach.
Co uwzględnia BM25
BM25 nie jest ani magią, ani przestarzałe. Opiera się na indeksie odwrotnym – tabeli, w której każde słowo jest powiązane z dokumentami je zawierającymi – dzięki czemu silnik nigdy nie przeszukuje całej kolekcji. Rankowanie opiera się na trzech intuicjach:
- Rzadkie terminy mają większe znaczenie. Identyfikator GX-V5-5N mówi o wiele więcej niż słowo „pojazd”.
- Powtórzenia prowadzą do nasycenia. Dziesiąte wystąpienie słowa ma znacznie mniejszy wpływ niż drugie, ponieważ krzywa staje się płaska po kilku powtórzeniach.
- Długość jest karana. Długie dokumenty nie powinny wygrywać tylko dlatego, że mają więcej możliwości dopasowań przypadkowych.
Model wektorowy opiera się na innym principle. Tekst przekształca się w listę liczb, które kodują znaczenie, a ranking opiera się na bliskości w tym przestrzeni, niezależnie od tego, czy zapytanie i dokument mają wspólne słowo. Jeden silnik mierzy stopień pokrycia znaków, a drugi – stopień pokrycia znaczenia.
Błąd kategorialny, którego należy unikać
Może się wydawać, że wyszukiwanie wektorowe to ulepszona wersja wyszukiwania pełnego tekstu – nowsza, inteligentniejsza i oczywisty wybór. To błąd kategorialny. Wektory nie zastępują wyszukiwania leksykalnego. Rozwiązują inne problemy i przez to tracą umiejętność, którą wyszukiwanie leksykalne posiadało bezkosztowo.
Jeśli korpus zawiera kody, identyfikatory lub nazwy własne, sama metoda embedding straci je, bez względu na to, jak dobry jest model. Ograniczenie wynika z tego, co reprezentuje wektor. Prawidłowe podejście polega na określeniu, jakie zapytania wymagają jakiej siły, co pozostawia problem łączenia dwóch list wyników mierzonych w niespokrewnionych jednostkach.
Dlaczego nie można po prostu dodać wyników oceniania
Prawdziwy instynkt inżynierski skłania do normalizacji, ważenia i dodawania. To jednak napotyka na fakt, którego nie da się usunąć poprzez dostrojenia.
BM25 nie ma teoretycznego górnego limitu. Jego wynik rośnie wraz z liczbą dopasowanych terminów z zapytania, ich rzadkością w korpusie oraz długością dokumentu, więc ten sam dokument otrzymuje różną wartość po pojawieniu się dziesięciu tysięcy nowych plików. Podobieństwo kosinowe, które porównuje kąt między dwoma wektorami, pozostaje w zakresie od ujemnej jedynki do jedynki.
Dodawanie 15,3 do 0,82 jest jak dodawanie kilogramów do funtów bez konwertacji: arytmetycznie możliwe, ale informacyjnie bezwartościowe. Można zastosować normalizację min-max lub z-score, ale wtedy oba systemy oceniania wymagają ponownej kalibracji za każdym razem, gdy zmienia się korpus, model embeddingu lub skład zapytań. Kalibracja, która musi być ponawiana po każdym przekatalogowaniu, jest długiem odkładanym.
Głosowanie nad pozycją
Fuzja wzajemnych rankingu unika tego problemu, ignorując oceny. Bierze pod uwagę jedynie ranking, jaki każdy silnik przypisał danemu dokumencie. Formuła jest prosta: zsumowana ocena dokumentu to suma, dla każdego silnika, wartości jednego podzielonego przez (k plus jego ranking na liście danego silnika). Dokument nieobecny na liście nie wnosi żadnego wkładu.
Dlatego dokument znajdujący się w pierwszej trójce obu list przewyższa ten, który jest na pierwszym miejscu w jednej liście, ale nie ma go w drugiej. RRF nagradza zgodność w kolejności, a nie pewność, przy czym pozycja w rankingu to jednostka, którą każdy system rankujący wytwarza w ten sam sposób.
Metoda pochodzi od Cormacka, Clarke’a i Büttchera z konferencji SIGIR 2009, długo przed pojawieniem się RAG. Ich uzasadnienie: najwyższe ranki powinny mieć największy wpływ, niższe ranki nie powinny całkowicie zanikać, a stała k łagodzi wpływ jakiegokolwiek pojedynczego, wyjątkowego systemu.
Uwaga na marginesie pojawiająca się podczas przeglądów projektów: standardowe wartość k równa 60 pochodzi z jednego pilotażowego testu i nie została zmieniona podczas późniejszych weryfikacji. Sami autorzy określili to jako nieprzemyślaną decyzję. Przy k=60 osoba z pierwszej pozycji uzyskuje wynik o około 1,6 procent wyższy niż osoba z drugiej pozycji, natomiast osoba z sześćdziesiątej pozycji ma wynik mniej więcej połowę mniejszy niż osoba z pierwszej pozycji.
W praktyce k funkcjonuje jak delikatna pokrętło, a nie dźwignia. Ważniejsze jest to, ilu kandydatów dostarcza każda z grup. Jeśli grupa wektorowa dostarcza pięćdziesięciu kandydatów, dokument znajdujący się na pięćdziesiątej pierwszej pozycji wnosi dokładnie zero punktów.
Jak hybryda stała się standardem
Najbardziej precyzyjne dane pochodzą z eksperymentów Anthropic z 2024 roku dotyczących kontekstowego wyszukiwania na własnych zbiorach danych, w których sprawdzano, jak często brakowało odpowiedniego fragmentu tekstowego w pierwszych dwudziestu wynikach. Same embeddingi kontekstowe zmniejszyły liczbę takich przypadków o 35 procent. Dodanie warstwy BM25 kontekstowego przyniosło redukcję o 49 procent, co oznacza, że element leksykalny sam w sobie dostarczył znaczną część korzyści wynikających z ulepszenia embeddingów.
Należy unikać błędnego interpretowania tych danych. W tym samym raporcie podano, że po dodaniu funkcji ponownego sortowania redukcja osiąga 67 procent, ale ponowne sortowanie to odrębna etapa wykorzystująca inny typ modelu. Fuzja danych z ponownym sortowaniem nie są synonimami, a łączenie ich na jednej slajdzie to powszechny błąd w prezentacjach.
Konwergencja dostawców mówi więcej niż jakikolwiek pojedynczy test wydajności. Elasticsearch, OpenSearch, Weaviate, Qdrant oraz Azure AI Search wszystkie oferują funkcję RRF w standardzie. Wyszukiwanie hybrydowe przeszło z kategorii zaawansowanej opcji na standardowe ustawienie fabryczne.
Koszt drugiego indeksu
Istnieje określona cena, którą należy uwzględnić przed podjęciem decyzji, a nie po pierwszym incydencie:
- więcej miejsca na dysku, w ilości zależnej od konfiguracji,
- kilka dodatkowych milisekund na krok fuzji,
- a co najważniejsze, kolejny element, który może stracić synchronizację. Jeśli dokument zostanie usunięty z indeksu wektorowego, ale pozostanie w indeksie leksykalnym, będzie się pojawiał jak duch.
Zespoły już korzystające z Postgresa mogą często skorzystać z rozwiązania opartego na indeksie leksykalnym, łącząc pgvector z wbudowanym wyszukiwaniem pełnego tekstu, całkowicie w SQL i bez konieczności wprowadzania nowej infrastruktury. Jeśli obecny system RAG opiera się wyłącznie na indeksach wektorowych, lepszym pytaniem jest, dlaczego brakuje mu BM25 – to kwestia długu technologicznego, a nie innowacji.
Gdzie hybryda przegrywa
Jednomyślność dostawców mogłaby sugerować, że rozwiązania hybrydowe zawsze wygrywają. Bezpośrednie testy są bardziej złożone, a nieoczekiwane wyniki pojawiają się, gdy analizuje się wyniki według typu zapytania zamiast ich średnicować.
W porównaniu Azure AI Search firmy Microsoft z 2023 roku rozwiązania hybrydowe przewyższyły te oparte wyłącznie na wektorach. Jeśli spojrzeć na to według kategorii, obraz jest mniej korzystny: w przypadku zapytań opartych wyłącznie na słowach kluczowych pojedynczy silnik leksykalny może dać wyższą ocenę niż wynik po fuzji. Średnia ukrywa to, co ujawnia analiza poszczególnych segmentów.
Drugi silnik nie zawsze poprawia wyniki
Wszędzie tam, gdzie silnik leksykalny ma rację, druga ocena ją osłabia. Załóżmy, że BM25 umieszcza prawidłowy dokument na pierwszym miejscu, a metoda wektorowa na dziesiątym. Fuzja spycha go poniżej dokumentu, który według obu metod znajduje się na trzecim miejscu. Zgodność przeważa nad dokładnością, co jest zamierzone, ale kosztuje to coś w niektórych typach zapytań.
Również jakość drugiego etapu ma znaczenie. Testy wydobywania informacji na wczesnym etapie w korpusie naukowym pokazały, że hybryda oparta na słabym modelu embeddingu plasuje się poniżej wyników uzyskanych wyłącznie za pomocą BM25, podczas gdy ta sama konfiguracja z silniejszym modelem plasuje się wyraźnie powyżej niego. Fuzja nie tworzy nic nowego; jedynie łączy istniejące dowody, a szum ma takie samo znaczenie jak sygnał.
To nie stoi w sprzeczności z pierwszym punktem. Jakość embeddingu decyduje o tym, jak wiele dodaje etap wektorowy, ale nawet najlepszy embedding nie może odzyskać dokładnego identyfikatora, którego nie reprezentuje. To dwa oddzielne wymiary.
Żaden z tych wyników nie przemawia przeciwko wyszukiwaniu hybrydowemu. Obie argumenty dotyczą konieczności pomiaru własnej dystrybucji zapytań przed włączeniem tej metody. Wiele zespołów wybiera hybrydę jako oczywisty standard i nigdy nie bierze pod uwagę tej dystrybucji.
Pomiar ten jest tani. Podziel logi zapytań na te z dokładnym identyfikatorem oraz te czysto koncepcyjne, a następnie oblicz wskaźnik dla każdej z grup osobno. To zajmuje godziny, a nie chwilę, podczas gdy pojedyncza liczba agregowana ukrywa regresję, która później powoduje problemy w produkcji.
Problem konsensusu
Fuzja rankingów ma subtelniejszą wadę, która ujawnia się wtedy, gdy silniki się zgadzają, a nie wtedy, gdy się nie zgadzają.
Weźmy przykład wyszukiwania w dokumentacji technicznej z zapytaniem dotyczącym konfiguracji OAuth za pomocą zmiennych środowiskowych. Metoda wektorowa zwraca ogólny przewodnik bezpieczeństwa – istotny w duchu, ale bez szczegółów dotyczących OAuth. BM25 zwraca dokładny wynik dotyczący OAuth, ale pochodzący z trzyletniego changloga. Żaden z nich nie jest najlepszą odpowiedzią, a fuzja nadal umieszcza słabszy z nich na pierwszym miejscu.
To jest bezpośredni skutek sposobu działania RRF. Przestarzały rejestr zmian został oceniony na poziomie średnim przez oba silniki, więc suma ich dwóch wzajemnych ocen przewyższyła wynik świeżej strony, którą polubił tylko jeden silnik. Dwie umiarkowane opinie przeważają nad jedną pewną i poprawną.
Filtracja przed fuzją
Poprawka znajduje się na etapie przed obliczeniami matematycznymi. W większości przypadków ścisłe filtry metadanych, takie jak świeżość, uprawnienia i status dokumentu, powinny być stosowane przed fuzją, a nie po niej. Fuzja nie powinna bierać pod uwagę kandydatów, którym nigdy nie pozwolono wziąć udziału. Niektóre systemy produkcyjne filtrowają dane później i dają dobre wyniki, więc to jest decyzja architektoniczna, którą należy przetestować na własnym korpusie, a nie prawo uniwersalne.
Sekwencja nie ma tu znaczenia estetycznego. Filtrowanie po fuzji usuwa przestarzałą stronę z wyników, natomiast świeża strona, która już straciła głosy i znalazła się poniżej progu, nadal pozostaje nieobecna. Filtrowanie przed fuzją zmienia zbiór kandydatów, nad którymi oba silniki głosują od samego początku.
W praktyce należy jednocześnie zastosować trzy filtry na wejściu obu etapów: uprawnienia użytkownika, status dokumentu oraz okno świeżości dostosowane do domeny. Obie części muszą otrzymać dokładnie te same filtry. W przeciwnym razie jedna z nich wypełni swój list kandydatów dokumentami, których druga nigdy nie widziała, a fuzja przekształci tę asymetrię w przewagę w rankingu.
Kolejny atut języków bogatych morfologicznie. Intensywna fleksja utrudnia dopasowanie leksykalne. Bez skutecznej lematyzacji BM25 traci dużą część swojej skuteczności, ponieważ warianty przypadków jednego słowa, takie jak polskie umowy i umowie lub niemieckie Vertrags i Verträgen, wyglądają jak zupełnie różne tokeny. To rzadki przypadek, gdy wektorowe podejście ratuje to leksykalne, a nie odwrotnie.
Dlatego hybrydowe metody naprawiają jedną grupę błędów, tworząc przy tym nową, a nic w procesie wyszukiwania nie może być uważane za wiarygodne bez jego sprawdzenia.
Co wynieść z tego
Spadek o 49 procent liczby nieudanych wyszukiwań nie wynikał z większego modelu ani większych zasobów GPU. Wynikał z zrozumienia, że jedna reprezentacja tekstu nie może służyć do obsługi dwóch fundamentalnie różnych typów zapytań.
- BM25 i wektory zawodzą w przeciwnych kierunkach, co stanowi strukturalną przyczynę konieczności ich połączenia.
- RRF łączy pozycje rankingu, a nie wyniki ocen, ponieważ skale BM25 i kosinusowe są niekompatybilne, a normalizacja nigdy nie eliminuje w pełni kosztów kalibracji.
- Poszukiwanie hybrydowe jest standardem wśród dostawców infrastruktury, więc pominięcie drugiego etapu stanowi dług techniczny, a nie konserwatyzm.
- Standard nie oznacza automatycznie lepszej efektywności. W zapytaniach opartych na dokładnych identyfikatorach sam BM25 może przewyższyć metody łączenia, a średnia metryka to ukryje.
- Należy zastosować filtry metadanych przed łączeniem, w przeciwnym razie zgodność między silnikami doprowadzi do tego, że przestarzały dokument zostanie umieszczony wyżej niż nowy.
W przyszłym tygodniu weź ostatnie tysiąc rzeczywistych zapytań, oznacz każde z nich jako zawierające dokładny identyfikator lub jako czysto koncepcyjne, a następnie oblicz stosunek. Następnie oceniaj dokładność oddzielnie dla obu grup i zachowaj dwa wiersze z wynikami, a nie uśrednienie połączone. Ta tabela, znacznie lepiej niż jakikolwiek benchmark dostawcy, pokazuje, czy rozwiązanie hybrydowe poprawi twój system, czy też da ci jedynie drugi indeks do obsługi. Wynik pokazuje również, w jakim stopniu twój ruch internetowy zależy od dokładnych ciągów znaków, co rzadko kiedy ktoś liczył.
Literatura pokrewna
- Notatki praktyczne: Ograniczenia wyszukiwania wektorowego w RAG — podobieństwo kosinowe i inne aspekty — Szczegółowy przewodnik po Notatkach praktycznych: Ograniczenia wyszukiwania wektorowego w RAG — podobieństwo kosinowe i inne aspekty: umowy, sprawdzenia oraz gotowe fragmenty kodu dla zespołów wdrażających ten model.
- Apache Doris 4.1: Wyszukiwanie wektorowe, przechowywanie w formacie JSON, OLAP i Lakehouse — Przegląd nowości w Apache Doris 4.1: indeksy wektorowe typu IVF, funkcja wyszukiwania BM25, dokumenty JSON o wielkości do 100 MB, Segment V3, pamięci cache zapytań, zapisy w formacie Iceberg, operacje MERGE INTO oraz TIMESTAMPTZ.