Megosztás a következőn keresztül:


Hibrid lekérdezés létrehozása az Azure AI Searchben

A hibrid keresés egyetlen keresési kérelemben egyesíti a szöveget (kulcsszó) és a vektoros lekérdezéseket. A kérelem összes al lekérdezése párhuzamosan fut. Az eredmények egyesítése és átrendezése új keresési pontszámokkal történik, a Kölcsönös rangsor fúzió (RRF) használatával egységes eredményhalmazt ad vissza. A szemantikai rangsorolású hibrid lekérdezések sok esetben teljesítménymutató-tesztekenként a legrelevánsabb eredményeket adnak vissza.

Ebből a cikkből megtudhatja, hogyan:

  • Alapszintű kérés beállítása
  • Hibrid lekérdezések kialakítása további paraméterekkel és szűrőkkel
  • Relevancia javítása szemantikai rangsorolással vagy vektorsúlyokkal
  • A lekérdezési viselkedés optimalizálása szöveg- és vektorbemenetek vezérlésével

Feljegyzés

A 2024-09-01 előzetes verzió újdonsága, hogy a szűrőket csak a hibrid kérések vektor-alquereire célozhatja meg. Ez nagyobb pontosságot biztosít a szűrők alkalmazásának módjával kapcsolatban. További információkért tekintse meg a jelen cikk vektor-alquere vonatkozó szűrési szűrőit.

Előfeltételek

API vagy eszköz kiválasztása

  • Az Azure Portal Keresőböngészője (a stabil és az előzetes verziójú API keresési szintaxisát egyaránt támogatja) JSON-nézete lehetővé teszi a hibrid kérések beillesztését.

  • A 2024-07-01 stabil verzió vagy egy friss előzetes API-verzió, ha olyan előzetes verziójú funkciókat használ, mint a maxTextRecallSize és a countAndFacetMode(előzetes verzió).

    Az olvashatóság érdekében REST-példákkal ismertetjük az API-k működését. A REST-ügyfél, például a Visual Studio Code és a REST-bővítmény használatával hibrid lekérdezéseket hozhat létre. További információ : Rövid útmutató: Vektoros keresés REST API-k használatával.

  • Az Azure SDK-k újabb stabil vagy bétacsomagjai (lásd az SDK-szolgáltatások támogatásának változásnaplóit).

Hibrid lekérdezés beállítása a Search Explorerben

  1. A Search Explorerben győződjön meg arról, hogy az API-verzió 2024-07-01 vagy újabb előzetes API-verzió.

  2. A Nézet területen válassza a JSON-nézetet, hogy be tudja illeszteni egy vektoros lekérdezésbe.

  3. Cserélje le az alapértelmezett lekérdezéssablont egy hibrid lekérdezésre, például a "Hibrid lekérdezés futtatása" példa az 539. sortól kezdve a vektor rövid útmutatójában. A rövidség kedvéért a vektort ebben a cikkben csonkolja.

    A hibrid lekérdezésekben egy szöveges lekérdezés van megadva search, a vektoros lekérdezés pedig a következő alatt vectorQueries.vectorvan megadva.

    A szöveges lekérdezés és a vektoros lekérdezés lehet egyenértékű vagy eltérő, de gyakori, hogy ugyanazzal a szándékkal osztoznak.

    {
        "count": true,
        "search": "historic hotel walk to restaurants and shopping",
        "select": "HotelId, HotelName, Category, Tags, Description",
        "top": 7,
        "vectorQueries": [
            {
                "vector": [0.01944167, 0.0040178085, -0.007816401 ... <remaining values omitted> ], 
                "k": 7,
                "fields": "DescriptionVector",
                "kind": "vector",
                "exhaustive": true
            }
        ]
    }
    
  4. Válassza a Keresés lehetőséget.

Tipp.

A keresési eredmények könnyebben olvashatók, ha elrejti a vektorokat. A Lekérdezési beállítások területen kapcsolja be a Vektorértékek elrejtése a keresési eredmények között beállítást.

Hibrid lekérdezési kérelem (REST API)

