Crie um modelo com SynapseML

Este artigo mostra-lhe como construir um modelo de aprendizagem automática com SynapseML num portátil Microsoft Fabric. Cria-se um pipeline de treino que utiliza a caracterização do texto e a regressão LightGBM para prever as classificações dos livros a partir do texto da crítica. Também aprende a usar Foundry Tools para análise de sentimento pré-configurada.

  • Crie um caderno Fabric e anexe uma casa de lago
  • Importar bibliotecas e carregar dados
  • Construir e treinar um processo de extração de características de texto e regressão LightGBM
  • Gerar previsões
  • (Opcional) Análise de sentimento do Run Foundry Tools

Pré-requisitos

  • Obtenha uma assinatura do Microsoft Fabric. Ou inscreva-se para uma avaliação gratuita do Microsoft Fabric.

  • Entre no Microsoft Fabric.

  • Altera para o Fabric usando o alternador de experiência no canto inferior esquerdo da sua página inicial.

    Captura de ecrã que mostra a seleção de Fabric no menu do comutador de experiências.

Configurar o ambiente

No seu bloco de notas, importe bibliotecas SynapseML e inicialize a sessão do Spark.

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

spark = SparkSession.builder.getOrCreate()

Verificação: Execute a seguinte célula para confirmar que o Spark está a funcionar:

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

A saída mostra o número de versão do Spark. Qualquer versão 3.4 ou posterior é esperada. A versão exata depende do tempo de execução do teu Fabric.

Carregar um conjunto de dados

Carrega o conjunto de dados de revisões de livros e divide-o em conjuntos de treino e de teste. O conjunto de dados contém duas colunas: rating (inteiro 1-5) e text (conteúdo de revisão).

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ção: Execute a célula seguinte para confirmar que os dados foram carregados corretamente:

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

A saída mostra aproximadamente 800 linhas de treino e 200 linhas de teste, com duas colunas: rating (inteiro) e text (string). O número exato de linhas varia porque randomSplit é não determinístico.

Criar a cadeia de processos de formação

Crie um pipeline que destaque o texto da avaliação com TextFeaturizer e preveja a classificação com 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ção: Execute a célula seguinte para confirmar o pipeline treinado:

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

A saída mostra dois estágios do pipeline: TextFeaturizerModel e LightGBMRegressionModel.

Prever a saída dos dados de teste

Chame o transform método no modelo para prever as classificações dos dados do teste e exiba os resultados.

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

Verificação: Execute a seguinte célula para confirmar que foram geradas as previsões:

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

A saída lista quatro colunas (rating, text, features, prediction) e aproximadamente 200 linhas. A coluna prediction contém a pontuação prevista do modelo como um valor de vírgula flutuante. Compare com a coluna real rating para avaliar o desempenho do modelo.

(Opcional) Utilize o Foundry Tools para análise de sentimentos

Se quiser analisar o sentimento das suas críticas de livros, pode usar a integração do SynapseML com o Foundry Tools. Esta etapa utiliza o modelo pré-construído TextSentiment para classificar o sentimento do texto, o que é uma tarefa diferente da previsão de classificação nos passos anteriores.

Importante

Este passo requer uma chave do Foundry Tools armazenada no Azure Key Vault. Se saltaste esses pré-requisitos, completa-os primeiro ou salta esta secção.

Execute o seguinte código com estas substituições:

  • Substitua <your-secret-name> pelo nome do segredo da chave da Foundry Tools em Key Vault.
  • Substitua <your-key-vault-name> pelo nome da sua instância 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

Atualize o valor setLocation se o seu recurso Foundry Tools estiver numa região Azure diferente (por exemplo, "westus2" ou "westeurope").

Verificação: Execute a seguinte célula para confirmar a conclusão da análise de sentimento:

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

A saída mostra três colunas (rating, text, sentiment). A sentiment coluna contém resultados estruturados com etiquetas como positive, negative, neutral, ou mixed para cada revisão.

Solução de problemas

Problema Causa Resolução
JAVA_GATEWAY_EXITED erro ao criar o SparkSession Executar código fora de um caderno Fabric Executa este código num caderno Fabric onde o Spark está pré-configurado. Não funcione localmente sem uma instalação Spark.
Could not find <secret> in keyvault <vault> O nome do Key Vault ou o nome do segredo está incorreto, ou a identidade do notebook não tem acesso Verifica se os nomes correspondem exatamente. No portal do Azure, confirme que a identidade do espaço de trabalho do Fabric tem permissão Get nos segredos do Key Vault.
TextFeaturizer devolve características vazias A coluna de texto de entrada é nula ou vazia Verifique valores nulos: train.filter(train.text.isNull()).count() - remover valores nulos antes do treino.
randomSplit devolve contagens de linhas inesperadas A divisão aleatória do Spark é não determinística Este é um comportamento esperado. Defina uma semente para a reprodutibilidade: .randomSplit([0.8, 0.2], seed=42)
AnalysisException: Path does not exist Problema de rede ao aceder ao blob de dados de exemplo Verifique a conectividade da rede. No Fabric, confirme que o seu espaço de trabalho pode aceder a URLs externas do Armazenamento de Blobs do Azure.
Foundry Tools apresenta 401 ou 403 Chave de subscrição inválida ou expirada Gera uma nova chave no portal de Azure na secção do teu recurso Foundry Tools Chaves e Endpoint. Atualiza o segredo do Key Vault.
setLocation retorna 404 Desajuste regional Defina a localização para corresponder à região do Azure onde criou o seu recurso Foundry Tools.

Limpeza de recursos

Se criou recursos do Azure para a etapa opcional das Foundry Tools e já não precisa deles, elimine-os para evitar cobranças:

  1. No portal Azure, elimine o recurso multi-serviço Foundry Tools.
  2. No portal Azure, elimine a instância do Key Vault.
  3. No teu espaço de trabalho do Fabric, elimina o caderno de testes se já não precisares dele.