在 Python 中使用 ML 模型打包库

Packaging Libraries with ML models in Python

我有一个已保存的情绪分析模型以及代码和数据。我正在尝试创建一个库,该库将具有此代码的功能并使用此训练有素的模型。我不知道如何合并模型和依赖于它的功能。

谁能指导我具体如何操作?

编辑:使用 pickle 是我使用的方法(在下面回答)

如果你想正确地维护这样一个库,你需要知道三件事:

  • 如何构建包
  • 如何对包进行版本控制
  • 如何分发包

有几种方法可以做到这一点,如果您想将此 post 用作教程,目前最多 user-friendly 可能是 poetry, so I'll use that as an example. It needs to be installed


为了使用一些非常基本的项目框架,我假设您有类似的东西:

modelpersister
├───modelpersister
│   ├───model.pkl
│   ├───__init__.py
│   ├───model_definition.py
│   ├───train.py
│   └───analyze.py
└───pyproject.toml
  • model.pkl:您要随包裹一起运送的模型工件
  • __init__.py:空,needs to be there to make this folder a python module
  • model_definition.py:包含 class 定义和定义模型的特征
  • train.py:接受数据来训练你的模型并用结果覆盖当前的 model.pkl 文件,大致如下:
import pickle
from pathlib import Path

from modelpersister.model_definition import SentimentAnalyzer

# overwrite the current model given some new data
def train(data):
    model = SentimentAnalyzer.train(data)

    with open(Path(__file__).parent / "model.pkl") as model_file:
        pickle.dump(model, model_file)
  • analyze.py:在给定当前 model.pkl 的情况下接受数据点进行分析,大致如下:
import pickle
import importlib.resources

from modelpersister.model_definition import MyModel

# load the current model as a package resource (small but important detail)
with importlib.resources.path("modelpersister", "model.pkl") as model_file:
    model: MyModel = pickle.load(model_file)

# make meaningful analyzes available in this file
def estimate(data_point):
    return model.estimate(data_point)
  • pyproject.toml: poetry 打包这段代码需要的元数据文件,和这个很像:
[tool.poetry]
name = "modelpersister"
version = "0.1.0"
description = "Ship a sentiment analysis model."
authors = ["Mishaal <my@mail.com>"]
license = "MIT"  # a good default as far as licenses go

[tool.poetry.dependencies]
python = "^3.8"
sklearn = "^0.23"  # or whichever ML library you used for your model definition

[tool.poetry.dev-dependencies]

[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"

鉴于所有这些文件都充满了有意义的代码,并希望为项目使用比 modelpersister 更好的名称,您的工作流程将大致如下所示:

  • 更新 model_definition.py 中的特征,使用 train.py 更好的数据训练模型,或在 analysis.py 中添加新函数,直到您觉得您的模型现在明显比以前更好
  • 运行 poetry version minor更新包版本
  • 运行 poetry build 将您的代码和模型构建到源代码分发和 wheel 文件中,如果需要,您可以在
  • 上执行一些最终测试
  • 运行 poetry publish 分发您的包 - 默认到 global Python package index, but you can also set up a private PyPI instance and tell poetry about it,或手动上传到其他地方