A hibrid lekérdezések egyesítik a szöveges keresést és a vektorkeresést, ahol a search paraméter egy lekérdezési sztringet használ, és vectorQueries.vector a vektoros lekérdezést használja. A keresőmotor teljes szöveges és vektoros lekérdezéseket futtat párhuzamosan. Az összes egyezés egyesítését a kölcsönös rangsor fúzió (RRF) használatával értékeljük ki a relevancia szempontjából, és a válaszban egyetlen eredményhalmaz lesz visszaadva.

Az eredmények egyszerű szövegben jelennek meg, beleértve a vektorokat is.retrievable Mivel a numerikus vektorok nem hasznosak a keresési eredményekben, válasszon más mezőket az indexben proxyként a vektoregyezéshez. Ha például egy index "descriptionVector" és "descriptionText" mezőkkel rendelkezik, a lekérdezés megfelelhet a "descriptionVector" kifejezésnek, de a keresési eredmény a "descriptionText" szöveget is megjelenítheti. A paraméter használatával select csak az emberek által olvasható mezőket adhatja meg az eredményekben.

Az alábbi példa egy hibrid lekérdezéskonfigurációt mutat be.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "exhaustive": true,
            "k": 10
        },
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "exhaustive": true,
            "k": 10
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelName, Description, Address/City",
    "top": 10
}

Főbb pontok:

  • A vektoros lekérdezési sztring a vectorQueries.vector tulajdonságon keresztül van megadva. A lekérdezés a "DescriptionVector" mezőn fut. Állítsa be kind a "vektor" értéket a lekérdezés típusának jelzéséhez. Ha szeretné, állítsa exhaustive igaz értékre a vektormező teljes tartalmának lekérdezéséhez.

  • A kulcsszókeresés tulajdonságon keresztül search van megadva. Párhuzamosan fut a vektoros lekérdezéssel.

  • k Meghatározza, hogy hány legközelebbi szomszéd egyezés lesz visszaadva a vektoros lekérdezésből, és adja meg az RRF rangsorolónak.

  • top határozza meg, hogy hány egyezést ad vissza a válasz all-up. Ebben a példában a válasz 10 találatot tartalmaz, feltéve, hogy az egyesített eredmények legalább 10 találatot tartalmaznak.

Hibrid keresés szűrővel

Ez a példa egy szűrőt ad hozzá, amely a filterable keresési index nem meg nem felelő mezőire lesz alkalmazva.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "k": 10
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "vectorFilterMode": "postFilter",
    "filter": "ParkingIncluded",
    "top": "10"
}

Főbb pontok:

  • A szűrők a szűrhető mezők tartalmára vonatkoznak. Ebben a példában a ParkingIncluded mező logikai érték, és az indexsémában van megjelölve filterable .

  • Hibrid lekérdezésekben szűrőket alkalmazhat a lekérdezés végrehajtása előtt a lekérdezési felület csökkentése érdekében, vagy a lekérdezés végrehajtása után az eredmények levágásához. A "preFilter" az alapértelmezett formátum. A használathoz postFilterállítsa be a szűrőfeldolgozási módot az ebben a példában látható módon.

  • A lekérdezési eredmények közzétételekor előfordulhat, hogy az eredmények száma kisebb, mint az első n.

Hibrid keresés vektoralkotó lekérdezéseket célzó szűrőkkel (előzetes verzió)

A 2024-09-01 előzetes verzióval felülbírálhat egy globális szűrőt a keresési kérelemen egy másodlagos szűrő alkalmazásával, amely csak a hibrid kérések vektor-alquereire irányul.

Ez a funkció részletes vezérlést biztosít azáltal, hogy a szűrők csak a vektoros keresési eredményeket befolyásolják, így a kulcsszóalapú keresési eredmények nem változnak.

A célzott szűrő teljes mértékben felülírja a globális szűrőt, beleértve a biztonsági vágáshoz vagy térinformatikai kereséshez használt szűrőket is. Olyan esetekben, amikor globális szűrőkre van szükség, például biztonsági vágásra, ezeket a szűrőket kifejezetten be kell vonni a legfelső szintű szűrőbe és minden vektorszintű szűrőbe, hogy a biztonság és az egyéb korlátozások következetesen érvényesüljenek.

Célzott vektorszűrők alkalmazása:

Íme egy példa a hibrid lekérdezésre, amely szűrő felülbírálást ad hozzá. A "Rating gt 3" globális szűrőt futásidőben a filterOvrride váltja fel.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-09-01=preview

