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


Adattömb és vektorizálás dokumentumelrendezés vagy struktúra szerint

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.

A szöveges adattömb-stratégiák kulcsfontosságú szerepet játszanak a RAG-válaszok és a teljesítmény optimalizálásában. A jelenleg előzetes verzióban elérhető új dokumentumelrendezési képesség használatával dokumentumszerkezet, címsorok rögzítése és a tartalomtörzs szemantikai koherencián alapuló darabolása( például bekezdések és mondatok) alapján csoportosíthatja a tartalmat. Az adattömbök feldolgozása egymástól függetlenül történik. Mivel az LLM-ek több adattömbtel is működnek, ha ezek az adattömbök jobb minőségűek és szemantikailag koherensek, a lekérdezés általános relevanciája javul.

A Dokumentumelrendezés képesség meghívja az elrendezési modellt a Dokumentumintelligencia szolgáltatásban. A modell Markdown-szintaxis (címsorok és tartalom) használatával ismerteti a JSON tartalomstruktúráját, és az Azure AI Search keresési indexében tárolt címsorok és tartalmak mezőit tartalmazza. A Dokumentumelrendezési képességből származó kereshető tartalom egyszerű szöveg, de integrált vektorizálással beágyazást hozhat létre a forrásdokumentumok bármely mezőjéhez, beleértve a képeket is.

Ebből a cikkből megtudhatja, hogyan:

  • Dokumentumstruktúra felismerése a Dokumentumelrendezési képesség használatával
  • A Szöveg felosztása képesség használata az adattömb méretének az egyes markdown-szakaszokra való korlátozásához
  • Beágyazások létrehozása az egyes adattömbökhöz
  • Index-előrejelzések használata a beágyazások keresési indexben lévő mezőkre való leképezéséhez

Illusztrációként ez a cikk az Azure Blob Storage-ba feltöltött, majd az Adatok importálása és vektorizálása varázslóval indexelt állapotterv-PDF-eket használja.

Előfeltételek

Adatfájlok előkészítése

A nyers bemeneteknek támogatott adatforrásban kell lenniük, és a fájlnak olyan formátumnak kell lennie, amelyet a Dokumentumelrendezési képesség támogat.

  • Támogatott fájlformátumok: PDF, JPEG, JPG, PNG, BMP, TIFF, DOCX, XLSX, PPTX, HTML.

  • A támogatott indexelők lehetnek olyan indexelők, amelyek képesek kezelni a támogatott fájlformátumokat. Ezek az indexelők közé tartoznak a blobindexelők, a OneLake indexelők, a fájlindexelők.

  • A funkció támogatott régiói a következők: USA keleti régiója, USA 2. nyugati régiója, Nyugat-Európa, USA északi középső régiója. Győződjön meg arról, hogy a lista a regionális rendelkezésre állás frissítéseit tartalmazza.

Adatforrás létrehozásához használhatja az Azure Portalt, a REST API-kat vagy egy Azure SDK-csomagot.

Tipp.

Töltse fel az állapotterv PDF-mintafájljait a támogatott adatforrásba, hogy kipróbálhassa a dokumentumelrendezést és a struktúraérzékeny adattömb-készítést a saját keresési szolgáltatásában. Az Adatok importálása és vektorizálása varázsló egy egyszerű kód nélküli módszer a képesség kipróbálásához. A struktúraérzékeny adattömbök használatához mindenképpen válassza ki az alapértelmezett elemzési módot . Ellenkező esetben a Markdown-elemzési módot használja a rendszer.

Index létrehozása egy-a-többhöz indexeléshez

Íme egy példa egy adattömbök köré tervezett egyetlen keresési dokumentum hasznos adataira. Amikor adattömbökkel dolgozik, szüksége lesz egy adattömbmezőre és egy szülőmezőre, amely azonosítja az adattömb eredetét. Ebben a példában a szülőmezők a text_parent_id. A gyermekmezők a markdown szakasz vektorai és nem adatrészletei.

A Dokumentumelrendezés képesség fejléceket és tartalmat ad ki. Ebben a példában header_1 a dokumentumfejlécek tárolásán keresztül header_3 , a képesség által észlelt módon. A rendszer más tartalmakat, például bekezdéseket is tárol chunk. A text_vector mező az adattömb mező tartalmának vektoros ábrázolása.

Index létrehozásához használhatja az Adatok importálása és vektorizálása varázslót az Azure Portalon, a REST API-kban vagy egy Azure SDK-ban. Az alábbi index nagyon hasonló ahhoz, amit a varázsló alapértelmezés szerint létrehoz. Ha képvektorizációt ad hozzá, több mező is lehet.

Ha nem használja a varázslót, az indexnek léteznie kell a keresési szolgáltatásban a képességkészlet létrehozása vagy az indexelő futtatása előtt.

