Skops 库实现 scikit-learn 模型托管、文档编写和在 Hugging Face Hub 上的协作
TL;DR
Skops 是一个新的 Hugging Face 库,简化了 scikit-learn 模型的序列化、生成符合规范的模型卡以及将其发布到 Hub 的过程,从而提升了可复现性、可发现性和交互式推理。
scikit-learn 模型的端到端工作流
结论: Skops 提供了一个简洁、可脚本化的流水线,从训练好的模型开始,最终得到包含模型文件、配置和丰富模型卡的可公开共享的仓库。
- 训练模型 – 可以使用任何 scikit-learn 估计器。示例在乳腺癌数据集上训练了一个
DecisionTreeClassifier。 - 序列化模型 – 使用
pickle(或joblib)保存估计器。文件路径会传递给skops.hub_utils.init。 - 初始化本地 Hub 仓库 –
hub_utils.init会创建一个文件夹,包含:- 序列化的模型文件,
- 一个记录模型特征、所需库版本、任务标识 (
tabular-classification) 和示例输入的配置 JSON。
- 生成模型卡 – 使用模型路径和通过
metadata_from_config提取的元数据实例化skops.card.Card。卡片的 YAML 头部包含必需的元数据(许可证、库名、任务),而 markdown 正文则填充描述、作者、局限性和使用代码等章节。 - 添加评估细节 – 使用
add描述评估方法,使用add_metrics插入数值结果(例如 accuracy、F1)。可以使用add_plot附加图形(例如混淆矩阵)。 - 保存并推送 – 将卡片写入
README.md,然后使用 Hub 仓库 ID 和身份验证令牌调用hub_utils.push。将create_remote=True设置为在远程仓库不存在时创建它。 - 下载和更新 – 其他人可以使用
hub_utils.download获取仓库。如果依赖项发生变化,hub_utils.update_env会重新写入环境规范。
模型卡结构与自动化
结论: Skops 自动填充 Hugging Face 模型卡模板,确保所有必需的元数据字段均已提供,以提升可发现性并激活推理小部件。
- 模板由 YAML 元数据块和随后自由格式的 markdown 组成。
- 必需的 YAML 键(license、library、task 等)从步骤 3 生成的配置文件中填充。
Card.add注入自定义字段,如model_description、limitations、citation_bibtex和get_started_code。Card.add_metrics将度量字典转换为 markdown 表格。Card.add_plot将图像文件(例如confusion_matrix.png)链接到卡片,Hub 在 UI 中渲染。
推理小部件集成
结论: 一旦仓库包含模型文件、配置和正确格式的卡片,Hub 会自动显示交互式推理小部件。
- 小部件从配置中读取
task和示例输入,以构建用于表格分类预测的 UI。 - 用户可以直接在模型页面上测试模型,无需编写任何代码。
资源与示例
结论: Hugging Face 提供了现成的教程和文档,帮助用户快速使用 Skops。
- 模型卡教程 – 创建和自定义卡片的逐步指南。
- hub_utils 教程 – 演示仓库初始化、推送和下载。
- 完整 API 参考 – 详细的类和方法文档。
- 展示完整工作流的示例仓库位于
https://huggingface.co/scikit-learn/skops-blog-example。
为什么 Skops 很重要
结论: 通过将 scikit-learn 模型序列化与 Hub 原生元数据和交互式推理相结合,Skops 降低了可复现机器学习部署的门槛,鼓励社区共享经典机器学习模型,并将 Hub 的模型卡生态系统扩展到深度学习框架之外。
Sources
- OriginalIntroducing Skops