Δημιουργία μοντέλου με το SynapseML

Αυτό το άρθρο σάς δείχνει πώς μπορείτε να δημιουργήσετε ένα μοντέλο εκμάθησης μηχανής με το SynapseML σε ένα σημειωματάριο Microsoft Fabric. Μπορείτε να δημιουργήσετε μια διοχέτευση εκπαίδευσης που χρησιμοποιεί χαρακτηριστικά κειμένου και παλινδρόμηση LightGBM για να προβλέψει τις αξιολογήσεις βιβλίων από το κείμενο αναθεώρησης. Μαθαίνετε επίσης πώς να χρησιμοποιείτε τα Foundry Tools για προκατασκευασμένη ανάλυση συναισθήματος.

  • Δημιουργία σημειωματαρίου Fabric και επισύναψη lakehouse
  • Εισαγωγή βιβλιοθηκών και φόρτωση δεδομένων
  • Δημιουργήστε και εκπαιδεύστε μια διοχέτευση δόμησης κειμένου και παλινδρόμησης LightGBM
  • Δημιουργήστε προβλέψεις
  • (Προαιρετικός) Εκτέλεση ανάλυσης συναισθήματος Foundry Tools

Προαπαιτούμενα στοιχεία

  • Λάβετε μια συνδρομή Microsoft Fabric. Εναλλακτικά, εγγραφείτε για μια δωρεάν δοκιμαστική έκδοση του Microsoft Fabric.

  • Εισέλθετε στο Microsoft Fabric.

  • Μεταβείτε στο Fabric χρησιμοποιώντας την εναλλαγή εμπειριών στην κάτω αριστερή πλευρά της αρχικής σελίδας σας.

    Στιγμιότυπο οθόνης που εμφανίζει την επιλογή του Fabric στο μενού εναλλαγής εμπειριών.

Ρύθμιση του περιβάλλοντος

Στο σημειωματάριό σας, εισαγάγετε βιβλιοθήκες SynapseML και προετοιμάστε την περίοδο λειτουργίας Spark.

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

spark = SparkSession.builder.getOrCreate()

Επαλήθευση: Εκτελέστε το ακόλουθο κελί για να επιβεβαιώσετε ότι το Spark εκτελείται:

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

Η έξοδος εμφανίζει τον αριθμό έκδοσης Spark. Αναμένεται οποιαδήποτε έκδοση 3.4 ή νεότερη. Η ακριβής έκδοση εξαρτάται από το χρόνο εκτέλεσης του Fabric.

Φόρτωση συνόλου δεδομένων

Φορτώστε το σύνολο δεδομένων κριτικών βιβλίων και χωρίστε το σε σύνολα εκπαίδευσης και δοκιμών. Το σύνολο δεδομένων περιέχει δύο στήλες: rating (ακέραιος αριθμός 1-5) και text (αναθεώρηση περιεχομένου).

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

display(train)

Επαλήθευση: Εκτελέστε το ακόλουθο κελί για να επιβεβαιώσετε ότι τα δεδομένα φορτώθηκαν σωστά:

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

Η έξοδος δείχνει περίπου 800 σειρές εκπαίδευσης και 200 δοκιμαστικές σειρές, με δύο στήλες: rating (ακέραιος) και text (συμβολοσειρά). Ο ακριβής αριθμός σειρών ποικίλλει επειδή randomSplit δεν είναι ντετερμινιστικός.

Δημιουργία της διοχέτευσης εκπαίδευσης

Δημιουργήστε μια διοχέτευση που περιλαμβάνει το κείμενο της κριτικής με TextFeaturizer και προβλέπει την αξιολόγηση με 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)

Επαλήθευση: Εκτελέστε το ακόλουθο κελί για να επιβεβαιώσετε ότι η διοχέτευση εκπαιδεύτηκε:

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__}")

Η έξοδος δείχνει δύο στάδια διοχέτευσης: TextFeaturizerModel και LightGBMRegressionModel.

Πρόβλεψη της εξόδου των δεδομένων δοκιμής

Καλέστε τη transform μέθοδο στο μοντέλο για να προβλέψετε τις αξιολογήσεις για τα δεδομένα δοκιμής και να εμφανίσετε τα αποτελέσματα.

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

Επαλήθευση: Εκτελέστε το ακόλουθο κελί για να επιβεβαιώσετε ότι δημιουργήθηκαν προβλέψεις:

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

Η έξοδος παραθέτει τέσσερις στήλες (rating, text, features, prediction) και περίπου 200 γραμμές. Η prediction στήλη περιέχει την προβλεπόμενη αξιολόγηση του μοντέλου ως float. Συγκρίνετε το με την πραγματική rating στήλη για να αξιολογήσετε την απόδοση του μοντέλου.

(Προαιρετικός) Χρήση εργαλείων χυτηρίου για ανάλυση συναισθήματος