{
  "name": "my_consolidated_index",
  "fields": [
    {
      "name": "chunk_id",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": true,
      "facetable": false,
      "key": true,
      "analyzer": "keyword"
    },
    {
      "name": "text_parent_id",
      "type": "Edm.String",
      "searchable": false,
      "filterable": true,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "chunk",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "title",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "header_1",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "header_2",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "header_3",
      "type": "Edm.String",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false
    },
    {
      "name": "text_vector",
      "type": "Collection(Edm.Single)",
      "searchable": true,
      "filterable": false,
      "retrievable": true,
      "stored": true,
      "sortable": false,
      "facetable": false,
      "key": false,
      "dimensions": 1536,
      "stored": false,
      "vectorSearchProfile": "profile"
    }
  ],
  "vectorSearch": {
    "profiles": [
      {
        "name": "profile",
        "algorithm": "algorithm"
      }
    ],
    "algorithms": [
      {
        "name": "algorithm",
        "kind": "hnsw"
      }
    ]
  }
}

Képességkészlet definiálása struktúraérzékeny adattömbhöz és vektorizáláshoz

Mivel a Dokumentumelrendezési képesség előzetes verzióban érhető el, ehhez a lépéshez a 2024-11-01-preview REST API-t kell használnia. Az Azure Portalt is használhatja.

Ez a szakasz egy olyan készségkészlet-definícióra mutat példát, amely a keresési index mezőiként az egyes Markdown-szakaszokat, adattömböket és azok vektor-megfelelőit jeleníti meg. A Dokumentumelrendezési képesség segítségével észleli a címsorokat, és feltölt egy tartalommezőt a forrásdokumentum szemantikailag koherens bekezdései és mondatai alapján. A Szöveg felosztása képesség használatával osztja fel a Markdown-tartalmat adattömbökre. Az Azure OpenAI beágyazási képességével vektorizálja az adattömböket és minden más mezőt, amelyhez beágyazást szeretne.

A készségek mellett a készségkészlet tartalmazza a következőket indexProjections cognitiveServices:

POST {endpoint}/skillsets?api-version=2024-11-01-preview

{
  "name": "my_skillset",
  "description": "A skillset for structure-aware chunking and vectorization with a index projection around markdown section",
  "skills": [
    {
      "@odata.type": "#Microsoft.Skills.Util.DocumentIntelligenceLayoutSkill",
      "name": "my_document_intelligence_layout_skill",
      "context": "/document",
      "outputMode": "oneToMany",
      "inputs": [
        {
          "name": "file_data",
          "source": "/document/file_data"
        }
      ],
      "outputs": [
        {
          "name": "markdown_document",
          "targetName": "markdownDocument"
        }
      ],
      "markdownHeaderDepth": "h3"
    },
    {
      "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
      "name": "my_markdown_section_split_skill",
      "description": "A skill that splits text into chunks",
      "context": "/document/markdownDocument/*",
      "inputs": [
        {
          "name": "text",
          "source": "/document/markdownDocument/*/content",
          "inputs": []
        }
      ],
      "outputs": [
        {
          "name": "textItems",
          "targetName": "pages"
        }
      ],
      "defaultLanguageCode": "en",
      "textSplitMode": "pages",
      "maximumPageLength": 2000,
      "pageOverlapLength": 500,
      "unit": "characters"
    },
    {
      "@odata.type": "#Microsoft.Skills.Text.AzureOpenAIEmbeddingSkill",
      "name": "my_azure_openai_embedding_skill",
      "context": "/document/markdownDocument/*/pages/*",
      "inputs": [
        {
          "name": "text",
          "source": "/document/markdownDocument/*/pages/*",
          "inputs": []
        }
      ],
      "outputs": [
        {
          "name": "embedding",
          "targetName": "text_vector"
        }
      ],
      "resourceUri": "https://<subdomain>.openai.azure.com",
      "deploymentId": "text-embedding-3-small",
      "apiKey": "<Azure OpenAI api key>",
      "modelName": "text-embedding-3-small"
    }
  ],
  "cognitiveServices": {
    "@odata.type": "#Microsoft.Azure.Search.CognitiveServicesByKey",
    "key": "<Cognitive Services api key>"
  },
  "indexProjections": {
    "selectors": [
      {
        "targetIndexName": "my_consolidated_index",
        "parentKeyFieldName": "text_parent_id",
        "sourceContext": "/document/markdownDocument/*/pages/*",
        "mappings": [
          {
            "name": "text_vector",
            "source": "/document/markdownDocument/*/pages/*/text_vector"
          },
          {
            "name": "chunk",
            "source": "/document/markdownDocument/*/pages/*"
          },
          {
            "name": "title",
            "source": "/document/title"
          },
          {
            "name": "header_1",
            "source": "/document/markdownDocument/*/sections/h1"
          },
          {
            "name": "header_2",
            "source": "/document/markdownDocument/*/sections/h2"
          },
          {
            "name": "header_3",
            "source": "/document/markdownDocument/*/sections/h3"
          }
        ]
      }
    ],
    "parameters": {
      "projectionMode": "skipIndexingParentDocuments"
    }
  }
}

