Fragmentowanie i wektoryzacja według układu lub struktury dokumentu
Uwaga
Ta funkcja jest obecnie w publicznej wersji zapoznawczej. Ta wersja zapoznawcza jest udostępniana bez umowy dotyczącej poziomu usług i nie jest zalecana w przypadku obciążeń produkcyjnych. Niektóre funkcje mogą być nieobsługiwane lub ograniczone. Aby uzyskać więcej informacji, zobacz Uzupełniające warunki korzystania z wersji zapoznawczych platformy Microsoft Azure.
Strategie fragmentowania danych tekstowych odgrywają kluczową rolę w optymalizacji odpowiedzi RAG i wydajności. Korzystając z nowej umiejętności układu dokumentu, która jest obecnie dostępna w wersji zapoznawczej, możesz fragmentować zawartość na podstawie struktury dokumentu, przechwytywać nagłówki i fragmentować treść zawartości na podstawie spójności semantycznej, takiej jak akapity i zdania. Fragmenty są przetwarzane niezależnie. Ponieważ moduły LLM współpracują z wieloma fragmentami, gdy te fragmenty są o wyższej jakości i semantycznie spójne, ogólna istotność zapytania jest ulepszona.
Umiejętność Układ dokumentu wywołuje model układu w analizie dokumentów. Model określa strukturę zawartości w formacie JSON przy użyciu składni języka Markdown (nagłówki i zawartość) z polami nagłówków i zawartości przechowywanymi w indeksie wyszukiwania w usłudze Azure AI Search. Zawartość z możliwością wyszukiwania utworzona na podstawie umiejętności Układ dokumentu to zwykły tekst, ale można zastosować zintegrowaną wektoryzację w celu wygenerowania osadzonych elementów dla dowolnego pola w dokumentach źródłowych, w tym obrazów.
Z tego artykułu dowiesz się, jak wykonywać następujące działania:
- Rozpoznawanie struktury dokumentów za pomocą umiejętności układu dokumentu
- Użyj umiejętności Dzielenie tekstu, aby ograniczyć rozmiar fragmentu do każdej sekcji markdown
- Generowanie osadzania dla każdego fragmentu
- Mapowanie osadzania w polach w indeksie wyszukiwania za pomocą projekcji indeksu indeksu
Na potrzeby ilustracji w tym artykule użyto przykładowych plików PDF planu kondycji przekazanych do usługi Azure Blob Storage, a następnie zindeksowanych przy użyciu kreatora Importowanie i wektoryzowanie danych.
Wymagania wstępne
Potok indeksowania oparty na indeksatorze z indeksem, który akceptuje dane wyjściowe. Indeks musi zawierać pola do odbierania nagłówków i zawartości.
Obsługiwane źródło danych zawierające zawartość tekstową, którą chcesz fragmentować.
Zestaw umiejętności z umiejętnościami układu dokumentu, który dzieli dokumenty na podstawie granic akapitu.
Umiejętność osadzania w usłudze Azure OpenAI, która generuje wektorowe osadzanie.
Projekcja indeksu dla indeksowania jeden do wielu.
Przygotowywanie plików danych
Nieprzetworzone dane wejściowe muszą znajdować się w obsługiwanym źródle danych, a plik musi być formatem obsługiwanym przez umiejętności układu dokumentu.
Obsługiwane formaty plików to: PDF, JPEG, JPG, PNG, BMP, TIFF, DOCX, XLSX, PPTX, HTML.
Obsługiwane indeksatory mogą być dowolnym indeksatorem, który może obsługiwać obsługiwane formaty plików. Te indeksatory obejmują indeksatory obiektów blob, indeksatory OneLake, indeksatory plików.
Obsługiwane regiony dla tej funkcji to: Wschodnie stany USA, Zachodnie stany USA 2, Europa Zachodnia, Północno-środkowe stany USA. Upewnij się, że ta lista zawiera aktualizacje dotyczące dostępności regionalnej.
Aby utworzyć źródło danych, możesz użyć witryny Azure Portal, interfejsów API REST lub pakietu zestawu Azure SDK.
Napiwek
Przekaż przykładowe pliki PDF planu kondycji do obsługiwanego źródła danych, aby wypróbować umiejętności układu dokumentów i fragmentowanie obsługujące strukturę we własnej usłudze wyszukiwania. Kreator importowania i wektoryzacji danych to łatwe podejście bez użycia kodu do wypróbowanie tej umiejętności. Pamiętaj, aby wybrać domyślny tryb analizowania, aby używać fragmentowania obsługującego strukturę. W przeciwnym razie zamiast tego jest używany tryb analizowania języka Markdown.
Tworzenie indeksu dla indeksowania jeden do wielu
Oto przykładowy ładunek pojedynczego dokumentu wyszukiwania zaprojektowany wokół fragmentów. Za każdym razem, gdy pracujesz z fragmentami, potrzebne jest pole fragmentu i pole nadrzędne, które identyfikuje źródło fragmentu. W tym przykładzie pola nadrzędne są text_parent_id. Pola podrzędne są fragmentami wektorów i niewektorów sekcji markdown.
Nagłówki i zawartość w danych wyjściowych umiejętności Układu dokumentu. W tym przykładzie header_1
za pośrednictwem header_3
nagłówków dokumentów magazynu wykrytych przez umiejętności. Inna zawartość, taka jak akapity, jest przechowywana w pliku chunk
. Pole text_vector
jest wektorową reprezentacją zawartości pola fragmentu.
Aby utworzyć indeks, możesz użyć kreatora Importowanie i wektoryzowanie danych w witrynie Azure Portal, interfejsach API REST lub zestawie Azure SDK. Poniższy indeks jest bardzo podobny do tego, co kreator tworzy domyślnie. W przypadku dodawania wektoryzacji obrazów może być więcej pól.
Jeśli nie używasz kreatora, indeks musi istnieć w usłudze wyszukiwania przed utworzeniem zestawu umiejętności lub uruchomieniem indeksatora.
{
"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"
}
]
}
}
Definiowanie zestawu umiejętności na potrzeby fragmentowania i wektoryzacji obsługującego strukturę
Ponieważ umiejętność układu dokumentu jest dostępna w wersji zapoznawczej, musisz użyć interfejsu API REST Create Skillset 2024-11-01-preview dla tego kroku. Możesz również użyć witryny Azure Portal.
W tej sekcji przedstawiono przykład definicji zestawu umiejętności, która projektuje poszczególne sekcje języka Markdown, fragmenty i ich odpowiedniki wektorów jako pola w indeksie wyszukiwania. Używa umiejętności Układ dokumentu do wykrywania nagłówków i wypełniania pola zawartości na podstawie semantycznie spójnych akapitów i zdań w dokumencie źródłowym. Używa umiejętności Dzielenie tekstu, aby podzielić zawartość markdown na fragmenty. Używa umiejętności osadzania usługi Azure OpenAI w celu wektoryzacji fragmentów i dowolnego innego pola, dla którego chcesz osadzać.
Oprócz umiejętności zestaw umiejętności obejmuje indexProjections
zestaw umiejętności i cognitiveServices
:
indexProjections
są używane w przypadku indeksów zawierających fragmenty dokumentów. Projekcje określają sposób mapowania zawartości nadrzędny-podrzędny na pola w indeksie wyszukiwania w celu indeksowania "jeden do wielu". Aby uzyskać więcej informacji, zobacz Definiowanie projekcji indeksu.cognitiveServices
Dołącza konto wielosłużowe usługi Azure AI do celów rozliczeniowych (umiejętność układu dokumentu jest dostępna za pośrednictwem cennika płatności zgodnie z rzeczywistym użyciem).
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"
}
}
}
Konfigurowanie i uruchamianie indeksatora
Po utworzeniu źródła danych, indeksu i zestawu umiejętności możesz utworzyć i uruchomić indeksator. Ten krok powoduje przejście potoku do wykonania.
W przypadku korzystania z umiejętności Układu dokumentu upewnij się, że w definicji indeksatora ustawiono następujące parametry:
- Parametr
allowSkillsetToReadFileData
powinien być ustawiony natrue
wartość . parsingMode
parametr powinien być ustawiony nadefault
wartość .
outputFieldMappings
Nie trzeba ustawiać w tym scenariuszu, ponieważ indexProjections
obsłuż pole źródłowe do skojarzeń pól wyszukiwania. Projekcje indeksów obsługują skojarzenia pól dla umiejętności Układu dokumentu, a także regularne fragmentowanie z umiejętnością podziału dla zaimportowanych i wektoryzowanych obciążeń danych. Mapowania pól wyjściowych są nadal niezbędne do przekształceń lub złożonych mapowań danych z funkcjami, które mają zastosowanie w innych przypadkach. Jednak w przypadku n-fragmentów na dokument projekcje indeksów obsługują tę funkcję natywnie.
Oto przykład żądania utworzenia indeksatora.
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": []
}
Po wysłaniu żądania do usługi wyszukiwania indeksator jest uruchamiany.
Weryfikowanie wyników
Możesz wykonać zapytanie względem indeksu wyszukiwania po zakończeniu przetwarzania w celu przetestowania rozwiązania.
Aby sprawdzić wyniki, uruchom zapytanie względem indeksu. Użyj Eksploratora wyszukiwania jako klienta wyszukiwania lub dowolnego narzędzia wysyłającego żądania HTTP. Poniższe zapytanie wybiera pola, które zawierają dane wyjściowe zawartości niewektorowej sekcji markdown i jej wektora.
W eksploratorze wyszukiwania możesz skopiować tylko kod JSON i wkleić go do widoku JSON na potrzeby wykonywania zapytań.
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"
}
Jeśli użyto plików PDF planu kondycji do przetestowania tej umiejętności, wyniki eksploratora wyszukiwania dla przykładowego zapytania powinny wyglądać podobnie do wyników na poniższym zrzucie ekranu.
Zapytanie jest zapytaniem hybrydowym nad tekstem i wektorami, więc zobaczysz, że
@search.rerankerScore
wyniki i są klasyfikowane według tego wyniku.searchMode=all
oznacza, że wszystkie terminy zapytania muszą być brane pod uwagę dla dopasowania (wartość domyślna to dowolna).Zapytanie używa klasyfikacji semantycznej, więc zobaczysz
captions
(maanswers
również wartość , ale nie są one wyświetlane na zrzucie ekranu). Wyniki są najbardziej semantycznie istotne dla danych wejściowych zapytania określonych przez semantyczny rangą.Instrukcja
select
(nie pokazana na zrzucie ekranu) określa pola nagłówka wykrywane i wypełniane przez umiejętności układ dokumentu. Do klauzuli select można dodać więcej pól w celu sprawdzenia zawartości fragmentów, tytułu lub dowolnego innego pola czytelnego dla człowieka.
Zobacz też
- Utwórz lub zaktualizuj zestaw umiejętności.
- Tworzenie źródła danych
- Definiowanie projekcji indeksu
- Dołączanie konta usługi Azure AI z wieloma usługami
- Umiejętność układu dokumentu
- Umiejętność dzielenia tekstu
- Umiejętność osadzania w usłudze Azure OpenAI
- Tworzenie indeksatora (REST)
- Eksplorator wyszukiwania