Vektorindex létrehozása
Az Azure AI Searchben a vektortároló indexsémával rendelkezik, amely vektor- és nemvektormezőket határoz meg, vektorkonfigurációt a beágyazási területet létrehozó és tömörítő algoritmusokhoz, valamint a lekérdezési kérelmekben használt vektormező-definíciók beállításait.
Az Index létrehozása vagy frissítése API létrehozza a vektortárolót. A vektoradatok indexeléséhez kövesse az alábbi lépéseket:
- Séma definiálása vektoralgoritmusokkal és opcionális tömörítéssel
- Vektormező-definíciók hozzáadása
- Előre elkészített adatok betöltése külön lépésként, vagy integrált vektorizálás használata adattömbözéshez és kódoláshoz az indexelés során
Ez a cikk ismerteti a munkafolyamatot, és REST-et használ az ábrához. Miután megismerte az alapszintű munkafolyamatot, folytassa az Azure SDK-kódmintákkal az azure-search-vector-samples adattárban, hogy útmutatást nyújtsunk ezeknek a funkcióknak a tesztelési és éles kódban való használatához.
Tipp.
Az Azure Portal használatával hozzon létre egy vektorindexet , és próbálja meg az integrált adattömb-készítést és vektorizálást.
Előfeltételek
Azure AI Search, bármely régióban és bármilyen szinten. A 2019. január előtt létrehozott szolgáltatásokban van egy kis részhalmaz, amely nem tud vektorindexet létrehozni. Ha ez Vonatkozik Önre, hozzon létre egy új szolgáltatást a vektorok használatához. Az integrált vektorizálást (az Azure AI-t meghívó képességkészleteket) tartalmazó számítási feladatok indexeléséhez az Azure AI Searchnek ugyanabban a régióban kell lennie, mint az Azure OpenAI vagy az Azure AI-szolgáltatások.
Az indexbe való feltöltéshez már meglévő vektorbeágyazással kell rendelkeznie, vagy használhat integrált vektorizálást, ahol a beágyazási modelleket egy indexelő folyamat egy képességkészletéből hívhatja meg.
Ismernie kell a beágyazások létrehozásához használt modell méretkorlátját, hogy ezt a korlátot hozzárendelhesse a vektormezőhöz. Az integrált vektorizálás véges számú beágyazási modellt támogat. A text-embedding-ada-002 esetében a dimenziók 1536-nál vannak rögzítve. A 3-kicsi vagy a 3-nagy méretű szövegbeágyazáshoz a vektor hossza 1 és 1536, illetve 3072 lehet.
Azt is tudnia kell, hogy milyen hasonlósági metrikát használjon. Az Azure OpenAI-beli modellek beágyazásához a hasonlóság kiszámítása a következővel
cosine
történik: .Ismernie kell az indexek létrehozását. A sémának tartalmaznia kell a dokumentumkulcs mezőit, a keresendő vagy szűrni kívánt egyéb mezőket, valamint az indexelés és lekérdezések során szükséges viselkedések egyéb konfigurációit.
Dokumentumok előkészítése indexeléshez
Az indexelés előtt állítson össze egy hasznos dokumentumot, amely vektor- és nem adatmezőket tartalmaz. A dokumentumszerkezetnek meg kell felelnie az indexsémának.
Győződjön meg arról, hogy a dokumentumok:
Adjon meg egy mezőt vagy metaadat-tulajdonságot, amely egyedileg azonosítja az egyes dokumentumokat. Minden keresési indexhez dokumentumkulcs szükséges. A dokumentumkulcs követelményeinek teljesítéséhez a forrásdokumentumnak egy olyan mezővel vagy tulajdonságsal kell rendelkeznie, amely egyedileg azonosíthatja azt az indexben. Ezt a forrásmezőt le kell képezni egy típusú
Edm.String
indexmezőre éskey=true
a keresési indexre.Adjon meg vektoradatokat (egy pontosságú lebegőpontos számok tömbje) a forrásmezőkben.
A vektormezők egy olyan tömböt tartalmaznak, amelyet modellek beágyazásával hoznak létre, egy beágyazással mezőnként, ahol a mező legfelső szintű mező (nem beágyazott vagy összetett típus része). A legegyszerűbb integrációhoz az Azure OpenAI-ban ajánlott beágyazási modelleket használni, például szöveges dokumentumok szövegbeágyazási-3-as modelljét vagy képekhez készült Képlekérés REST API-t.
Ha függőséget tud vállalni az indexelők és a képességkészletek között, fontolja meg az integrált vektorizálást, amely képeket és szöveges tartalmakat kódol az indexelés során. A meződefiníciók vektormezőkhöz tartoznak, de a bejövő forrásadatok lehetnek szövegek vagy képek, amelyeket az indexelés során vektortömbökké konvertálnak.
Adjon meg más mezőket emberileg olvasható tartalommal a lekérdezési válaszhoz, valamint olyan hibrid lekérdezési forgatókönyvekhez, amelyek teljes szöveges keresést vagy szemantikai rangsorolást tartalmaznak ugyanabban a kérésben.
A keresési indexnek tartalmaznia kell a támogatni kívánt lekérdezési forgatókönyvek mezőit és tartalmát. Tegyük fel, hogy termékneveket, verziókat, metaadatokat vagy címeket szeretne keresni vagy szűrni. Ebben az esetben a hasonlósági keresés nem különösen hasznos. A kulcsszókeresés, a geokeresés vagy a szűrők jobb választás lenne. A vektor- és nemvektoradatok átfogó mezőgyűjteményét tartalmazó keresési index maximális rugalmasságot biztosít a lekérdezések felépítéséhez és a válaszok összetételéhez.
A vektor- és nemvektormezőket tartalmazó dokumentumok hasznos adatainak rövid példája a jelen cikk terhelésvektor-adatszakaszában található.
Vektorkeresési konfiguráció hozzáadása
A vektorkonfiguráció az indexelés során használt paramétereket adja meg a "legközelebbi szomszéd" információ létrehozásához a vektorcsomópontok között:
- Hierarchikus navigálható kisvilág (HNSW)
- Teljes KNN
Ha egy mezőben a HNSW értéket választja, a lekérdezési időpontban teljes KNN-t választhat. A másik irány azonban nem működik: ha a teljesség igénye mellett dönt, később nem kérhet HNSW-keresést, mert a hozzávetőleges keresést lehetővé tevő további adatstruktúrák nem léteznek.
A vektorkonfiguráció opcionálisan kvantálási módszereket is meghatároz a vektorméret csökkentésére:
- Skaláris
- Bináris (csak 2024-07-01-ben és újabb Azure SDK-csomagokban érhető el)
A legújabb verzióra való migrálásra vonatkozó utasításokért tekintse meg a REST API frissítése című témakört.
2024-07-01 általánosan elérhető. Támogatja a következő vektorkonfigurációt:
-
vectorSearch.algorithms
támogatja a HNSW-t és a teljes KNN-t. -
vectorSearch.compressions
támogatja a skaláris és bináris kvantálást, a túlméretezést és az eredeti vektorokkal való újraszámítást. -
vectorSearch.profiles
az algoritmusok és a tömörítési konfigurációk több kombinációját is biztosítják.
Ügyeljen arra, hogy legyen stratégiája a tartalom vektorizálására. A beépített kódoláshoz integrált vektorizálást és lekérdezési idő vektorizálókat javasoljuk.
Az index létrehozásához használja az Index létrehozása vagy frissítése API-t.
Adjon hozzá egy szakaszt
vectorSearch
az indexben, amely meghatározza a beágyazási terület létrehozásához használt keresési algoritmusokat."vectorSearch": { "compressions": [ { "name": "scalar-quantization", "kind": "scalarQuantization", "rerankWithOriginalVectors": true, "defaultOversampling": 10.0, "scalarQuantizationParameters": { "quantizedDataType": "int8" } }, { "name": "binary-quantization", "kind": "binaryQuantization", "rerankWithOriginalVectors": true, "defaultOversampling": 10.0, } ], "algorithms": [ { "name": "hnsw-1", "kind": "hnsw", "hnswParameters": { "m": 4, "efConstruction": 400, "efSearch": 500, "metric": "cosine" } }, { "name": "hnsw-2", "kind": "hnsw", "hnswParameters": { "m": 8, "efConstruction": 800, "efSearch": 800, "metric": "hamming" } }, { "name": "eknn", "kind": "exhaustiveKnn", "exhaustiveKnnParameters": { "metric": "euclidean" } } ], "profiles": [ { "name": "vector-profile-hnsw-scalar", "compression": "scalar-quantization", "algorithm": "hnsw-1" } ] }
Főbb pontok:
A tömörítés, az algoritmus és a profil egyes konfigurációinak neveinek egyedinek kell lenniük az indexen belüli típusukhoz.
vectorSearch.compressions.kind
lehet vagyscalarQuantization
binaryQuantization
.vectorSearch.compressions.rerankWithOriginalVectors
Az eredeti, tömörítetlen vektorokkal újraszámítja a hasonlóságot, és újraszámítja a kezdeti keresési lekérdezés által visszaadott felső eredményeket. A tömörítetlen vektorok akkor is léteznek a keresési indexben, hastored
hamisak. Ez a tulajdonság opcionális. Alapértelmezett érték: true (igaz).vectorSearch.compressions.defaultOversampling
a lehetséges eredmények szélesebb halmazát veszi figyelembe, hogy ellensúlyozza a kvantálásból származó információk csökkenését. A lehetséges eredmények képlete ak
lekérdezésben található, túlbélyegző szorzóval. Ha például a lekérdezés 5-et ad megk
, és a túlhasználat 20, akkor a lekérdezés 100 dokumentumot kér le az újrabontáshoz, az eredeti tömörítetlen vektor használatával erre a célra. A rendszer csak a legjobbank
rerankedt eredményeket adja vissza. Ez a tulajdonság opcionális. Az alapértelmezett érték 4.vectorSearch.compressions.scalarQuantizationParameters.quantizedDataType
beállításnak a következőre kell állítania:int8
. Jelenleg ez az egyetlen primitív adattípus, amely támogatott. Ez a tulajdonság opcionális. Az alapértelmezett szint aint8
.vectorSearch.algorithms.kind
"hnsw"
"exhaustiveKnn"
vagy . Ezek a közelítő legközelebbi szomszédok (ANN) algoritmusok, amelyek a vektortartalmak indexelés közbeni rendszerezésére szolgálnak.vectorSearch.algorithms.m
a kétirányú kapcsolat száma. Az alapértelmezett érték 4. A tartomány 4 és 10 között van. Az alacsonyabb értékek kevesebb zajt adnak vissza az eredményekben.vectorSearch.algorithms.efConstruction
az indexelés során használt legközelebbi szomszédok száma. Az alapértelmezett érték 400. A tartomány 100 és 1000 között van."vectorSearch.algorithms.fSearch
a keresés során használt legközelebbi szomszédok száma. Az alapértelmezett érték 500. A tartomány 100 és 1000 között van.vectorSearch.algorithms.metric
Az Azure OpenAI használata esetén "koszinusznak" kell lennie, ellenkező esetben használja a használt beágyazási modellhez társított hasonlósági metrikát. A támogatott értékek acosine
,dotProduct
euclidean
,hamming
(bináris adatok indexelésére használatosak).vectorSearch.profiles
absztrakciós réteg hozzáadása a gazdagabb definíciókhoz. A rendszer definiál egyvectorSearch
profilt, majd név alapján hivatkozik az egyes vektormezőkre. Ez a tömörítési és algoritmuskonfigurációk kombinációja. Ez az a tulajdonság, amelyet egy vektormezőhöz rendel, és meghatározza a mezők algoritmusát és tömörítését.
Vektormező hozzáadása a mezők gyűjteményéhez
A mezőgyűjteménynek tartalmaznia kell egy mezőt a dokumentumkulcshoz, a vektormezőkhöz és a hibrid keresési forgatókönyvekhez szükséges egyéb mezőkhöz.
A vektormezőket az adattípusuk, a dimensions
vektorok kimenetéhez használt beágyazási modellen alapuló tulajdonság és egy vektorprofil jellemzi.
2024-07-01 általánosan elérhető.
Az index létrehozásához használja az Index létrehozása vagy frissítése parancsot .
Adjon meg egy vektormezőt az alábbi attribútumokkal. Mezőnként egy generált beágyazást tárolhat. Minden vektormezőhöz:
-
type
vektoros adattípusoknak kell lenniük.Collection(Edm.Single)
A modellek beágyazásához leggyakrabban használt. -
dimensions
a beágyazási modell által létrehozott dimenziók száma. A text-embedding-ada-002 esetében az 1536-os helyre van javítva. A text-embedding-3 modellsorozathoz több értéktartomány is rendelkezésre áll. Ha integrált vektorizálást és beágyazási képességet használ vektorok létrehozásához, győződjön meg arról, hogy ez a tulajdonság a beágyazási képesség által használt dimenzióértékre van állítva. -
vectorSearchProfile
az index más részén definiált profil neve. -
searchable
igaznak kell lennie. -
retrievable
lehet igaz vagy hamis. A True a nyers vektorokat (1536)egyszerű szövegként adja vissza, és tárhelyet használ fel. Állítsa igaz értékre, ha vektoreredményt ad át egy alsóbb rétegbeli alkalmazásnak. -
stored
lehet igaz vagy hamis. Meghatározza, hogy a vektorok egy további másolatát tárolja-e a rendszer a lekéréshez. További információ: Vektorméret csökkentése. -
filterable
,facetable
hamisnaksortable
kell lennie.
-
Ha előszűrést vagy utószűrést szeretne meghívni a vektoros lekérdezésen, szűrhető, nem megadó mezőket adhat hozzá a gyűjteményhez, például a "cím" értéket igaz értékre
filterable
állítva.Adjon hozzá más mezőket, amelyek meghatározzák az indexelt szöveges tartalom tartalmát és szerkezetét. Legalább egy dokumentumkulcsra van szüksége.
Olyan mezőket is hozzá kell adnia, amelyek hasznosak a lekérdezésben vagy a válaszában. Az alábbi példa a cím és a tartalom vektormezőit ("titleVector", "contentVector") mutatja be, amelyek a vektorokkal egyenértékűek. A keresési eredmények rendezéséhez, szűréséhez és olvasásához is hasznos mezőket biztosít az egyenértékű szöveges tartalomhoz ("title", "content").
Az alábbi példa a mezők gyűjteményét mutatja be:
PUT https://my-search-service.search.windows.net/indexes/my-index?api-version=2024-07-01&allowIndexDowntime=true Content-Type: application/json api-key: {{admin-api-key}} { "name": "{{index-name}}", "fields": [ { "name": "id", "type": "Edm.String", "key": true, "filterable": true }, { "name": "title", "type": "Edm.String", "searchable": true, "filterable": true, "sortable": true, "retrievable": true }, { "name": "titleVector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": true, "stored": true, "dimensions": 1536, "vectorSearchProfile": "vector-profile-1" }, { "name": "content", "type": "Edm.String", "searchable": true, "retrievable": true }, { "name": "contentVector", "type": "Collection(Edm.Single)", "searchable": true, "retrievable": false, "stored": false, "dimensions": 1536, "vectorSearchProfile": "vector-profile-1" } ], "vectorSearch": { "algorithms": [ { "name": "hnsw-1", "kind": "hnsw", "hnswParameters": { "m": 4, "efConstruction": 400, "efSearch": 500, "metric": "cosine" } } ], "profiles": [ { "name": "vector-profile-1", "algorithm": "hnsw-1" } ] } }
Vektoradatok betöltése indexeléshez
Az indexeléshez megadott tartalomnak meg kell felelnie az indexsémának, és tartalmaznia kell egy egyedi sztringértéket a dokumentumkulcshoz. Az előre elkészített adatok egy vagy több vektormezőbe vannak betöltve, amelyek együtt létezhetnek más, nem adatmegjelenítő tartalmakat tartalmazó mezőkkel.
Az adatbetöltéshez leküldéses vagy lekéréses módszereket is használhat.
Dokumentumok – Index használata vektor- és nem adatmegjelenítési adatok indexbe való betöltéséhez. Az indexelés leküldéses API-i minden stabil és előzetes verzióban azonosak. A dokumentumok betöltéséhez használja az alábbi API-k bármelyikét:
POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/index?api-version=2024-07-01
{
"value": [
{
"id": "1",
"title": "Azure App Service",
"content": "Azure App Service is a fully managed platform for building, deploying, and scaling web apps. You can host web apps, mobile app backends, and RESTful APIs. It supports a variety of programming languages and frameworks, such as .NET, Java, Node.js, Python, and PHP. The service offers built-in auto-scaling and load balancing capabilities. It also provides integration with other Azure services, such as Azure DevOps, GitHub, and Bitbucket.",
"category": "Web",
"titleVector": [
-0.02250031754374504,
. . .
],
"contentVector": [
-0.024740582332015038,
. . .
],
"@search.action": "upload"
},
{
"id": "2",
"title": "Azure Functions",
"content": "Azure Functions is a serverless compute service that enables you to run code on-demand without having to manage infrastructure. It allows you to build and deploy event-driven applications that automatically scale with your workload. Functions support various languages, including C#, F#, Node.js, Python, and Java. It offers a variety of triggers and bindings to integrate with other Azure services and external services. You only pay for the compute time you consume.",
"category": "Compute",
"titleVector": [
-0.020159931853413582,
. . .
],
"contentVector": [
-0.02780858241021633,
. . .
],
"@search.action": "upload"
}
. . .
]
}
Vektortartalom ellenőrzése az indexben
Érvényesítési célból lekérdezheti az indexet a Search Explorerrel az Azure Portalon vagy egy REST API-hívással. Mivel az Azure AI Search nem tud vektorokat emberi olvasásra alkalmas szöveggé alakítani, próbáljon meg ugyanabból a dokumentumból olyan mezőket visszaadni, amelyek bizonyítják az egyezést. Ha például a vektoros lekérdezés a "titleVector" mezőt célozza meg, a keresési eredményekhez kiválaszthatja a "cím" lehetőséget.
A mezőket "lekérdezhetőként" kell hozzárendelni az eredményekhez.
Tekintse át a keresési felügyeleti>indexek indexeitaz indexek teljes méretének és a vektorindex méretének megtekintéséhez. A pozitív vektorindex-méret azt jelzi, hogy a vektorok jelen vannak.
Index lekérdezése a Search Explorerrel. A Search Explorernek két nézete van: Lekérdezés nézet (alapértelmezett) és JSON nézet.
Lekérdezési beállítások megadása >Vektorértékek elrejtése a keresési eredményekben olvashatóbb eredmények érdekében.
Használja a JSON nézetet vektoros lekérdezésekhez. Beillesztheti a végrehajtani kívánt vektoros lekérdezés JSON-definícióját, vagy használhatja a beépített szöveg-vektor vagy kép-vektor konverziót, ha az index vektorizáló-hozzárendeléssel rendelkezik. A képkereséssel kapcsolatos további információkért tekintse meg a Gyorsútmutatót: Képek keresése a Kereséskezelőben.
Használja az alapértelmezett Lekérdezés nézetet annak gyors megerősítéséhez, hogy az index vektorokat tartalmaz. A lekérdezési nézet teljes szöveges keresésre használható. Bár nem használhatja vektoros lekérdezésekhez, üres keresést (
search=*
) küldhet a tartalom kereséséhez. A program az összes mező tartalmát, beleértve a vektormezőket is, egyszerű szövegként adja vissza.További részletekért lásd : Vektoros lekérdezés létrehozása.
Vektortároló frissítése
Vektortároló frissítéséhez módosítsa a sémát, és szükség esetén töltse be újra a dokumentumokat az új mezők feltöltéséhez. A sémafrissítésekhez használható API-k közé tartozik a Create or Update Index (REST), a CreateOrUpdateIndex az Azure SDK for .NET-ben, create_or_update_index az Azure SDK for Pythonban, és hasonló módszerek más Azure SDK-kban.
Az index frissítésével vagy újraépítésével kapcsolatos általános útmutató az indexek frissítésével vagy újraépítésével foglalkozik.
A legfontosabb pontok a következők:
A meglévő mezők frissítéséhez és törléséhez gyakran szükség van az elvetésére és újraépítésére.
A meglévő sémákat azonban az alábbi módosításokkal frissítheti, és nincs szükség újraépítésre:
- Új mezők hozzáadása egy mezőcsoporthoz.
- Adjon hozzá új vektorkonfigurációkat, amelyek új mezőkhöz vannak rendelve, de a már vektorizált mezőket nem.
- Módosítsa a "beolvasható" értéket (az értékek igaz vagy hamisak) egy meglévő mezőben. A vektormezőknek kereshetőnek és lekérdezhetőnek kell lenniük, de ha olyan helyzetekben szeretné letiltani a vektormezőkhöz való hozzáférést, ahol az elvetés és az újraépítés nem lehetséges, akkor a beolvasható értéket hamis értékre állíthatja.
Következő lépések
Következő lépésként javasoljuk, hogy lekérdezési vektoradatokat adjon meg egy keresési indexben.
Az azure-search-vector adattárban található kódminták a sémadefiníciót, vektorizálást, indexelést és lekérdezéseket tartalmazó, végpontok közötti munkafolyamatokat mutatják be.