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


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 legtöbb meglévő szolgáltatás támogatja a vektorkeresést. A 2019. január előtt létrehozott szolgáltatások esetében van egy kis részhalmaz, amely nem tud vektorindexet létrehozni. Ebben az esetben létre kell hozni egy új szolgáltatást. Ha integrált vektorizációt használ (az Azure AI-t hívó képességkészleteket), az Azure AI Searchnek ugyanabban a régióban kell lennie, mint az Azure OpenAI vagy az Azure AI-szolgáltatások.

  • Már meglévő vektorbeágyazások vagy integrált vektorizálás használata, ahol a beágyazási modelleket az indexelési folyamat meghívja.

  • Ismernie kell a beágyazások létrehozásához használt modell méretkorlátját. Az érvényes értékek 2–3072 dimenziók. Az Azure OpenAI-ban a text-embedding-ada-002 esetében a numerikus vektor hossza 1536. A 3-kicsi vagy a 3-nagy méretű szöveges beágyazás esetén a vektor hossza 3072.

  • Azt is tudnia kell, hogy mik a támogatott hasonlósági metrikák. Az Azure OpenAI esetében a hasonlóság kiszámítása cosinea .

  • 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:

  1. 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 és key=true a keresési indexre.

  2. 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ó érdekében javasoljuk az Azure OpenAI-ba való beágyazási modelleket, például a szöveges dokumentumokhoz készült text-embedding-ada-002 vagy a képek képlekérési REST API-jának használatá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 alfanumerikus tartalmakat kódol az indexelés során. A meződefiníciók vektormezőkhöz tartoznak, de a forrásadatok lehetnek szövegek vagy képek, az indexelés során létrehozott vektortömbökkel.

  3. Adjon meg más mezőknek emberileg olvasható alfanumerikus tartalmat 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ó a vektorméret csökkentésére szolgáló kvantálási módszereket is megadja:

  • 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.

  1. Az index létrehozásához használja az Index létrehozása vagy frissítése API-t.

  2. 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 vagy scalarQuantization 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, ha stored 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 a k lekérdezésben található, túlbélyegző szorzóval. Ha például a lekérdezés 5-et ad meg k , é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 legjobban k 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 a int8.

    • 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 a cosine, dotProducteuclidean, 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 egy vectorSearchprofilt, 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ő.

  1. Az index létrehozásához használja az Index létrehozása vagy frissítése parancsot .

  2. 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:

    • typevektoros 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 ez 1536.
    • 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, facetablehamisnak sortable kell lennie.
  3. 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.

  4. 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": "hsnw-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 alfanumerikus 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 indexeit az 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.

A Python, a C# és a JavaScript demókódja is létezik.