Erstellen eines Modells mit SynapseML

In diesem Artikel erfahren Sie, wie Sie ein Machine Learning-Modell mit SynapseML in einem Microsoft Fabric-Notizbuch erstellen. Sie erstellen eine Schulungspipeline, die text featurization und LightGBM Regression verwendet, um Buchbewertungen von Rezensionstext vorherzusagen. Außerdem erfahren Sie, wie Sie Foundry Tools für vorgefertigte Stimmungsanalysen verwenden.

  • Erstellen eines Fabric Notizbuchs und Anfügen eines Seehauses
  • Importieren von Bibliotheken und Laden von Daten
  • Erstellen und Trainieren einer Text-Featurisierungs- und LightGBM-Regressionspipeline
  • Generieren von Vorhersagen
  • (Optional) Foundry Tools-Stimmungsanalyse ausführen

Voraussetzungen

Einrichten der Umgebung

Importiere SynapseML-Bibliotheken in dein Notebook, und initialisiere deine Spark-Sitzung.

from pyspark.sql import SparkSession
from synapse.ml.core.platform import *

spark = SparkSession.builder.getOrCreate()

Überprüfung: Führen Sie die folgende Zelle aus, um zu bestätigen, dass Spark ausgeführt wird:

print(f"Spark version: {spark.version}")

Die Ausgabe zeigt die Spark-Versionsnummer an. Jede Version 3.4 oder höher wird erwartet. Die genaue Version hängt von Ihrer Fabric Laufzeit ab.

Laden eines Datasets

Laden Sie den Datensatz für Buchrezensionen und teilen Sie ihn in Trainings- und Testdatensätze auf. Das Dataset enthält zwei Spalten: rating (ganze Zahl 1-5) und text (Inhalt überprüfen).

train, test = (
    spark.read.parquet(
        "wasbs://publicwasb@mmlspark.blob.core.windows.net/BookReviewsFromAmazon10K.parquet"
    )
    .limit(1000)
    .cache()
    .randomSplit([0.8, 0.2])
)

display(train)

Überprüfung: Führen Sie die folgende Zelle aus, um die ordnungsgemäß geladenen Daten zu bestätigen:

print(f"Training rows: {train.count()}, Test rows: {test.count()}")
print(f"Columns: {train.columns}")
train.printSchema()

Die Ausgabe zeigt ungefähr 800 Schulungszeilen und 200 Testzeilen mit zwei Spalten: rating (ganze Zahl) und text (Zeichenfolge). Die genaue Zeilenanzahl variiert, da randomSplit sie nicht deterministisch ist.

Erstellen der Trainingspipeline

Erstellen Sie eine Pipeline, die den Prüftext mit TextFeaturizer featurisiert, und prognostiziert die Bewertung mit LightGBMRegressor.

from pyspark.ml import Pipeline
from synapse.ml.featurize.text import TextFeaturizer
from synapse.ml.lightgbm import LightGBMRegressor

model = Pipeline(
    stages=[
        TextFeaturizer(inputCol="text", outputCol="features"),
        LightGBMRegressor(featuresCol="features", labelCol="rating", dataTransferMode="bulk")
    ]
).fit(train)

Überprüfung: Führen Sie die folgende Zelle aus, um die trainierte Pipeline zu bestätigen:

print(f"Pipeline stages: {len(model.stages)}")
print(f"Stage 1: {type(model.stages[0]).__name__}")
print(f"Stage 2: {type(model.stages[1]).__name__}")

Die Ausgabe zeigt zwei Pipelinephasen an: TextFeaturizerModel und LightGBMRegressionModel.

Sagen Sie die Ausgabe der Testdaten voraus

Rufen Sie die transform Methode für das Modell auf, um Bewertungen für die Testdaten vorherzusagen und die Ergebnisse anzuzeigen.

predictions = model.transform(test)
display(predictions)

Überprüfung: Führen Sie die folgende Zelle aus, um zu bestätigen, dass Vorhersagen generiert wurden:

print(f"Prediction columns: {predictions.columns}")
print(f"Prediction count: {predictions.count()}")
predictions.select("rating", "prediction").show(5)

Die Ausgabe listet vier Spalten (rating, text, features, prediction) und ca. 200 Zeilen auf. Die Spalte enthält die vorhergesagte Bewertung des Modells als Float.The prediction column contains the model's predicted rating as a float. Vergleichen Sie sie mit der tatsächlichen rating Spalte, um die Modellleistung zu bewerten.

(Optional) Verwenden von Foundry Tools für die Stimmungsanalyse