Az indexelő konfigurálása és futtatása

Miután létrehozott egy adatforrást, indexet és képességkészletet, készen áll az indexelő létrehozására és futtatására. Ez a lépés végrehajtja a folyamatot.

A Dokumentumelrendezési képesség használatakor mindenképpen állítsa be a következő paramétereket az indexelő definícióján:

  • A allowSkillsetToReadFileData paramétert a következőre kell állítani true: .
  • a paramétert a parsingMode következőre kell állítani default: .

outputFieldMappings Ebben a forgatókönyvben nem kell beállítani, mert indexProjections a forrásmezőt a keresési mező társításaihoz kezeli. Az indexvetítések kezelik a dokumentumelrendezési képesség mezőtársításait, valamint az importált és vektorizált adatterhelések felosztási képességével való rendszeres adatbeosztást. A kimeneti mezőleképezések továbbra is szükségesek a más esetekben alkalmazott függvényekkel végzett átalakításokhoz vagy összetett adatleképezésekhez. A dokumentumonkénti n-adattömbök esetében azonban az index-előrejelzések natív módon kezelik ezt a funkciót.

Íme egy példa egy indexelő létrehozási kérésére.

POST {endpoint}/indexers?api-version=2024-11-01-preview

{
  "name": "my_indexer",
  "dataSourceName": "my_blob_datasource",
  "targetIndexName": "my_consolidated_index",
  "skillsetName": "my_skillset",
  "parameters": {
    "batchSize": 1,
    "configuration": {
        "dataToExtract": "contentAndMetadata",
        "parsingMode": "default",
        "allowSkillsetToReadFileData": true
    }
  },
  "fieldMappings": [
    {
      "sourceFieldName": "metadata_storage_path",
      "targetFieldName": "title"
    }
  ],
  "outputFieldMappings": []
}

Amikor elküldi a kérést a keresési szolgáltatásnak, az indexelő fut.

Eredmények ellenőrzése

A keresési index lekérdezhető, miután a feldolgozás befejeződött a megoldás teszteléséhez.

Az eredmények ellenőrzéséhez futtasson egy lekérdezést az indexen. Keresési ügyfélként vagy HTTP-kéréseket küldő eszközként használja a Search Explorert . Az alábbi lekérdezés olyan mezőket választ ki, amelyek tartalmazzák a Markdown-szakasz nem adatfeltáró tartalmának és vektorának kimenetét.

A Search Explorerben csak a JSON-t másolhatja, és beillesztheti a JSON nézetbe a lekérdezés végrehajtásához.

POST /indexes/[index name]/docs/search?api-version=[api-version]
{
  "search": "copay for in-network providers",
  "count": true,
  "searchMode": "all",
  "vectorQueries": [
    {
      "kind": "text",
      "text": "*",
      "fields": "text_vector,image_vector"
    }
  ],
  "queryType": "semantic",
  "semanticConfiguration": "healthplan-doc-layout-test-semantic-configuration",
  "captions": "extractive",
  "answers": "extractive|count-3",
  "queryLanguage": "en-us",
  "select": "header_1, header_2, header_3"
}

Ha az állapotterv PDF-fájljaival tesztelte ezt a képességet, a Példa lekérdezés Keresési explorer-eredményeinek az alábbi képernyőkép eredményeihez hasonlóan kell kinéznie.

  • A lekérdezés egy hibrid lekérdezés szöveg és vektorok felett, így megjelenik egy @search.rerankerScore , és az eredményeket az adott pontszám rangsorolja. searchMode=allazt jelenti, hogy az összes lekérdezési feltételt egyezésnek kell tekinteni (az alapértelmezett érték bármelyik).

  • A lekérdezés szemantikai rangsorolást használ, így látható captions (az is van answers, de ezek nem jelennek meg a képernyőképen). Az eredmények a szemantikai rangsoroló által meghatározott lekérdezési bemenet szempontjából a leginkább szemantikailag relevánsak.

  • Az select utasítás (amely nem jelenik meg a képernyőképen) meghatározza azokat a fejlécmezőket, amelyeket a Dokumentumelrendezés képesség észlel és feltölt. A kijelölési záradékhoz további mezőket is hozzáadhat, így megvizsgálhatja az adattömbök, a cím vagy bármely más olvasható mező tartalmát.

Képernyőkép a dokumentumelrendezési képesség kimeneti mezőit tartalmazó hibrid lekérdezési eredményekről.

Lásd még