{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "exhaustive": true,
            "filterOverride": "Address/City eq 'Seattle'",
            "k": 10
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelName, Description, Address/City, Rating",
    "filter": "Rating gt 3"
    "debug": "vector",
    "top": 10
}

Feltételezve, hogy engedélyezte a szemantikai rangsorolót, és az indexdefiníció szemantikai konfigurációt tartalmaz, létrehozhat egy olyan lekérdezést, amely vektorkeresést és kulcsszókeresést is tartalmaz, szemantikai rangsorolással az egyesített eredményhalmaz felett. Igény szerint feliratokat és válaszokat is hozzáadhat.

Ha a szemantikai rangsorolást vektorokkal használja, győződjön meg arról, hogy k az 50-et állítja be. A szemantikai rangsoroló legfeljebb 50 találatot használ bemenetként. Ha 50-nél kevesebbet ad meg, az a szükséges bemenetek szemantikai rangsorolási modelljeit is megvonja.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "k": 50
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelName, Description, Tags",
    "queryType": "semantic",
    "semanticConfiguration": "my-semantic-config",
    "captions": "extractive",
    "answers": "extractive",
    "top": "50"
}

Főbb pontok:

  • A szemantikai rangsoroló legfeljebb 50 találatot fogad el az egyesített válaszból.

  • A "queryType" és a "szemanticConfiguration" megadása kötelező.

  • A "feliratok" és a "válaszok" megadása nem kötelező. Az értékek szó szerinti szövegből lesznek kinyerve az eredményekben. A rendszer csak akkor ad vissza választ, ha az eredmények olyan tartalmat tartalmaznak, amely a lekérdezésre adott válasz jellemzőivel rendelkezik.

Szemantikus hibrid keresés szűrővel

Ez a gyűjtemény utolsó lekérdezése. Ugyanaz a szemantikai hibrid lekérdezés, mint az előző példában, de egy szűrővel.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2024-07-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "k": 50
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelName, Description, Tags",
    "queryType": "semantic",
    "semanticConfiguration": "my-semantic-config",
    "captions": "extractive",
    "answers": "extractive",
    "filter": "ParkingIsIncluded'",
    "vectorFilterMode": "postFilter",
    "top": "50"
}

Főbb pontok:

  • A szűrési mód befolyásolhatja a szemantikai reranker számára elérhető eredmények számát. Ajánlott eljárásként célszerű a szemantikai rangsorolónak a dokumentumok maximális számát (50) megadni. Ha az előszűrők vagy a postfilterek túl szelektívek, előfordulhat, hogy kevesebb mint 50 dokumentumot ad meg a szemantikai rangsorolónak.

  • Az előszűrés a lekérdezés végrehajtása előtt történik. Ha az előszűrő 100 dokumentumra csökkenti a keresési területet, a vektoros lekérdezés a 100 dokumentum "DescriptionVector" mezőjén keresztül hajtja végre a k=50 legjobb egyezést. Ez az 50 egyező dokumentum ezután átadja az RRF-nek az egyesített eredményekért, majd a szemantikai rangsorolónak.

  • A postfilter a lekérdezés végrehajtása után lesz alkalmazva. Ha a k=50 50 egyezést ad vissza a vektoros lekérdezés oldalán, majd az 50 találatra alkalmazott utólagos szűrőt, az eredményeket a szűrőfeltételeknek megfelelő dokumentumok száma csökkenti. Így kevesebb mint 50 dokumentumot adhat át a szemantikai rangsorolónak. Tartsa szem előtt, ha szemantikai rangsort használ. A szemantikai rangsoroló akkor működik a legjobban, ha 50 dokumentumot ad meg bemenetként.

MaxTextRecallSize és countAndFacetMode beállítása

Feljegyzés

Ez a funkció jelenleg nyilvános előzetes verzióban érhető el. Ez az előzetes verzió szolgáltatásszintű szerződés nélkül érhető el, és éles számítási feladatokhoz nem ajánlott. Előfordulhat, hogy néhány funkció nem támogatott, vagy korlátozott képességekkel rendelkezik. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Ez a szakasz azt ismerteti, hogyan állíthatja be a bemeneteket hibrid lekérdezéshez a hibrid rangsorolási modellbe áramló BM25 rangsorolt eredmények mennyiségének szabályozásával. A BM25-rangsorolt bemenet vezérlése további lehetőségeket kínál a hibrid forgatókönyvek relevanciájának finomhangolására.

