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
Indexelőalapú indexelési folyamat a kimenetet elfogadó indexel. Az indexnek fejléceket és tartalmakat fogadó mezőkkel kell rendelkeznie.
Olyan támogatott adatforrás , amely szöveges tartalommal rendelkezik, amelyet át szeretne bontani.
Dokumentumelrendezési képességekkel rendelkező készségkészlet, amely bekezdéshatárok alapján osztja fel a dokumentumokat.
Egy Azure OpenAI beágyazási képesség , amely vektoros beágyazásokat hoz létre.
Index-előrejelzés egy-a-többhöz indexeléshez.
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
:
indexProjections
adattömbökből álló dokumentumokat tartalmazó indexekhez használhatók. Az előrejelzések meghatározzák, hogy a szülő-gyermek tartalom hogyan van leképezve a keresési index mezőire az egy-a-többhöz indexeléshez. További információ: Index-előrejelzés definiálása.cognitiveServices
számlázási célokra csatol egy Többszolgáltatásos Azure AI-fiókot (a Dokumentumelrendezési képesség a használatalapú díjszabáson keresztül érhető el).
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ítanitrue
: . - a paramétert a
parsingMode
következőre kell állítanidefault
: .
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=all
azt 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 vananswers
, 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.