Sdílet prostřednictvím


Hybridní vyhledávání ve službě Cosmos DB (v Azure a Fabric)

Cosmos DB (v Azure a Fabric) podporuje funkci hybridního vyhledávání, která kombinuje vektorové vyhledávání s bodováním fulltextového vyhledávání (BM25) pomocí funkce Reciprocal Rank Fusion (RRF).

Hybridní vyhledávání využívá silné stránky vektorových i tradičních vyhledávacích metod založených na klíčových slovech k poskytování relevantnějších a přesnějších výsledků hledání. Hybridní vyhledávání je v Cosmos DB snadné díky možnosti ukládat metadata i vektory v rámci stejného dokumentu.

Hybridní vyhledávání ve službě Cosmos DB integruje dvě odlišné metodologie vyhledávání:

  • Vektorové vyhledávání: Využívá modely strojového učení k pochopení sémantického významu dotazů a dokumentů. Tato metodologie umožňuje podrobnější a kontextově uvědomělé výsledky hledání, zejména užitečné pro složité dotazy, ve kterých by tradiční hledání klíčových slov mohlo selhávat.

  • Fulltextové vyhledávání (BM25): Dobře zavedený algoritmus, který vyhodnotuje dokumenty na základě přítomnosti a četnosti slov a termínů. BM25 je efektivní pro jednoduché hledání klíčových slov a poskytuje robustní základ pro relevanci vyhledávání.

Výsledky vektorového vyhledávání a fulltextového vyhledávání se pak zkombinují pomocí funkce Reciproční Rank Fusion (RRF). RRF je metoda agregace pořadí, která slučuje řazení z více vyhledávacích algoritmů a vytváří jedno sjednocené řazení. Tato metoda zajišťuje, aby konečné výsledky hledání využívaly výhody obou přístupů hledání a nabízí více výhod.

  • Vylepšená relevance: Hybridní vyhledávání poskytuje relevantnější výsledky pro širokou škálu dotazů kombinací sémantického porozumění s párováním klíčových slov.

  • Vylepšená přesnost: Funkce RRF zajišťuje, že nejpřesnější výsledky obou metod hledání jsou upřednostňovány.

  • Všestrannost: Vhodné pro různé případy použití, včetně načítání rozšířené generace (RAG) ke zlepšení odpovědí generovaných velkým jazykovým modelem (LLM) na základě vlastních dat.

Projděte si tuto ukázkovou zásadu indexování s fulltextovými i vektorovými indexy:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/\"_etag\"/?"
    },
    {
      "path": "/vector/*"
    }
  ],
  "fullTextIndexes": [
    {
      "path": "/text"
    }
  ],
  "vectorIndexes": [
    {
      "path": "/vector",
      "type": "DiskANN"
    }
  ]
}

Důležité

V současné době jsou vektorové zásady a indexy vektorů neměnné po vytvoření. Pokud chcete provést změny, vytvořte novou kolekci. Ostatní indexy stále zůstávají proměnlivé.

Hybridní vyhledávací dotazy

Hybridní vyhledávací dotazy lze provádět pomocí RRF systémové funkce v ORDER BY RANK klauzuli, která zahrnuje funkci i VECTORDISTANCEFULLTEXTSCORE. Například parametrizovaný dotaz, který najde nejrelevantnější výsledky, by vypadal takto:

SELECT TOP @k
  *
FROM
  container c
ORDER BY
  RANK RRF(VECTORDISTANCE(c.vector, @queryVector), FULLTEXTSCORE(c.content, @searchTerm1, @searchTerm2, ...))

Předpokládejme, že máte dokument, který má vektorová zapouzdření uložená ve vlastnosti c.vector a textová data obsažená ve vlastnosti c.text v každém dokumentu. Pokud chcete získat 10 nejrelevavantnějších dokumentů pomocí hybridního vyhledávání, můžete dotaz zapsat takto:

SELECT TOP 10
  * 
FROM
  container c
ORDER BY
  RANK RRF(VECTORDISTANCE(c.vector, [1,2,3]), FULLTEXTSCORE(c.text, "searchable", "text", "goes" ,"here"))

Vážené hybridní vyhledávací dotazy

Volitelně můžete zadat pole hmotností , které ovlivní, jak důležité je skóre jednotlivých komponent ve RRF funkci. Pokud máte například dvě skóre komponent (VECTORDISTANCE a FULLTEXTSCORE) a chcete vážit vektorové vyhledávání dvakrát důležitější než bodování BM25, můžete jako poslední argument přidat matici čísel [2, 1], jak je znázorněno na RRF.

SELECT TOP 10
  *
FROM
  container c
ORDER BY
  RANK RRF(VECTORDISTANCE(c.vector, [1,2,3]), FULLTEXTSCORE(c.text, "searchable", "text", "goes" ,"here"), [2, 1])