Javasoljuk, hogy a REST API 2024-05-01-preview verzióját tekintse meg.

Tipp.

Egy másik lehetőség a kiegészítő vagy helyettesítő technika, a vektoros súlyozás, amely növeli a vektoros lekérdezések fontosságát a kérelemben.

  1. A paraméterek megadásához használja a Keresés – POST vagy Keresés – GET 2024-05-01 előzetes verzióban.

  2. Adjon hozzá egy hybridSearch lekérdezésparaméter-objektumot a hibrid lekérdezés BM25 rangsorolt eredményeivel visszahívott dokumentumok maximális számának beállításához. Két tulajdonsága van:

    • maxTextRecallSize A hibrid lekérdezésekben használt kölcsönös rangsoroló (RRF) rangsorolójának biztosítandó BM25-rangsorolt eredmények számát adja meg. Az alapértelmezett érték 1000. A maximális érték 10 000.

    • countAndFacetMode A BM25 rangsorolt eredményeinek számát jelenti (és ha használja őket). Az alapértelmezett beállítás az összes olyan dokumentum, amely megfelel a lekérdezésnek. Igény szerint a "darabszám" hatókört is használhatja a maxTextRecallSize.

  3. Csökkentse, maxTextRecallSize ha a vektoros hasonlóság keresése általában túlteljesíti a hibrid lekérdezés szövegoldalát.

  4. Ha maxTextRecallSize nagy indexe van, és az alapértelmezett érték nem rögzíti a megfelelő számú eredményt. Nagyobb BM25-rangsorolt eredménykészlettel beállíthatja topskipnext és lekérheti az eredmények egy részét is.

Az alábbi REST-példák két használati esetet mutatnak be a beállításhoz maxTextRecallSize.

Az első példa 100-ra csökken maxTextRecallSize , és a hibrid lekérdezés szövegoldalát csupán 100 dokumentumra korlátozza. Azt is beállítjacountAndFacetMode, hogy csak azokat az eredményeket tartalmazza.maxTextRecallSize

POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-05-01-Preview 

    { 
      "vectorQueries": [ 
        { 
          "kind": "vector", 
          "vector": [1.0, 2.0, 3.0], 
          "fields": "my_vector_field", 
          "k": 10 
        } 
      ], 
      "search": "hello world", 
      "hybridSearch": { 
        "maxTextRecallSize": 100, 
        "countAndFacetMode": "countRetrievableResults" 
      } 
    } 

A második példa 5000-et emel maxTextRecallSize ki. Emellett a felső, a kihagyó és a mellette lévő eredményeket is használja a nagy eredményhalmazokból. Ebben az esetben a kérés a BM25-rangsorolt eredményekben az 1500–2000 pozíciótól kezdve lekéri a szöveges lekérdezési hozzájárulást az RRF összetett eredményhalmazhoz.

POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-05-01-Preview 

    { 
      "vectorQueries": [ 
        { 
          "kind": "vector", 
          "vector": [1.0, 2.0, 3.0], 
          "fields": "my_vector_field", 
          "k": 10 
        } 
      ], 
      "search": "hello world",
      "top": 500,
      "skip": 1500,
      "next": 500,
      "hybridSearch": { 
        "maxTextRecallSize": 5000, 
        "countAndFacetMode": "countRetrievableResults" 
      } 
    } 

Lekérdezési válasz konfigurálása

A hibrid lekérdezés beállításakor gondolja át a válaszstruktúrát. A válasz egy lapított sorkészlet. A lekérdezés paraméterei határozzák meg, hogy mely mezők vannak az egyes sorokban, és hány sor szerepel a válaszban. A keresőmotor rangsorolja a megfelelő dokumentumokat, és a legrelevánsabb eredményeket adja vissza.

A válasz mezői

A keresési eredmények a keresési index mezőiből retrievable állnak. Az eredmény a következő:

  • Minden retrievable mező (alapértelmezés szerint REST API).
  • A lekérdezés "select" paraméterében explicit módon felsorolt mezők.

A cikkben szereplő példák egy "select" utasítást használtak a válasz szövegmezőinek (nem aktor) megadásához.

Feljegyzés

