Tworzenie modelu za pomocą usługi SynapseML

W tym artykule pokazano, jak utworzyć model uczenia maszynowego za pomocą usługi SynapseML w notesie Microsoft Fabric. Tworzysz potok treningowy, który wykorzystuje wektoryzację tekstu i regresję LightGBM do przewidywania ocen książek na podstawie tekstu recenzji. Dowiesz się również, jak korzystać z narzędzi Foundry Tools do gotowej analizy wydźwięku.

  • Utwórz notes w usłudze Fabric i dołącz lakehouse
  • Importowanie bibliotek i ładowanie danych
  • Kompilowanie i trenowanie cechowania tekstu i potoku regresji LightGBM
  • Generowanie przewidywań
  • (Opcjonalnie) Uruchom analizę wydźwięku w Foundry Tools

Wymagania wstępne

Konfigurowanie środowiska

W notesie zaimportuj biblioteki SynapseML i zainicjuj sesję platformy Spark.

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

spark = SparkSession.builder.getOrCreate()

Weryfikacja: Uruchom następującą komórkę, aby potwierdzić, że Spark działa:

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

Dane wyjściowe zawierają numer wersji platformy Spark. Oczekiwana jest dowolna wersja 3.4 lub nowsza. Dokładna wersja zależy od środowiska uruchomieniowego Fabric.

Ładowanie zestawu danych

Załaduj zestaw danych przeglądów książek i podziel go na zestawy treningowe i testowe. Zestaw danych zawiera dwie kolumny: rating (liczba całkowita 1–5) i text (przejrzyj zawartość).

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

display(train)

Weryfikacja: Uruchom następującą komórkę, aby potwierdzić, że dane zostały poprawnie załadowane:

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

Dane wyjściowe zawierają około 800 wierszy treningowych i 200 wierszy testowych z dwiema kolumnami: rating (liczba całkowita) i text (ciąg). Dokładne liczby wierszy różnią się, ponieważ randomSplit nie są deterministyczne.

Utwórz potok szkoleniowy

Utwórz potok, który przekształca tekst recenzji do postaci cech za pomocą TextFeaturizer i przewiduje ocenę za pomocą 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)

Weryfikacja: Uruchom następującą komórkę, aby potwierdzić, że potok został wytrenowany:

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

Dane wyjściowe zawierają dwa etapy potoku: TextFeaturizerModel i LightGBMRegressionModel.

Przewidzieć wyniki danych testowych

Wywołaj metodę transform w modelu, aby przewidzieć klasyfikacje danych testowych i wyświetlić wyniki.

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

Weryfikacja: Uruchom następującą komórkę, aby potwierdzić, że wygenerowano predykcje:

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

Dane wyjściowe zawierają cztery kolumny (rating, text, features, prediction) i około 200 wierszy. Kolumna prediction zawiera przewidywaną ocenę modelu jako liczbę zmiennoprzecinkową. Porównaj ją z rzeczywistą rating kolumną, aby ocenić wydajność modelu.

(Opcjonalnie) Używanie narzędzi Foundry Tools do analizy wydźwięku

Jeśli chcesz przeanalizować tonację recenzji książki, możesz użyć integracji usługi SynapseML z narzędziami Foundry Tools. W tym kroku użyto wstępnie utworzonego TextSentiment modelu do klasyfikowania tonacji tekstu, które jest innym zadaniem niż przewidywanie klasyfikacji w poprzednich krokach.

Ważna

Ten krok wymaga klucza Foundry Tools przechowywanego w usłudze Azure Key Vault. Jeśli pominięto te wymagania wstępne, najpierw wykonaj je lub pomiń tę sekcję.

Uruchom następujący kod z następującymi zamianami:

  • Zastąp <your-secret-name> nazwą klucza narzędzia Foundry w Key Vault.
  • Zastąp <your-key-vault-name> nazwą instancji usługi 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

Zaktualizuj wartość setLocation, jeśli zasób narzędzia Foundry znajduje się w innym regionie Azure (na przykład "westus2" lub "westeurope").

Weryfikacja: Uruchom następującą komórkę, aby potwierdzić, że analiza wydźwięku została ukończona:

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

Dane wyjściowe zawierają trzy kolumny (rating, text, sentiment). Kolumna sentiment zawiera ustrukturyzowane wyniki z etykietami takimi jak positive, negative, neutral lub mixed dla każdej recenzji.

Troubleshooting

Problematyka Przyczyna Resolution
JAVA_GATEWAY_EXITED błąd podczas tworzenia SparkSession Uruchamianie kodu poza notatnikiem Fabric Uruchom ten kod w notesie Fabric, w którym platforma Spark jest wstępnie skonfigurowana. Nie uruchamiaj lokalnie bez instalacji platformy Spark.
Could not find <secret> in keyvault <vault> Nazwa usługi Key Vault lub nazwa wpisu tajnego jest niepoprawna albo tożsamość notesu nie ma uprawnień dostępu Sprawdź, czy nazwy są dokładnie zgodne. W portalu Azure upewnij się, że tożsamość obszaru roboczego Fabric ma uprawnienie Get do wpisów tajnych w usłudze Key Vault.
TextFeaturizer zwraca puste funkcje Kolumna tekstowa danych wejściowych ma wartość null lub jest pusta Sprawdź, czy nie ma wartości null: train.filter(train.text.isNull()).count() — usuń wartości null przed trenowaniem.
randomSplit zwraca nieoczekiwane liczby wierszy Losowe dzielenie platformy Spark nie jest deterministyczne Jest to oczekiwane zachowanie. Ustaw ziarno dla powtarzalności: .randomSplit([0.8, 0.2], seed=42)
AnalysisException: Path does not exist Problem z siecią podczas uzyskiwania dostępu do przykładowego obiektu blob danych Sprawdź łączność sieciową. W Fabric upewnij się, że obszar roboczy może uzyskiwać dostęp do zewnętrznych adresów URL Azure Blob Storage.
Narzędzia Foundry zwracają kod 401 lub 403 Nieprawidłowy lub wygasły klucz subskrypcji Wygeneruj nowy klucz w portalu Azure w sekcji Klucze i punkt końcowy w zasobie Foundry Tools. Zaktualizuj klucz tajny w usłudze Key Vault.
setLocation zwraca kod 404 Niezgodność regionów Ustaw lokalizację tak, aby odpowiadała regionowi Azure, w którym utworzono zasób narzędzi foundry.

Uprzątnij zasoby

Jeśli utworzyłeś zasoby platformy Azure na potrzeby opcjonalnego kroku Foundry Tools i nie są już potrzebne, usuń je, aby uniknąć opłat:

  1. W portalu Azure usuń wielousługowy zasób Foundry Tools.
  2. W portalu Azure usuń wystąpienie Key Vault.
  3. W obszarze roboczym Fabric usuń notes testowy, jeśli nie jest już potrzebny.