使用 SynapseML 生成模型

本文介绍如何使用 SynapseML 生成机器学习模型,以及如何简化复杂的机器学习任务。 使用 SynapseML 构建一个包含特征工程阶段和 LightGBM 回归阶段的训练管道。 该管道从书评文本预测评级。 下面介绍如何将预生成模型与 SynapseML 配合使用来解决机器学习问题。

先决条件

准备资源

设置生成模型和管道所需的工具和资源。

  1. 创建新笔记本
  2. 将笔记本附加到湖屋。 在 资源管理器中,展开 Lakehouses,然后选择添加
  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)

创建训练管道

创建一个管道,该管道使用 TextFeaturizer 库中的 synapse.ml.featurize.text 来特征化数据,并使用 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 服务一步转换数据

或者,对于具有预生成解决方案的此类任务,可以使用 SynapseML 与 Azure AI 服务的集成一步转换数据。 运行以下代码,并进行下述替换:

  • <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))