A vektorok nem fordíthatók vissza emberi olvasható szöveggé, ezért ne adja vissza őket a válaszban. Ehelyett válassza ki a keresési dokumentumra jellemző nem adatmegjelenítő mezőket. Ha például a lekérdezés egy "DescriptionVector" mezőt céloz meg, egy egyenértékű szövegmezőt ad vissza, ha van egy ("Leírás") a válaszban.

Eredmények száma

A lekérdezések tetszőleges számú dokumentummal egyezhetnek, akárhányat is, ha a keresési feltételek gyengeek (például "search=*" null lekérdezés esetén). Mivel ritkán praktikus a kötetlen eredmények visszaadása, meg kell adnia a maximális értéket a teljes válaszhoz:

  • "top": n csak kulcsszóalapú lekérdezések eredményei (vektor nélkül)
  • "k": n csak vektoros lekérdezések eredményei
  • "top": n a "search" paramétert tartalmazó hibrid lekérdezések (szemantikai vagy anélküli) eredményei

A "k" és a "top" is választható. Meghatározatlan, a válaszban szereplő eredmények alapértelmezett száma 50. A "top" és a "skip" beállítással több találatot is megadhat, vagy módosíthatja az alapértelmezett értéket .

Feljegyzés

Ha hibrid keresést használ a 2024-05-01-preview API-ban, a maxTextRecallSize használatával szabályozhatja a kulcsszó-lekérdezés eredményeinek számát. Kombinálja ezt a "k" beállítással az egyes keresési alrendszerek (kulcsszó és vektor) reprezentációjának szabályozásához.

Szemantikai rangsoroló eredményei

Feljegyzés

A szemantikai rangsoroló legfeljebb 50 találatot vehet igénybe.

Ha szemantikai rangsorolót használ a 2024-05-01-es verziójú API-ban, ajánlott a "k" és a "maxTextRecallSize" értéket beállítani legalább 50 összegre. Ezután a "top" paraméterrel korlátozhatja a felhasználónak visszaadott eredményeket.

Ha szemantikai rangsorolót használ az előző API-kban, tegye a következőket:

  • ha csak kulcsszóalapú keresést végez (nincs vektor), állítsa a "top" értéket 50-re
  • ha a "k" hibrid keresési csoportot 50-re állítja, annak biztosítása érdekében, hogy a szemantikai rangsoroló legalább 50 találatot kapjon.

Rangsorolás

A rendszer több csoportot hoz létre hibrid lekérdezésekhez az opcionális szemantikai újraküldéssel vagy anélkül. Az eredmények rangsorolását a kölcsönös rangsor fúzió (RRF) számítja ki.

Ebben a szakaszban hasonlítsa össze az egyvektoros keresés és a felső eredmény egyszerű hibrid keresése közötti válaszokat. A különböző rangsorolási algoritmusok, a HNSW hasonlósági metrikái és az RRF ebben az esetben különböző nagyságrendű pontszámokat hoznak létre. Ez szándékosan van. Az RRF-pontszámok meglehetősen alacsonynak tűnhetnek, még magas hasonlóságú egyezéssel is. Az alacsonyabb pontszámok az RRF-algoritmus jellemzői. Az RRF-et tartalmazó hibrid lekérdezésekben a rangsorolt dokumentumok több reciprokja szerepel az eredményekben, mivel az RRF rangsorolt dokumentumainak viszonylag kisebb pontszáma van, szemben a tiszta vektorkereséssel.

Egyvektoros keresés: @search.score a koszinusz-hasonlóság (alapértelmezett vektor-hasonlóság távolságfüggvény) szerint rendezett eredményekhez.

{
    "@search.score": 0.8399121,
    "HotelId": "49",
    "HotelName": "Swirling Currents Hotel",
    "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
    "Category": "Luxury",
    "Address": {
    "City": "Arlington"
    }
}

Hibrid keresés: @search.score a kölcsönös rangsor fúzióval rangsorolt hibrid eredményekhez.

{
    "@search.score": 0.032786883413791656,
    "HotelId": "49",
    "HotelName": "Swirling Currents Hotel",
    "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
    "Category": "Luxury",
    "Address": {
    "City": "Arlington"
    }
}

Következő lépések

A következő lépésben javasoljuk, hogy tekintse át a Python, C# vagy JavaScript demo kódját.