次の方法で共有


SynapseML を使用したモデルの構築

この記事では、SynapseML を使用して機械学習モデルを構築する方法と、SynapseML で複雑な機械学習タスクを簡略化する方法について説明します。 SynapseML を使用して、特徴量化ステージと LightGBM 回帰ステージを含む小さな機械学習トレーニング パイプラインを作成します。 パイプラインは、書籍レビューのデータセットからのレビュー テキストに基づいて評価を予測します。 また、SynapseML で事前構築済みモデルを使用した機械学習の問題を解決を簡単にする方法についても説明します。

前提条件

リソースを準備する

モデルとパイプラインを構築するために必要なツールとリソースを作成します。

  1. 新しいノートブックを作成します
  2. ノートブックをレイクハウスにアタッチします。 既存のレイクハウスを追加するか、新しいレイクハウスを作成するには、左側の [エクスプローラー][レイクハウス] を展開し、[追加] を選択します。
  3. クイックスタート: Azure AI サービスのマルチサービス リソースを作成する」の手順に従って、Azure AI サービスのキーを取得します。
  4. Azure Key Vault インスタンスを作成し、Azure AI サービス キーをシークレットとしてキー コンテナーに追加します。
  5. キー コンテナー名とシークレット名をメモしておきます。 この情報は、この記事の後半でワンステップ変換を実行するために必要です。

環境を設定する

ノートブックで SynapseML ライブラリをインポートし、Spark セッションを初期化します。

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

spark = SparkSession.builder.getOrCreate()

データセットを読み込む

データセットを読み込み、トレーニング セットとテスト セットに分割します。

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

display(train)

トレーニングのパイプラインを作成する

synapse.ml.featurize.text ライブラリから 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)

テスト データの出力を予測する

モデルで 関数を transform 呼び出して、テスト データの出力を予測し、データフレームとして表示します。

display(model.transform(test))

Azure AI サービスを使用して 1 ステップでデータを変換する

または、事前構築済みのソリューションを持つこれらの種類のタスクでは、SynapseML と Azure AI サービスの統合を使用して、1 つのステップでデータを変換できます。 以下の置換を行って、次のコードを実行します。

  • <secret-name> を Azure AI サービス キー シークレットの名前に置き換えます。
  • <key-vault-name> は、実際のキー コンテナーの名前に置き換えます。
from synapse.ml.services import TextSentiment
from synapse.ml.core.platform import find_secret

model = TextSentiment(
    textCol="text",
    outputCol="sentiment",
    subscriptionKey=find_secret("<secret-name>", "<key-vault-name>")
).setLocation("eastus")

display(model.transform(test))