Wenn Sie die Stimmung Ihrer Buchrezensionen analysieren möchten, können Sie die Integration von SynapseML in Foundry Tools verwenden. In diesem Schritt wird das vordefinierte TextSentiment Modell verwendet, um die Textstimmung zu klassifizieren, was eine andere Aufgabe ist als die Bewertungsvorhersage in den vorherigen Schritten.

Important

Für diesen Schritt ist ein in Azure Key Vault gespeicherter Schlüssel "Foundry Tools" erforderlich. Wenn Sie diese Voraussetzungen übersprungen haben, schließen Sie sie zuerst ab, oder überspringen Sie diesen Abschnitt.

Führe den folgenden Code mit diesen Ersetzungen aus:

  • Ersetzen Sie <your-secret-name> durch den Namen Ihres Schlüsselschlüssels "Foundry Tools" in Key Vault.
  • Ersetzen Sie <your-key-vault-name> durch den Namen Ihrer Azure Key Vault Instanz.
from synapse.ml.services import TextSentiment
from synapse.ml.core.platform import find_secret

sentiment_model = TextSentiment(
    textCol="text",
    outputCol="sentiment",
    subscriptionKey=find_secret("<your-secret-name>", "<your-key-vault-name>")
).setLocation("eastus")

sentiment_results = sentiment_model.transform(test)
display(sentiment_results)

Note

Aktualisieren Sie den Wert setLocation, wenn sich die Ressource "Foundry Tools" in einem anderen Azure Bereich befindet (z. B. "westus2" oder "westeurope").

Überprüfung: Führen Sie die folgende Zelle aus, um zu bestätigen, dass die Stimmungsanalyse abgeschlossen wurde:

print(f"Sentiment columns: {sentiment_results.columns}")
sentiment_results.select("text", "sentiment").show(3, truncate=50)

Die Ausgabe zeigt drei Spalten (rating, text, sentiment). Die sentiment Spalte enthält strukturierte Ergebnisse mit Bezeichnungen wie positive, , negative, neutraloder mixed für jede Überprüfung.

Troubleshooting

Thema Ursache Resolution
JAVA_GATEWAY_EXITED Fehler beim Erstellen von SparkSession Ausführen von Code außerhalb eines Fabric Notizbuchs Führen Sie diesen Code in einem Fabric Notizbuch aus, in dem Spark vorkonfiguriert ist. Führen Sie die Ausführung nicht lokal ohne eine Spark-Installation aus.
Could not find <secret> in keyvault <vault> Der Key Vault-Name oder der Name des Geheimnisses ist falsch, oder die Notebook-Identität hat keinen Zugriff. Überprüfen Sie, ob Namen exakt übereinstimmen. Bestätigen Sie im Azure-Portal, dass Ihre Fabric-Arbeitsbereichsidentität über die Berechtigung Get für Key Vault-Geheimnisse verfügt.
TextFeaturizer gibt leere Features zurück. Eingabetextspalte ist null oder leer Überprüfen Sie auf NULL-Werte: train.filter(train.text.isNull()).count() - Entfernen Sie NULL-Werte vor dem Training.
randomSplit gibt unerwartete Zeilenanzahl zurück. Die zufällige Aufteilung von Spark ist nicht deterministisch. Dieses Verhalten wird erwartet. Legen Sie einen Samen zur Reproduzierbarkeit fest: .randomSplit([0.8, 0.2], seed=42)
AnalysisException: Path does not exist Netzwerkproblem beim Zugriff auf das Beispieldaten-BLOB Überprüfen Sie die Netzwerkkonnektivität. Bestätigen Sie in Fabric, dass Ihr Arbeitsbereich auf externe Azure Blob Storage-URLs zugreifen kann.
Foundry Tools gibt 401 oder 403 zurück. Ungültiger oder abgelaufener Abonnementschlüssel Generieren Sie im Azure-Portal im Abschnitt Keys and Endpoint Ihrer Ressource „Foundry Tools“ einen neuen Schlüssel. Aktualisieren Sie das Key Vault-Geheimnis.
setLocation gibt 404 zurück. Nichtübereinstimmung zwischen Regionen Legen Sie den Speicherort so fest, dass er der Azure-Region entspricht, in der Sie Ihre Foundry Tools-Ressource erstellt haben.

Bereinigen von Ressourcen

Wenn Sie Azure Ressourcen für den optionalen Schritt "Foundry Tools" erstellt haben und diese nicht mehr benötigen, löschen Sie sie, um Gebühren zu vermeiden:

  1. Löschen Sie im Azure-Portal die Ressource "Foundry Tools multi-service".
  2. Löschen Sie im Azure-Portal die Key Vault Instanz.
  3. Löschen Sie in Ihrem Fabric Arbeitsbereich das Testnotizbuch, wenn Sie es nicht mehr benötigen.