Udostępnij za pośrednictwem


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.

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.
  1. Włącz funkcję wyszukiwania wektorowego w usłudze Azure Cosmos DB for NoSQL.
  2. Włącz funkcję pełnotekstowego i hybrydowego wyszukiwania noSQL w wersji zapoznawczej.
  3. Utwórz kontener z zasadami wektorów, zasadami pełnotekstowymi, indeksem wektorów i indeksem pełnotekstowym.
  4. Wstaw dane z właściwościami tekstowymi i wektorowymi.
  5. Uruchamianie zapytań hybrydowych względem danych.

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])