Powrót do strony głównej

Hybrydowe wyszukiwanie Manticore: BM25 + KNN

Hybrydowe wyszukiwanie w Manticore Search łączy BM25 i KNN za pomocą RRF dla optymalnej relewantności. Nadaje się dla RAG, support i e-commerce. Podano przykłady kodu i konfiguracje.

Hybrydowe wyszukiwanie w Manticore: RRF i przykłady
Advertisement 728x90

Wyszukiwanie hybrydowe w Manticore Search: połączenie BM25 i KNN

Wyszukiwanie hybrydowe w Manticore Search łączy wyszukiwanie pełnotekstowe BM25 i wyszukiwanie wektorowe KNN w jednym zapytaniu. Pozwala to jednocześnie uwzględniać dokładne słowa kluczowe i podobieństwo semantyczne. Dla zapytania "tanie buty do biegania" BM25 zapewni dopasowania tokenów, a KNN — znaczenie fraz takich jak "wygodne obuwie do joggingu".

Metoda wykorzystuje Reciprocal Rank Fusion (RRF) do łączenia posortowanych list. Dokumenty z wysokimi pozycjami w dowolnym z wyszukiwań otrzymują priorytet w końcowym rankingu.

Zalety podejścia hybrydowego

Wyszukiwanie pełnotekstowe jest skuteczne dla rzadkich terminów, SKU i kodów błędów. Wyszukiwanie wektorowe wychwytuje synonimy i język naturalny, ponieważ embeddingi bliskich pojęć znajdują się blisko siebie w przestrzeni.

Google AdInline article slot

Słabe strony metod:

  • BM25 słabo radzi sobie z synonimami.
  • KNN ignoruje dokładne identyfikatory bez obciążenia semantycznego.

Ekstrakcja hybrydowa zwiększa recall dla mieszanych zapytań, minimalizując potrzebę skomplikowanej logiki.

Scenariusze zastosowania

Wyszukiwanie hybrydowe jest aktualne w następujących przypadkach:

Google AdInline article slot
  • Zapytania z intencją i szczegółami, np. python error 403 forbidden — kod błędu w BM25, opis w KNN.
  • Potoki RAG dla LLM — dostarczanie najbardziej relewantnych fragmentów.
  • Katalogi z danymi strukturyzowanymi (modele produktów) i niestrukturyzowanymi (opisy).
  • Nieprzewidywalne wzorce użytkowników — dokładne frazy lub język opisowy.

W e-commerce hybryd przetwarza nazwy, opisy i embeddingi wizualne równolegle.

Mechanizm RRF

RRF agreguje rangi bez normalizacji ocen. Formuła: 1 / (rank_constant + rank). Domyślnie rank_constant=60.

Przykład łączenia top-3:

Google AdInline article slot

| Dokument | Ranga BM25 | Ranga KNN | Wynik RRF |

|----------|-----------|----------|----------|

| Doc A | 1 | 2 | 0.0325 |

| Doc C | 3 | 1 | 0.0323 |

| Doc B | 2 | - | 0.0161 |

| Doc D | - | 3 | 0.0159 |

Doc A prowadzi dzięki wysokim pozycjom na obu listach. RRF jest preferowany w stosunku do łączenia według ocen, ponieważ nie wymaga kalibracji skal.

Podzapytania (MATCH i KNN) są wykonywane równolegle, filtry stosowane do wszystkich.

Praktyczny przykład z bazami wiedzy

W bazach wsparcia zapytanie "Nie mogę połączyć się z serwerem" + kod E-5020.

Wyniki KNN:

| # | Tytuł | Odległość |

|---|-----------|------------|

|1| E-5030: DNS | 0.572 |

|2| E-2091: Timeout | 0.583 |

|3| E-5020: SSL | 0.605 |

Hybryd z MATCH('E-5020') i KNN:

SELECT title, hybrid_score()
FROM support_articles
WHERE knn(embedding, 'can not connect to the server')
  AND MATCH('E-5020')
LIMIT 5
OPTION fusion_method='rrf';

| # | Tytuł | Wynik hybrydowy |

|---|-------|--------------|

|1| Error E-5020: SSL Certificate Mismatch | 0.032 |

|2| E-5030 | 0.016 |

|3| E-2091 | 0.016 |

E-5020 awansuje na pierwsze miejsce: BM25 rejestruje dokładny kod, KNN — kontekst.

Uruchamianie wyszukiwania hybrydowego

Tryb automatyczny z hybrid_match():

SELECT id, hybrid_score()
FROM products
WHERE hybrid_match('running shoes');

JSON API:

POST /search
{
  "table": "products",
  "hybrid": { "query": "running shoes" }
}

Manticore generuje embeddingi, wykonuje wyszukiwania i łączy wyniki.

Kontrola jawna:

SELECT id, hybrid_score()
FROM products
WHERE match('running shoes')
  AND knn(embedding, (0.12, 0.45, 0.78, ...))
OPTION fusion_method='rrf';

Dostępne metryki: hybrid_score(), weight() (BM25), knn_dist().

Ustawienia łączenia

  • rank_constant: dominacja pozycji top (niskie wartości wzmacniają).
  • fusion_weights: wagi podzapytań, np. (text=0.5, knn=0.3).
  • window_size: rozmiar wyników pośrednich.

Wiele KNN:

SELECT id, hybrid_score()
FROM products
WHERE match('running shoes') AS text
  AND knn(title_vec, (0.12, 0.45, ...)) AS title_sim
  AND knn(image_vec, (0.88, 0.21, ...)) AS image_sim
OPTION fusion_method='rrf',
       fusion_weights=(text=0.5, title_sim=0.3, image_sim=0.2);

Co jest ważne

  • Wyszukiwanie hybrydowe rozdziela sygnały: identyfikatory w BM25, znaczenie w KNN.
  • RRF zapewnia stabilne łączenie bez kalibracji.
  • Obsługa wielu przestrzeni wektorowych dla danych multimodalnych.
  • Równoległe wykonanie minimalizuje opóźnienia.
  • Automatyczne generowanie embeddingów upraszcza integrację.

— Editorial Team

Advertisement 728x90

Czytaj dalej