Skops 库实现 scikit-learn 模型托管、文档编写和在 Hugging Face Hub 上的协作

TL;DR

Skops 是一个新的 Hugging Face 库,简化了 scikit-learn 模型的序列化、生成符合规范的模型卡以及将其发布到 Hub 的过程,从而提升了可复现性、可发现性和交互式推理。

scikit-learn 模型的端到端工作流

结论: Skops 提供了一个简洁、可脚本化的流水线,从训练好的模型开始,最终得到包含模型文件、配置和丰富模型卡的可公开共享的仓库。

  1. 训练模型 – 可以使用任何 scikit-learn 估计器。示例在乳腺癌数据集上训练了一个 DecisionTreeClassifier
  2. 序列化模型 – 使用 pickle(或 joblib)保存估计器。文件路径会传递给 skops.hub_utils.init
  3. 初始化本地 Hub 仓库hub_utils.init 会创建一个文件夹,包含:
    • 序列化的模型文件,
    • 一个记录模型特征、所需库版本、任务标识 (tabular-classification) 和示例输入的配置 JSON。
  4. 生成模型卡 – 使用模型路径和通过 metadata_from_config 提取的元数据实例化 skops.card.Card。卡片的 YAML 头部包含必需的元数据(许可证、库名、任务),而 markdown 正文则填充描述、作者、局限性和使用代码等章节。
  5. 添加评估细节 – 使用 add 描述评估方法,使用 add_metrics 插入数值结果(例如 accuracy、F1)。可以使用 add_plot 附加图形(例如混淆矩阵)。
  6. 保存并推送 – 将卡片写入 README.md,然后使用 Hub 仓库 ID 和身份验证令牌调用 hub_utils.push。将 create_remote=True 设置为在远程仓库不存在时创建它。
  7. 下载和更新 – 其他人可以使用 hub_utils.download 获取仓库。如果依赖项发生变化,hub_utils.update_env 会重新写入环境规范。

模型卡结构与自动化

结论: Skops 自动填充 Hugging Face 模型卡模板,确保所有必需的元数据字段均已提供,以提升可发现性并激活推理小部件。

  • 模板由 YAML 元数据块和随后自由格式的 markdown 组成。
  • 必需的 YAML 键(license、library、task 等)从步骤 3 生成的配置文件中填充。
  • Card.add 注入自定义字段,如 model_descriptionlimitationscitation_bibtexget_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