Creare un modello con SynapseML

Questo articolo illustra come creare un modello di Machine Learning con SynapseML in un notebook di Microsoft Fabric. Si crea una pipeline di training che usa la definizione delle caratteristiche del testo e la regressione LightGBM per stimare le classificazioni dei libri dal testo della recensione. Imparerai anche come utilizzare Foundry Tools per l'analisi del sentiment predefinita.

  • Creare un notebook di Fabric e associare una lakehouse
  • Importare librerie e caricare dati
  • Creare e addestrare una pipeline di featurizzazione del testo e regressione LightGBM
  • Generare previsioni
  • (Facoltativo) Esegui l'analisi del sentiment con Foundry Tools

Prerequisiti

Configurare l'ambiente

Nel notebook importare le librerie SynapseML e inizializzare la sessione Spark.

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

spark = SparkSession.builder.getOrCreate()

Verifica: Eseguire la cella seguente per verificare che Spark sia in esecuzione:

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

L'output visualizza il numero di versione di Spark. È prevista qualsiasi versione 3.4 o successiva. La versione esatta dipende dal runtime di Fabric.

Caricare un set di dati

Caricare il set di dati delle recensioni di libri e suddividerlo in insiemi di addestramento e di test. Il set di dati contiene due colonne: rating (numero intero 1-5) e text (esaminare il contenuto).

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

display(train)

Verifica: Eseguire la cella seguente per confermare il caricamento corretto dei dati:

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

L'output mostra circa 800 righe di training e 200 righe di test, con due colonne: rating (integer) e text (stringa). Il conteggio esatto delle righe varia perché randomSplit non deterministico.

Creare la pipeline di addestramento

Crea una pipeline che estrae le caratteristiche dal testo della recensione con TextFeaturizer e prevede la valutazione con 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)

Verifica: Esegui la cella seguente per confermare che la pipeline sia stata addestrata:

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

L'output mostra due fasi della pipeline: TextFeaturizerModel e LightGBMRegressionModel.

Predire l'output dei dati di test

Chiamare il transform metodo sul modello per stimare le classificazioni per i dati di test e visualizzare i risultati.

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

Verifica: Eseguire la cella seguente per verificare che le stime siano state generate:

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

L'output elenca quattro colonne (rating, text, features, prediction) e circa 200 righe. La colonna prediction contiene la valutazione prevista del modello in formato float. Confrontarlo con la colonna effettiva rating per valutare le prestazioni del modello.

(Facoltativo) Usa gli strumenti di Foundry per l'analisi del sentiment

Se si vuole analizzare il sentiment delle recensioni dei libri, è possibile usare l'integrazione di SynapseML con Foundry Tools. Questo passaggio usa il modello predefinito TextSentiment per classificare il sentiment del testo, che è un compito diverso dalla previsione della valutazione nei passaggi precedenti.

Importante

Questo passaggio richiede una chiave di Foundry Tools archiviata in Azure Key Vault. Se hai saltato questi prerequisiti, completali prima oppure salta questa sezione.

Eseguire il codice seguente con queste sostituzioni:

  • Sostituire <your-secret-name> con il nome del segreto della chiave di Foundry Tools in Key Vault.
  • Sostituire <your-key-vault-name> con il nome dell'istanza di 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)

Note

Aggiorna il valore setLocation se la risorsa Foundry Tools si trova in un'area di Azure diversa, ad esempio "westus2" o "westeurope".

Verifica: Eseguire la cella seguente per confermare che l'analisi del sentiment è stata completata:

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

L'output mostra tre colonne (rating, text, sentiment). La sentiment colonna contiene risultati strutturati con etichette come positive, negative, neutralo mixed per ogni revisione.

Troubleshooting

Issue Motivo Risoluzione
JAVA_GATEWAY_EXITED errore durante la creazione di SparkSession Esecuzione di codice all'esterno di un notebook di Fabric Eseguire questo codice in un notebook Fabric in cui Spark è preconfigurato. Non eseguire localmente senza un'installazione di Spark.
Could not find <secret> in keyvault <vault> Il nome di Key Vault o il nome del segreto non è corretto, oppure l'identità del notebook non dispone dell'accesso Verificare che i nomi corrispondano esattamente. Nel portale di Azure, verifica che l'identità dell'area di lavoro Fabric disponga dell'autorizzazione Get per i segreti di Key Vault.
TextFeaturizer restituisce funzionalità vuote La colonna di testo di input è null o vuota Verificare la presenza di valori Null: train.filter(train.text.isNull()).count() - rimuovere i valori Null prima del training.
randomSplit restituisce conteggi di righe imprevisti La suddivisione casuale di Spark non è deterministica Si tratta di un comportamento previsto. Impostare un seme per la riproducibilità: .randomSplit([0.8, 0.2], seed=42)
AnalysisException: Path does not exist Problema di rete nell'accedere al blob di dati di esempio Verificare la connettività di rete. In Fabric, verifica che l'area di lavoro possa accedere agli URL esterni di Archiviazione BLOB di Azure.
Foundry Tools restituisce 401 o 403 Chiave di sottoscrizione non valida o scaduta Generare una nuova chiave nel portale di Azure nella sezione Keys and Endpoint della risorsa Foundry Tools. Aggiorna il segreto di Key Vault.
setLocation restituisce 404 Mancata corrispondenza della regione Imposta la posizione in modo che corrisponda all'area geografica di Azure in cui hai creato la risorsa Foundry Tools.

Pulire le risorse

Se hai creato risorse di Azure per il passaggio facoltativo Foundry Tools e non ti servono più, eliminale per evitare addebiti:

  1. Nel portale di Azure, eliminare la risorsa multiservizio Foundry Tools.
  2. Nel portale di Azure eliminare l'istanza di Key Vault.
  3. Nell'area di lavoro Fabric eliminare il notebook di test se non è più necessario.