Εάν θέλετε να αναλύσετε το συναίσθημα των κριτικών βιβλίων σας, μπορείτε να χρησιμοποιήσετε την ενσωμάτωση του SynapseML με το Foundry Tools. Αυτό το βήμα χρησιμοποιεί το προκατασκευασμένο TextSentiment μοντέλο για την ταξινόμηση του συναισθήματος κειμένου, η οποία είναι διαφορετική εργασία από την πρόβλεψη αξιολόγησης στα προηγούμενα βήματα.

Σημαντικό

Αυτό το βήμα απαιτεί ένα κλειδί Foundry Tools που είναι αποθηκευμένο στο Azure Key Vault. Εάν παραλείψατε αυτές τις προϋποθέσεις, συμπληρώστε τις πρώτα ή παραλείψτε αυτήν την ενότητα.

Εκτελέστε τον ακόλουθο κώδικα με αυτές τις αντικαταστάσεις:

  • Αντικαταστήστε το <your-secret-name> με το όνομα του μυστικού κλειδιού του Foundry Tools στο Key Vault.
  • Αντικαταστήστε το <your-key-vault-name> με το όνομα της Azure Key Vault σας παρουσίας.
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)

Σημείωση

Ενημερώστε την τιμή setLocation εάν ο πόρος Foundry Tools βρίσκεται σε διαφορετική περιοχή Azure (για παράδειγμα, "westus2" ή "westeurope").

Επαλήθευση: Εκτελέστε το ακόλουθο κελί για να επιβεβαιώσετε ότι η ανάλυση συναισθήματος ολοκληρώθηκε:

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

Η έξοδος εμφανίζει τρεις στήλες (rating, text, sentiment). Η sentiment στήλη περιέχει δομημένα αποτελέσματα με ετικέτες όπως positive, negative, neutralή mixed για κάθε κριτική.

Αντιμετώπιση προβλημάτων

Ζήτημα Αιτία Επίλυση
JAVA_GATEWAY_EXITED σφάλμα κατά τη δημιουργία του SparkSession Εκτέλεση κώδικα εκτός σημειωματαρίου Fabric Εκτελέστε αυτόν τον κώδικα σε ένα σημειωματάριο Fabric όπου το Spark είναι προρυθμισμένο. Μην εκτελείτε τοπικά χωρίς εγκατάσταση Spark.
Could not find <secret> in keyvault <vault> Το όνομα ή το μυστικό όνομα του Key Vault είναι λανθασμένο ή η ταυτότητα του σημειωματαρίου δεν έχει πρόσβαση Επαληθεύστε ότι τα ονόματα ταιριάζουν ακριβώς. Στην πύλη Azure, επιβεβαιώστε ότι η ταυτότητα του χώρου εργασίας Fabric έχει δικαίωμα Get για Key Vault μυστικούς κωδικούς.
TextFeaturizer επιστρέφει κενά χαρακτηριστικά Η στήλη κειμένου εισαγωγής είναι null ή κενή Ελέγξτε για μηδενικές τιμές: train.filter(train.text.isNull()).count() - Αφαιρέστε τα μηδενικά πριν από την προπόνηση.
randomSplit επιστρέφει μη αναμενόμενο πλήθος γραμμών Ο τυχαίος διαχωρισμός του Spark είναι μη ντετερμινιστικός Αυτή είναι η αναμενόμενη συμπεριφορά. Ορίστε έναν σπόρο για την αναπαραγωγιμότητα: .randomSplit([0.8, 0.2], seed=42)
AnalysisException: Path does not exist Πρόβλημα δικτύου με πρόσβαση στο δείγμα blob δεδομένων Επαληθεύστε τη συνδεσιμότητα δικτύου. Στο Fabric, επιβεβαιώστε ότι ο χώρος εργασίας σας μπορεί να έχει πρόσβαση σε εξωτερικές διευθύνσεις URL του Azure Blob Storage.
Το Foundry Tools επιστρέφει 401 ή 403 Μη έγκυρο ή ληγμένο κλειδί συνδρομής Δημιουργήστε ένα νέο κλειδί στην πύλη Azure στην ενότητα πόρων Foundry Tools Keys and Endpoint. Ενημερώστε τον μυστικό κωδικό Key Vault.
setLocation επιστρέφει 404 Αναντιστοιχία περιοχής Ορίστε τη θέση ώστε να ταιριάζει με την περιοχή Azure όπου δημιουργήσατε τον πόρο Foundry Tools.

Εκκαθάριση των πόρων

Εάν δημιουργήσατε πόρους Azure για το προαιρετικό βήμα Foundry Tools και δεν τους χρειάζεστε πλέον, διαγράψτε τους για να αποφύγετε χρεώσεις:

  1. Στην πύλη Azure, διαγράψτε τον πόρο πολλαπλών υπηρεσιών Foundry Tools.
  2. Στην πύλη Azure, διαγράψτε την παρουσία Key Vault.
  3. Στον χώρο εργασίας Fabric, διαγράψτε το δοκιμαστικό σημειωματάριο εάν δεν το χρειάζεστε πλέον.