Wyszukiwanie hybrydowe w usłudze Azure Cosmos DB dla NoSQL (wersja zapoznawcza)
Usługa Azure Cosmos DB for NoSQL obsługuje teraz zaawansowaną funkcję wyszukiwania hybrydowego, która łączy wyszukiwanie wektorowe z wyszukiwaniem pełnotekstowym (BM25) przy użyciu funkcji RRF (Reciprocal Rank Fusion).
Uwaga
Wyszukiwanie pełnotekstowe i hybrydowe jest w wczesnej wersji zapoznawczej i może nie być obecnie dostępne we wszystkich regionach.
Co to jest wyszukiwanie hybrydowe?
Wyszukiwanie hybrydowe wykorzystuje mocne strony metod wyszukiwania opartych na wektorach i tradycyjnych metodach wyszukiwania opartych na słowach kluczowych, aby dostarczać bardziej istotne i dokładne wyniki wyszukiwania. Wyszukiwanie hybrydowe jest łatwe w usłudze Azure Cosmos DB for NoSQL ze względu na możliwość przechowywania metadanych i wektorów w tym samym dokumencie.
Wyszukiwanie hybrydowe w usłudze Azure Cosmos DB for NoSQL integruje dwie odrębne metodologie wyszukiwania:
- Wyszukiwanie wektorowe: wykorzystuje modele uczenia maszynowego do zrozumienia semantycznego znaczenia zapytań i dokumentów. Pozwala to na bardziej zniuansowane i kontekstowe wyniki wyszukiwania, szczególnie przydatne w przypadku złożonych zapytań, w których tradycyjne wyszukiwanie słów kluczowych może być krótkie.
- Wyszukiwanie pełnotekstowe (BM25): dobrze ugruntowany algorytm, który ocenia dokumenty na podstawie obecności i częstotliwości słów i terminów. BM25 jest szczególnie skuteczny w przypadku prostych wyszukiwań słów kluczowych, zapewniając niezawodny punkt odniesienia dla istotności wyszukiwania.
Wyniki wyszukiwania wektorowego i wyszukiwania pełnotekstowego są następnie łączone przy użyciu funkcji RRF (Reciprocal Rank Fusion). RRF to metoda agregacji rangi, która scala rankingi z wielu algorytmów wyszukiwania w celu utworzenia pojedynczej, ujednoliconej klasyfikacji. Gwarantuje to, że ostateczne wyniki wyszukiwania korzystają z zalet zarówno metod wyszukiwania, jak i oferuje wiele korzyści.
- Ulepszone znaczenie: łącząc semantyczną wiedzę z dopasowywaniem słów kluczowych, wyszukiwanie hybrydowe zapewnia bardziej istotne wyniki dla szerokiego zakresu zapytań.
- Ulepszona dokładność: funkcja RRF zapewnia, że priorytetem są najbardziej istotne wyniki z obu metod wyszukiwania.
- Wszechstronność: Nadaje się do różnych przypadków użycia, w tym pobierania rozszerzonej generacji (RAG), aby poprawić odpowiedzi generowane przez moduł LLM uziemione na własnych danych.
Jak używać wyszukiwania hybrydowego
- Włącz funkcję wyszukiwania wektorowego w usłudze Azure Cosmos DB for NoSQL.
- Włącz funkcję pełnotekstowego i hybrydowego wyszukiwania noSQL w wersji zapoznawczej.
- Utwórz kontener z zasadami wektorów, zasadami pełnotekstowymi, indeksem wektorów i indeksem pełnotekstowym.
- Wstaw dane z właściwościami tekstowymi i wektorowymi.
- Uruchamianie zapytań hybrydowych względem danych.
Konfigurowanie zasad i indeksów na potrzeby wyszukiwania hybrydowego
Ważne
Obecnie zasady wektorów i indeksy wektorów są niezmienne po utworzeniu. Aby wprowadzić zmiany, utwórz nową kolekcję.
Przykładowe zasady wektorów
{
"vectorEmbeddings": [
{
"path":"/vector",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":3
},
}
Przykładowe zasady pełnotekstowe
{
"defaultLanguage": "en-US",
"fullTextPaths": [
{
"path": "/text",
"language": "en-US"
}
]
}
Przykładowe zasady indeksowania z indeksami pełnotekstowymi i wektorowymi
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
},
{
"path": "/vector/*"
}
],
"fullTextIndexes": [
{
"path": "/text"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "DiskANN"
}
]
}
Zapytania wyszukiwania hybrydowego
Zapytania wyszukiwania hybrydowego można wykonywać, wykorzystując RRF
funkcję systemową ORDER BY RANK
w klauzuli zawierającej VectorDistance
zarówno funkcję, jak i FullTextScore
. Na przykład zapytanie sparametryzowane w celu znalezienia najważniejszych wyników najbardziej odpowiednich wyników będzie wyglądać następująco:
SELECT TOP @k *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, @queryVector), FullTextScore(c.content, [@searchTerm1, @searchTerm2, ...]))
Załóżmy, że masz dokument zawierający wektorowe osadzanie przechowywane w każdym dokumencie we właściwości c.vector
i danych tekstowych zawartych we właściwości c.text. Aby uzyskać 10 najbardziej odpowiednich dokumentów przy użyciu wyszukiwania hybrydowego, zapytanie można napisać jako:
SELECT TOP 10 *
FROM c
ORDER BY RANK RRF(VectorDistance(c.vector, [1,2,3]), FullTextScore(c.text, ["text", "to", "search", "goes" ,"here])