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.
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:
- 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:
| 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
Brak komentarzy.