Belge düzenine veya yapısına göre öbek ve vektörleştirme
Not
Bu özellik şu anda genel önizlemededir. Bu önizleme, hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri Ek Kullanım Koşulları.
Metin verileri öbekleme stratejileri, RAG yanıtlarını ve performansını iyileştirmede önemli bir rol oynar. Şu anda önizleme aşamasında olan yeni Belge Düzeni becerisini kullanarak, belge yapısına göre içeriği öbekleyebilir, başlıkları yakalayabilir ve içerik gövdesini paragraflar ve cümleler gibi anlamsal tutarlılığa göre öbekleyebilirsiniz. Öbekler bağımsız olarak işlenir. LLM'ler birden çok öbekle çalıştığından, bu öbekler daha kaliteli ve eş zamanlı olduğunda sorgunun genel ilgisi iyileştirilir.
Belge Düzeni becerisi, Belge Zekası'ndaki düzen modelini çağırır. Model, Azure AI Search'te arama dizininde depolanan başlıklar ve içerik alanlarıyla Birlikte Markdown söz dizimini (başlıklar ve içerik) kullanarak JSON'daki içerik yapısını ifade eder. Belge Düzeni becerisinden üretilen aranabilir içerik düz metindir, ancak resimler de dahil olmak üzere kaynak belgelerinizdeki herhangi bir alan için eklemeler oluşturmak üzere tümleşik vektörleştirme uygulayabilirsiniz.
Bu makalede şunların nasıl yapıldığını öğrenin:
- Belge yapısını tanımak için Belge Düzeni becerisini kullanma
- Öbek boyutunu her markdown bölümüyle sınırlamak için Metin Bölme becerisini kullanma
- Her öbek için eklemeler oluşturma
- Eklemeleri arama dizinindeki alanlarla eşlemek için dizin projeksiyonlarını kullanma
Çizim amacıyla bu makalede, Azure Blob Depolama'a yüklenen ve ardından Verileri içeri aktarma ve vektörleştirme sihirbazı kullanılarak dizine alınan örnek sistem durumu planı PDF'leri kullanılmaktadır.
Önkoşullar
Çıktıyı kabul eden bir dizine sahip dizin oluşturucu tabanlı dizin oluşturma işlem hattı . Dizin, başlıkları ve içeriği almak için alanlara sahip olmalıdır.
Öbeklemesini istediğiniz metin içeriğine sahip desteklenen bir veri kaynağı .
Belgeleri paragraf sınırlarına göre bölen Belge Düzeni becerisine sahip bir beceri kümesi.
Vektör eklemeleri oluşturan bir Azure OpenAI Ekleme becerisi .
Veri dosyalarını hazırlama
Ham girişlerin desteklenen bir veri kaynağında olması ve dosyanın Belge Düzeni becerisinin desteklediği bir biçim olması gerekir.
Desteklenen dosya biçimleri şunlardır: PDF, JPEG, JPG, PNG, BMP, TIFF, DOCX, XLSX, PPTX, HTML.
Desteklenen dizin oluşturucular, desteklenen dosya biçimlerini işleyebilen herhangi bir dizin oluşturucu olabilir. Bu dizin oluşturucular Blob dizin oluşturucuları, OneLake dizin oluşturucuları, Dosya dizin oluşturucularıdır.
Bu özellik için desteklenen bölgeler şunlardır: Doğu ABD, Batı ABD2, Batı Avrupa, Orta Kuzey ABD. Bölgesel kullanılabilirlik güncelleştirmeleri için bu listeyi denetlemeyi unutmayın.
Veri kaynağı oluşturmak için Azure portalını, REST API'lerini veya Azure SDK paketini kullanabilirsiniz.
İpucu
Kendi arama hizmetinizde Belge Düzeni becerisini ve yapıya duyarlı öbek oluşturmayı denemek için sistem durumu planı PDF örnek dosyalarını desteklenen veri kaynağınıza yükleyin. Verileri içeri aktarma ve vektörleştirme sihirbazı, bu beceriyi denemek için kolay bir kod içermeyen yaklaşımdır. Yapıya duyarlı öbekleme kullanmak için varsayılan ayrıştırma modunu seçtiğinizden emin olun. Aksi takdirde, bunun yerine Markdown ayrıştırma modu kullanılır.
Bire çok dizin oluşturma için dizin oluşturma
Öbekler etrafında tasarlanmış tek bir arama belgesinin örnek yükü aşağıda verilmiştir. Öbeklerle çalışırken öbek alanı ve öbek kaynağını tanımlayan bir üst alan gerekir. Bu örnekte üst alanlar text_parent_id. Alt alanlar markdown bölümünün vektör ve nonvector öbekleridir.
Belge Düzeni becerisi, başlıkları ve içeriği çıkış olarak alır. Bu örnekte, header_1
beceri tarafından algılanan belge başlıklarını depolayarak header_3
. Paragraflar gibi diğer içerikler içinde chunk
depolanır. Alanı text_vector
, öbek alanı içeriğinin vektör gösterimidir.
Dizin oluşturmak için Azure portalında, REST API'lerinde veya Azure SDK'sında Verileri içeri aktarma ve vektörleştirme sihirbazını kullanabilirsiniz. Aşağıdaki dizin, sihirbazın varsayılan olarak oluşturduğu dizine çok benzer. Görüntü vektörleştirmesi eklerseniz daha fazla alanınız olabilir.
Sihirbazı kullanmıyorsanız, beceri kümesini oluşturmadan veya dizin oluşturucuyu çalıştırmadan önce dizinin arama hizmetinde mevcut olması gerekir.
{
"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"
}
]
}
}
Yapıya duyarlı öbekleme ve vektörleştirme için beceri kümesi tanımlama
Belge Düzeni becerisi önizleme aşamasında olduğundan, bu adım için Beceri Kümesi Oluşturma 2024-11-01-preview REST API'sini kullanmanız gerekir. Azure portalını da kullanabilirsiniz.
Bu bölümde, tek tek markdown bölümlerini, öbeklerini ve bunların vektör eşdeğerlerini arama dizininde alan olarak projeleyen beceri kümesi tanımı örneği gösterilmektedir. Belge Düzeni becerisini kullanarak başlıkları algılar ve kaynak belgedeki ayrımsal olarak uyumlu paragrafları ve tümceleri temel alan bir içerik alanını doldurur. Markdown içeriğini öbeklere bölmek için Metin Bölme becerisini kullanır. Öbekleri ve eklemek istediğiniz diğer alanları vektörleştirmek için Azure OpenAI Ekleme becerisini kullanır.
Beceri kümesi, becerilerin yanı sıra ve cognitiveServices
değerlerini de içeririndexProjections
:
indexProjections
öbeklenmiş belgeler içeren dizinler için kullanılır. Projeksiyonlar, üst-alt içeriğin bire çok dizin oluşturma için arama dizinindeki alanlarla nasıl eşleneceğini belirtir. Daha fazla bilgi için bkz . Dizin projeksiyonu tanımlama.cognitiveServices
faturalama amacıyla bir Azure AI çok hizmetli hesabı ekler (Belge Düzeni becerisi, kullandıkça öde fiyatlandırması aracılığıyla sağlanır).
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"
}
}
}
Dizin oluşturucuyu yapılandırma ve çalıştırma
Veri kaynağı, dizin ve beceri kümesi oluşturduktan sonra dizin oluşturucuyu oluşturmaya ve çalıştırmaya hazır olursunuz. Bu adım işlem hattını yürütmeye geçirir.
Belge Düzeni becerisini kullanırken dizin oluşturucu tanımında aşağıdaki parametreleri ayarladığınızdan emin olun:
allowSkillsetToReadFileData
parametresi olaraktrue
ayarlanmalıdır.parsingMode
parametresi olarakdefault
ayarlanmalıdır.
outputFieldMappings
alan ilişkilendirmelerini aramak için kaynak alanı işlediğinden bu senaryoda indexProjections
ayarlanması gerekmez. Dizin projeksiyonları, Belge Düzeni becerisi için alan ilişkilendirmelerini ve ayrıca içeri aktarılan ve vektörleştirilmiş veri iş yükleri için bölünmüş beceriyle düzenli öbekleme işlemlerini işler. Çıkış alanı eşlemeleri, diğer durumlarda geçerli olan işlevlerle dönüşümler veya karmaşık veri eşlemeleri için hala gereklidir. Ancak, belge başına n öbekler için dizin projeksiyonları bu işlevi yerel olarak işler.
Dizin oluşturucu oluşturma isteği örneği aşağıda verilmiştir.
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": []
}
İsteği arama hizmetine gönderdiğinizde dizin oluşturucu çalışır.
Sonuçları doğrulama
çözümünüzü test etmek için işlem tamamlandıktan sonra arama dizininizi sorgulayabilirsiniz.
Sonuçları denetlemek için dizine karşı bir sorgu çalıştırın. Arama Gezgini'ni bir arama istemcisi veya HTTP istekleri gönderen herhangi bir araç olarak kullanın. Aşağıdaki sorgu, markdown bölümü seçici olmayan içeriğinin çıkışını ve vektörünü içeren alanları seçer.
Arama Gezgini için yalnızca JSON dosyasını kopyalayıp sorgu yürütme için JSON görünümüne yapıştırabilirsiniz.
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"
}
Bu beceriyi test etmek için sistem durumu planı PDF'lerini kullandıysanız, örnek sorgunun Arama Gezgini sonuçları aşağıdaki ekran görüntüsündeki sonuçlara benzer görünmelidir.
Sorgu, metin ve vektörler üzerinde karma bir sorgu olduğundan ve sonuçlarının bu puana göre sıralandığını görürsünüz
@search.rerankerScore
.searchMode=all
, tüm sorgu terimlerinin bir eşleşme için dikkate alınması gerektiği anlamına gelir (varsayılan değer herhangi bir değerdir).Sorgu semantik derecelendirme kullanır, bu nedenle görürsünüz
captions
(ayrıca öğesine sahiptiranswers
, ancak bunlar ekran görüntüsünde gösterilmez). Sonuçlar, semantik dereceleyici tarafından belirlendiği gibi sorgu girişiyle en ilgili olan sonuçlardır.Deyimi
select
(ekran görüntüsünde gösterilmez), Belge Düzeni becerisinin algılayıp doldurdığı üst bilgi alanlarını belirtir. Öbeklerin, başlığın veya diğer okunabilir alanların içeriğini incelemek için select yan tümcesine daha fazla alan ekleyebilirsiniz.