Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Lernprogramm für Azure AI Search erfahren Sie, wie Sie große Daten indizieren und abfragen, die aus einem Spark-Cluster geladen wurden. Sie richten ein Jupyter-Notizbuch für Folgendes ein:
- Laden Sie verschiedene Formulare (Rechnungen) in einen Datenrahmen in einer Apache Spark-Sitzung
- Analysieren sie die Formulare, um ihre Features zu bestimmen
- Zusammenführen der resultierenden Ausgabe in eine tabellarische Datenstruktur
- Schreiben der Ausgabe in einen in Azure KI Search gehosteten Suchindex
- Erkunden und Abfragen der von Ihnen erstellten Inhalte
Dieses Lernprogramm setzt eine Abhängigkeit von SynapseML voraus, einer Open-Source-Bibliothek, die massives paralleles maschinelles Lernen über Big Data unterstützt. In SynapseML werden Suchindizierungen und maschinelles Lernen durch Transformatoren verfügbar gemacht, die spezielle Aufgaben ausführen. Transformatoren nutzen eine breite Palette von KI-Funktionen. In dieser Übung verwenden Sie die AzureSearchWriter-APIs zur Analyse und KI-Anreicherung.
Obwohl Azure KI Search über eine native KI-Anreicherung verfügt, wird Ihnen in diesem Tutorial gezeigt, wie Sie auf KI-Funktionen außerhalb von Azure KI Search zugreifen können. Durch die Verwendung von SynapseML anstelle von Indexern oder Fähigkeiten unterliegen Sie keinen Datengrenzen oder anderen Einschränkungen, die mit diesen Objekten verbunden sind.
Tipp
Sehen Sie sich ein kurzes Video dieser Demo an. Das Video erweitert dieses Tutorial um weitere Schritte und Visualisierungen.
Voraussetzungen
Sie benötigen die synapseml-Bibliothek und mehrere Azure-Ressourcen. Verwenden Sie nach Möglichkeit dasselbe Abonnement und dieselbe Region für Ihre Azure-Ressourcen, und fassen Sie alles in einer Ressourcengruppe zusammen, um später eine einfache Bereinigung zu ermöglichen. Die folgenden Links sind für Portalinstallationen. Die Beispieldaten werden von einer öffentlichen Website importiert.
- SynapseML-Paket1
- Azure AI Search (beliebige Ebene) 2
-
Microsoft Foundry-Ressource (jede Stufe) mit einem API-Typ von
AIServices3 - Azure Databricks (beliebige Ebene) mit Apache Spark 3.3.0 Runtime 4
1 Dieser Link führt zu einem Tutorial zum Laden des Pakets.
2 Sie können die Freiebene verwenden, um die Beispieldaten indizieren, aber wählen Sie eine höhere Ebene aus, wenn Ihre Datenvolumes groß sind. Geben Sie für gebührenpflichtige Dienstebenen den API-Schlüssel für die Suche im Schritt Einrichten von Abhängigkeiten weiter unten an.
3 In diesem Lernprogramm werden Dokumentintelligenz und Übersetzer aus Foundry Tools verwendet. Geben Sie in den folgenden Anweisungen einen Foundry-Ressourcenschlüssel und die Region an. Derselbe Schlüssel funktioniert für beide Dienste.
Für dieses Lernprogramm ist es wichtig, dass Sie eine Foundry-Ressource mit einer API-Art verwenden AIServices. Sie können die API-Art im Azure-Portal auf der Seite "Übersicht" Ihrer Foundry-Ressource überprüfen. Weitere Informationen zur API-Art finden Sie unter Anfügen einer Foundry-Ressource in Azure AI Search.
4 In diesem Tutorial stellt Azure Databricks die Spark-Computingplattform bereit. Wir haben die Portalanweisungen zum Einrichten des Clusters und des Arbeitsbereichs verwendet.
Hinweis
Die vorherigen Azure-Ressourcen unterstützen Sicherheitsfeatures in der Microsoft Identity Platform. Der Einfachheit halber wird bei diesem Tutorial von einer schlüsselbasierten Authentifizierung ausgegangen, wobei Endpunkte und Schlüssel verwendet werden, die von den Azure-Portalseiten der einzelnen Dienste kopiert wurden. Wenn Sie diesen Workflow in einer Produktionsumgebung implementieren oder die Lösung für andere freigeben, denken Sie daran, hartcodierte Schlüssel durch integrierte Sicherheits- oder verschlüsselte Schlüssel zu ersetzen.
Erstellen eines Spark-Clusters und eines Notizbuchs
In diesem Abschnitt erstellen Sie einen Cluster, installieren die synapseml Bibliothek und erstellen ein Notizbuch zum Ausführen des Codes.
Suchen Sie im Azure-Portal Ihren Azure Databricks-Arbeitsbereich, und wählen Sie "Arbeitsbereich starten" aus.
Wählen Sie im linken Menü Berechnen aus.
Wählen Sie Compute-Instanz erstellen aus.
Übernehmen Sie die Standardkonfiguration. Die Erstellung des Clusters dauert einige Minuten.
Überprüfen Sie, ob der Cluster betriebsbereit ist und ausgeführt wird. Ein grüner Punkt neben dem Clusternamen bestätigt seinen Status.
Nachdem der Cluster erstellt wurde, installieren Sie die
synapsemlBibliothek:Wählen Sie auf den Registerkarten oben auf der Seite des Clusters Bibliotheken aus.
Wählen Sie Neu installieren.
Wählen Sie Maven aus.
Suchen Sie in "Koordinaten" nach
com.microsoft.azure:synapseml_2.12:1.0.9.Wählen Sie Installieren aus.
Wählen Sie im linken Menü Erstellen ein>Notizbuch aus.
Geben Sie dem Notebook einen Namen, wählen Sie Python als Standardsprache und den Cluster mit der
synapsemlBibliothek aus.Erstellen Sie sieben aufeinanderfolgende Zellen. In den folgenden Abschnitten fügen Sie Code in diese Zellen ein.
Einrichten von Abhängigkeiten
Fügen Sie den folgenden Code in die erste Zelle Ihres Notizbuchs ein.
Ersetzen Sie die Platzhalter durch Endpunkte und Zugriffsschlüssel für jede Ressource. Geben Sie einen Namen für einen neuen Suchindex an, der für Sie erstellt werden soll. Es sind keine weiteren Änderungen erforderlich, also führen Sie den Code aus, wenn Sie bereit sind.
Dieser Code importiert mehrere Pakete und richtet den Zugriff auf die in diesem Lernprogramm verwendeten Azure-Ressourcen ein.
import os
from pyspark.sql.functions import udf, trim, split, explode, col, monotonically_increasing_id, lit
from pyspark.sql.types import StringType
from synapse.ml.core.spark import FluentAPI
cognitive_services_key = "placeholder-azure-ai-foundry-key"
cognitive_services_region = "placeholder-azure-ai-foundry-region"
search_service = "placeholder-search-service-name"
search_key = "placeholder-search-service-admin-api-key"
search_index = "placeholder-for-new-search-index-name"
Laden von Daten in Spark
Fügen Sie den folgenden Code in die zweite Zelle ein. Es sind keine Änderungen erforderlich, also führen Sie den Code aus, wenn Sie bereit sind.
Dieser Code lädt ein paar externe Dateien aus einem Azure-Speicherkonto. Die Dateien sind verschiedene Rechnungen, die in einen Datenrahmen eingelesen werden.
def blob_to_url(blob):
[prefix, postfix] = blob.split("@")
container = prefix.split("/")[-1]
split_postfix = postfix.split("/")
account = split_postfix[0]
filepath = "/".join(split_postfix[1:])
return "https://{}/{}/{}".format(account, container, filepath)
df2 = (spark.read.format("binaryFile")
.load("wasbs://publicwasb@mmlspark.blob.core.windows.net/form_subset/*")
.select("path")
.limit(10)
.select(udf(blob_to_url, StringType())("path").alias("url"))
.cache())
display(df2)
Hinzufügen von Dokumentintelligenz
Fügen Sie den folgenden Code in die dritte Zelle ein. Es sind keine Änderungen erforderlich, also führen Sie den Code aus, wenn Sie bereit sind.
Dieser Code lädt den AnalyzeInvoices-Transformer und übergibt einen Verweis auf den Datenrahmen, der die Rechnungen enthält. Es ruft das vorgefertigte Rechnungsmodell von Azure Document Intelligence in Foundry Tools auf, um Informationen aus den Rechnungen zu extrahieren.
from synapse.ml.services import AnalyzeInvoices
analyzed_df = (AnalyzeInvoices()
.setSubscriptionKey(cognitive_services_key)
.setLocation(cognitive_services_region)
.setImageUrlCol("url")
.setOutputCol("invoices")
.setErrorCol("errors")
.setConcurrency(5)
.transform(df2)
.cache())
display(analyzed_df)
Die Ausgabe sollte dem folgenden Screenshot ähneln. Beachten Sie, dass die Formularanalyse in eine dicht strukturierte Spalte gepackt ist, die schwer zu bearbeiten ist. Die nächste Transformation löst dieses Problem auf, indem die Spalte in Zeilen und Spalten geparst wird.
Neustrukturieren der Ausgabe von Document Intelligence
Fügen Sie den folgenden Code in die vierte Zelle ein und führen Sie ihn aus. Es sind keine Änderungen erforderlich.
Dieser Code lädt FormOntologyLearner, einen Transformator, der die Ausgabe von Azure Document Intelligence-Transformatoren analysiert und eine tabellarische Datenstruktur ableitet. Die Ausgabe von AnalyzeInvoices ist dynamisch und variiert je nach den in Ihren Inhalten erkannten Funktionen. Darüber hinaus konsolidiert der Transformator die Ausgabe in einer einzigen Spalte. Da die Ausgabe dynamisch und konsolidiert ist, lässt sie sich nur schwer in nachgelagerten Transformationen verwenden, die mehr Struktur erfordern.
FormOntologyLearner erweitert den Nutzen des Transformers AnalyzeInvoices, indem es nach Mustern sucht, die zum Erstellen einer tabellarischen Datenstruktur verwendet werden können. Das Organisieren der Ausgabe in mehreren Spalten und Zeilen macht den Inhalt in anderen Transformern wie AzureSearchWriter nutzbar.
from synapse.ml.cognitive import FormOntologyLearner
itemized_df = (FormOntologyLearner()
.setInputCol("invoices")
.setOutputCol("extracted")
.fit(analyzed_df)
.transform(analyzed_df)
.select("url", "extracted.*").select("*", explode(col("Items")).alias("Item"))
.drop("Items").select("Item.*", "*").drop("Item"))
display(itemized_df)
Beachten Sie, wie diese Transformation die geschachtelten Felder wieder in eine Tabelle umwandelt, die die nächsten beiden Transformationen ermöglicht. Dieser Screenshot ist der Kürze halber zugeschnitten. Wenn Sie den Vorgang in Ihrem eigenen Notebook nachverfolgen, verfügen Sie über 19 Spalten und 26 Zeilen.
Übersetzungen hinzufügen
Fügen Sie den folgenden Code in die fünfte Zelle ein. Es sind keine Änderungen erforderlich, also führen Sie den Code aus, wenn Sie bereit sind.
Dieser Code lädt Translate, einen Transformator, der Azure Translator in Foundry Tools aufruft. Der englische Originaltext in der Spalte „Beschreibung“ wird maschinell in verschiedene Sprachen übersetzt. Alle Ausgaben werden in das Array "output.translations" konsolidiert.
from synapse.ml.cognitive import Translate
translated_df = (Translate()
.setSubscriptionKey(cognitive_services_key)
.setLocation(cognitive_services_region)
.setTextCol("Description")
.setErrorCol("TranslationError")
.setOutputCol("output")
.setToLanguage(["zh-Hans", "fr", "ru", "cy"])
.setConcurrency(5)
.transform(itemized_df)
.withColumn("Translations", col("output.translations")[0])
.drop("output", "TranslationError")
.cache())
display(translated_df)
Tipp
Um nach übersetzten Zeichenfolgen zu suchen, scrollen Sie zum Ende der Zeilen.
Hinzufügen eines Suchindexes mit AzureSearchWriter
Fügen Sie den folgenden Code in die sechste Zelle ein, und führen Sie ihn aus. Es sind keine Änderungen erforderlich.
Dieser Code lädt AzureSearchWriter. Es verwendet einen tabellarischen Datensatz und schließt ein Suchindexschema ab, das ein Feld für jede Spalte definiert. Da es sich bei der Übersetzungsstruktur um ein Array handelt, wird sie im Index als komplexe Sammlung mit Unterfeldern für jede Sprachübersetzung artikuliert. Der generierte Index verfügt über einen Dokumentschlüssel und verwendet die Standardwerte für Felder, die mithilfe der Rest-API "Index erstellen" erstellt wurden.
from synapse.ml.cognitive import *
(translated_df.withColumn("DocID", monotonically_increasing_id().cast("string"))
.withColumn("SearchAction", lit("upload"))
.writeToAzureSearch(
subscriptionKey=search_key,
actionCol="SearchAction",
serviceName=search_service,
indexName=search_index,
keyCol="DocID",
))
Um die von AzureSearchWriter erstellte Indexdefinition zu erkunden, überprüfen Sie die Suchdienstseiten im Azure-Portal.
Hinweis
Wenn Sie den Standardsuchindex nicht verwenden können, können Sie eine externe benutzerdefinierte Definition in JSON bereitstellen und deren URI als Zeichenfolge in der Eigenschaft "indexJson" übergeben. Generieren Sie zuerst den Standardindex, damit Sie wissen, welche Felder angegeben werden sollen. Fahren Sie anschließend mit benutzerdefinierten Eigenschaften fort, wenn Sie beispielsweise bestimmte Analysetools benötigen.
Indexabfragen
Fügen Sie den folgenden Code in die siebte Zelle ein, und führen Sie ihn aus. Es sind keine Änderungen erforderlich, außer dass Sie möglicherweise die Syntax ändern oder mehr Beispiele ausprobieren möchten, um Ihren Inhalt weiter zu untersuchen:
Es gibt keine Transformatoren oder Module, die Abfragen ausgeben. Diese Zelle ist ein einfacher Aufruf der REST-API für Suchdokumente.
Dieses spezielle Beispiel ist die Suche nach dem Wort „Tür“ ("search": "door"). Sie gibt auch die Anzahl der übereinstimmenden Dokumente zurück und wählt nur den Inhalt der Felder "Beschreibung" und "Übersetzungen" für die Ergebnisse aus. Wenn Sie die vollständige Liste der Felder sehen möchten, entfernen Sie den „Auswählen“-Parameter.
import requests
url = "https://{}.search.windows.net/indexes/{}/docs/search?api-version=2025-09-01".format(search_service, search_index)
requests.post(url, json={"search": "door", "count": "true", "select": "Description, Translations"}, headers={"api-key": search_key}).json()
Der folgende Screenshot zeigt die Zellenausgabe für das Beispielskript:
Bereinigen von Ressourcen
Wenn Sie in Ihrem eigenen Abonnement arbeiten, ist es ratsam, nach Abschluss eines Projekts die nicht mehr benötigten Ressourcen zu entfernen. Ressourcen, die weiterhin ausgeführt werden, können Sie Geld kosten. Sie können entweder einzelne Ressourcen oder aber die Ressourcengruppe löschen, um den gesamten Ressourcensatz zu entfernen.
Sie können Ressourcen im Azure-Portal über den Link Alle Ressourcen oder Ressourcengruppen im linken Navigationsbereich suchen und verwalten.
Nächste Schritte
In diesem Tutorial haben Sie den AzureSearchWriter-Transformator in SynapseML kennengelernt, der eine neue Methode zum Erstellen und Laden von Suchindizes in Azure KI Search darstellt. Der Transformer nimmt strukturiertes JSON als Eingabe. FormOntologyLearner kann die erforderliche Struktur für die Ausgabe bereitstellen, die von den Azure Document Intelligence-Transformatoren in SynapseML erzeugt wird.
Sehen Sie sich als nächsten Schritt die anderen SynapseML-Tutorials an, die transformierte Inhalte erzeugen, die Sie möglicherweise über die Azure KI Search erkunden möchten: