Compilación de un modelo con SynapseML

En este artículo se muestra cómo crear un modelo de aprendizaje automático con SynapseML en un cuaderno de Microsoft Fabric. Cree una canalización de entrenamiento que use la caracterización de texto y la regresión de LightGBM para predecir clasificaciones de libros a partir del texto de revisión. También aprenderá a usar Foundry Tools para el análisis de sentimiento precompilado.

  • Crear un cuaderno de Fabric y adjuntar un lakehouse
  • Importación de bibliotecas y carga de datos
  • Crear y entrenar una canalización de extracción de características de texto y regresión con LightGBM
  • Generación de predicciones
  • (Opcional) Ejecuta el análisis de sentimiento con Foundry Tools

Requisitos previos

Configuración del entorno

En su cuaderno, importe las bibliotecas SynapseML e inicialice su sesión Spark.

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

spark = SparkSession.builder.getOrCreate()

Comprobación: Ejecute la celda siguiente para confirmar que Spark se está ejecutando:

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

La salida muestra el número de versión de Spark. Se espera cualquier versión 3.4 o posterior. La versión exacta depende del entorno de ejecución de Fabric.

Cargar un conjunto de datos

Cargue el conjunto de datos de revisiones del libro y divida en conjuntos de entrenamiento y pruebas. El conjunto de datos contiene dos columnas: rating (entero 1-5) y text (revisar contenido).

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

display(train)

Comprobación: Ejecute la celda siguiente para confirmar que los datos se han cargado correctamente:

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

La salida muestra aproximadamente 800 filas de entrenamiento y 200 filas de prueba, con dos columnas: rating (entero) y text (cadena). Los recuentos exactos de filas varían porque randomSplit no es determinista.

Crear la canalización de entrenamiento

Cree una canalización que incluya el texto de revisión con TextFeaturizer y prediga la clasificación 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)

Comprobación: Ejecute la celda siguiente para confirmar la canalización entrenada:

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

La salida muestra dos fases de canalización: TextFeaturizerModel y LightGBMRegressionModel.

Predecir el resultado de los datos de prueba

Llame al método transform del modelo para predecir valoraciones para los datos de prueba y mostrar los resultados.

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

Comprobación: Ejecute la celda siguiente para confirmar que se generaron predicciones:

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

La salida enumera cuatro columnas (rating, text, features, prediction) y aproximadamente 200 filas. La prediction columna contiene la clasificación predicha del modelo como un valor float. Compárelo con la columna real rating para evaluar el rendimiento del modelo.

(Opcional) Uso de las herramientas de Foundry para el análisis de sentimiento

Si desea analizar las opiniones de sus libros, puede usar la integración de SynapseML con Foundry Tools. En este paso se utiliza el modelo predefinido TextSentiment para clasificar el sentimiento del texto, que es una tarea diferente de la predicción de la calificación en los pasos anteriores.

Importante

Este paso requiere una clave de Foundry Tools almacenada en Azure Key Vault. Si se saltó esos requisitos previos, complételos primero u omita esta sección.

Ejecute el código siguiente con estos reemplazos:

  • Reemplace <your-secret-name> por el nombre del secreto de clave de Foundry Tools en Key Vault.
  • Reemplace <your-key-vault-name> por el nombre de la instancia de 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)

Nota:

Actualice el valor de setLocation si el recurso de Foundry Tools está en una región de Azure diferente (por ejemplo, "westus2" o "westeurope").

Comprobación: Ejecute la celda siguiente para confirmar que se completó el análisis de opiniones:

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

La salida muestra tres columnas (rating, text, sentiment). La sentiment columna contiene resultados estructurados con etiquetas como positive, negative, neutralo mixed para cada revisión.

Solución de problemas

Cuestión Causa Resolution
JAVA_GATEWAY_EXITED error al crear SparkSession Ejecución de código fuera de un cuaderno de Fabric Ejecute este código en un cuaderno de Fabric donde Spark esté preconfigurado. No se ejecute localmente sin una instalación de Spark.
Could not find <secret> in keyvault <vault> El nombre de Key Vault o el nombre del secreto es incorrecto, o la identidad del cuaderno no tiene acceso Compruebe que los nombres coinciden exactamente. En el portal de Azure, compruebe que la identidad del área de trabajo de Fabric tiene el permiso Get en los secretos de Key Vault.
TextFeaturizer no devuelve ninguna característica La columna de texto de entrada es nula o está vacía Compruebe si hay valores nulos: train.filter(train.text.isNull()).count() - quite los valores nulos antes de entrenar.
randomSplit devuelve recuentos de filas inesperados La división aleatoria de Spark no es determinista Este es el comportamiento esperado. Establezca una semilla para garantizar la reproducibilidad: .randomSplit([0.8, 0.2], seed=42)
AnalysisException: Path does not exist Problema de red al acceder al blob de datos de ejemplo Compruebe la conectividad de red. En Fabric, confirme que el área de trabajo puede acceder a direcciones URL de Azure Blob Storage externas.
Foundry Tools devuelve 401 o 403 Clave de suscripción no válida o expirada Cree una nueva clave en el portal de Azure, en la sección Keys and Endpoint de su recurso Foundry Tools. Actualice el secreto de Key Vault.
setLocation devuelve 404 Falta de coincidencia de regiones Establezca la ubicación de modo que coincida con la región de Azure en la que creó el recurso Foundry Tools.

Limpieza de recursos

Si creó recursos de Azure para el paso opcional de Herramientas de Foundry y ya no los necesita, elimínelos para evitar cargos:

  1. En el portal de Azure, elimine el recurso multiservicio Foundry Tools.
  2. En el portal de Azure, elimine la instancia de Key Vault.
  3. En el área de trabajo de Fabric, elimine el cuaderno de prueba si ya no lo necesita.