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
Vektort és nem adatvektormezőket tartalmazó
searchable
keresési index. Javasoljuk, hogy az Adatok importálása és vektorizálása varázslóval gyorsan hozzon létre indexet. Ellenkező esetben lásd : Index létrehozása és Vektormezők hozzáadása keresési indexhez.(Nem kötelező) Ha a szemantikai rangsorolót szeretné használni, a keresési szolgáltatásnak alapszintűnek vagy magasabbnak kell lennie, és engedélyezve van a szemantikai rangsoroló.
(Nem kötelező) Ha egy lekérdezési sztring beépített szöveg-vektor konvertálását szeretné elérni, hozzon létre és rendeljen hozzá vektorosítót a keresési index vektormezőihez.
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
A Search Explorerben győződjön meg arról, hogy az API-verzió 2024-07-01 vagy újabb előzetes API-verzió.
A Nézet területen válassza a JSON-nézetet, hogy be tudja illeszteni egy vektoros lekérdezésbe.
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ő alattvectorQueries.vector
van 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 } ] }
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 bekind
a "vektor" értéket a lekérdezés típusának jelzéséhez. Ha szeretné, állítsaexhaustive
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álathozpostFilter
á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:
Használja a legújabb előzetes verziójú Search Documents REST API-t vagy a szolgáltatást biztosító Azure SDK bétacsomagot.
Módosítsa a lekérdezési kérelmet, és adjon hozzá egy új
vectorQueries.filterOverride
paraméterkészletet egy OData-szűrőkifejezéshez.
Í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
}
Szemantikus hibrid keresés
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.
A paraméterek megadásához használja a Keresés – POST vagy Keresés – GET 2024-05-01 előzetes verzióban.
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 amaxTextRecallSize
.
Csökkentse,
maxTextRecallSize
ha a vektoros hasonlóság keresése általában túlteljesíti a hibrid lekérdezés szövegoldalát.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íthatjatop
skip
next
é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.