本文介绍如何在Microsoft Fabric笔记本中使用 SynapseML 生成机器学习模型。 你创建了一个训练管道,使用文本特征提取和 LightGBM 回归根据评论文本预测书籍评分。 你还将了解如何使用 Foundry 工具进行预生成情绪分析。
- 创建 Fabric 笔记本并附加到湖仓
- 导入库并加载数据
- 构建并训练文本特征化和 LightGBM 回归流水线
- 生成预测
- (可选)运行 Foundry Tools 的情感分析
先决条件
获取 Microsoft Fabric 订阅。 或者注册免费的 Microsoft Fabric 试用版。
登录 Microsoft Fabric。
使用主页左下侧的体验切换器切换到 Fabric。
- 在Fabric工作区中创建新的笔记本。
- 将 Lakehouse 附加到笔记本中。 在 “资源管理器” 窗格中,展开 Lakehouses,然后选择“ 添加”。
- (可选)若要运行 情绪分析步骤,需要:
- Foundry Tools 密钥。 按照快速入门中的说明操作 :为 Foundry 工具创建多服务资源。
- 一个Azure 密钥保管库 实例,其中存储了作为机密的 Foundry Tools 密钥。
设置环境
在笔记本中,导入 SynapseML 库并初始化 Spark 会话。
from pyspark.sql import SparkSession
from synapse.ml.core.platform import *
spark = SparkSession.builder.getOrCreate()
验证: 运行以下单元格以确认 Spark 正在运行:
print(f"Spark version: {spark.version}")
输出显示 Spark 版本号。 预计需要 3.4 或更高版本。 确切的版本取决于Fabric运行时。
加载数据集
加载书评数据集并将其拆分为训练集和测试集。 数据集包含两列: rating (整数 1-5)和 text (审阅内容)。
train, test = (
spark.read.parquet(
"wasbs://publicwasb@mmlspark.blob.core.windows.net/BookReviewsFromAmazon10K.parquet"
)
.limit(1000)
.cache()
.randomSplit([0.8, 0.2])
)
display(train)
验证: 运行以下单元格以确认正确加载的数据:
print(f"Training rows: {train.count()}, Test rows: {test.count()}")
print(f"Columns: {train.columns}")
train.printSchema()
输出显示大约 800 个训练行和 200 个测试行,其中包含两列: rating (整数)和 text (字符串)。 精确的行数会有所不同,因为 randomSplit 是非确定性的。
创建训练管道
创建一个管道,使用 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)
验证: 运行以下单元格以确认已训练的管道:
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__}")
输出显示两个管道阶段: TextFeaturizerModel 和 LightGBMRegressionModel。
预测测试数据的输出
对 transform 模型调用该方法以预测测试数据的评分并显示结果。
predictions = model.transform(test)
display(predictions)
验证: 运行以下单元格以确认已生成预测:
print(f"Prediction columns: {predictions.columns}")
print(f"Prediction count: {predictions.count()}")
predictions.select("rating", "prediction").show(5)
输出列出了四列(rating、、 text、 features) prediction和大约 200 行。
prediction 列包含模型预测的评分,且以浮点数形式表示。 将其与实际 rating 列进行比较,以评估模型性能。
(可选)使用 Foundry 工具进行情绪分析
如果要分析书评的情绪,可以使用 SynapseML 与 Foundry 工具的集成。 此步骤使用预生成 TextSentiment 模型对文本情绪进行分类,这与前面的步骤中的分级预测不同。
Important
此步骤需要存储在Azure 密钥保管库中的 Foundry Tools 密钥。 如果跳过了这些先决条件,请先完成这些先决条件,或跳过本部分。
运行以下代码,并进行下述替换:
- 将
<your-secret-name>替换为 密钥保管库 中的 Foundry Tools 密钥机密的名称。 - 将
<your-key-vault-name>替换为Azure 密钥保管库实例的名称。
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)
注释
如果 Foundry Tools 资源位于其他Azure区域(例如,setLocation 或 "westus2"),请更新 "westeurope" 值。
验证: 运行以下单元格以确认情绪分析已完成:
print(f"Sentiment columns: {sentiment_results.columns}")
sentiment_results.select("text", "sentiment").show(3, truncate=50)
输出显示三列(rating、、textsentiment)。
sentiment列包含结构化结果,并为每条评价标注了诸如positive、negative、neutral或mixed之类的标签。
故障排除
| 問题 | 原因 | 解决方案 |
|---|---|---|
JAVA_GATEWAY_EXITED 创建 SparkSession 时出错 |
在Fabric笔记本外运行代码 | 在预配置 Spark 的Fabric笔记本中运行此代码。 不要在没有 Spark 安装的情况下在本地运行。 |
Could not find <secret> in keyvault <vault> |
密钥保管库名称或机密名称不正确,或者笔记本标识缺少访问权限 | 验证名称是否完全匹配。 在 Azure 门户中,确认 Fabric 工作区身份对 密钥保管库 机密拥有 Get 权限。 |
TextFeaturizer 返回空功能 |
输入文本列为 null 或为空 | 检查 null 值: train.filter(train.text.isNull()).count() - 在训练之前删除 null 值。 |
randomSplit 返回非预期的行数 |
Spark 的随机拆分是非确定性的 | 这是预期的行为。 设置种子以确保可复现性:.randomSplit([0.8, 0.2], seed=42) |
AnalysisException: Path does not exist |
访问示例数据 blob 时出现网络问题 | 验证网络连接。 在 Fabric 中,确保工作区能够访问外部 Azure Blob 存储 URL。 |
| Foundry Tools 返回 401 或 403 | 无效或过期的订阅密钥 | 在 Azure 门户中的 Foundry Tools 资源Keys 和 Endpoint 部分下生成新密钥。 更新 密钥保管库 机密。 |
setLocation 返回 404 |
区域不匹配 | 设置位置以匹配已创建 Foundry Tools 资源的Azure区域。 |
清理资源
如果为可选的 Foundry 工具步骤创建了Azure资源,并且不再需要它们,请将其删除以避免产生费用:
- 在Azure门户中,删除 Foundry Tools 多服务资源。
- 在Azure门户中,删除密钥保管库实例。
- 在Fabric工作区中,如果不再需要测试笔记本,请将其删除。