使用Python用ML模型打包库

时间:2020-08-10 14:56:20

标签: python machine-learning module libraries python-packaging

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

有人可以指导我具体如何做吗?

1 个答案:

答案 0 :(得分:1)

如果要正确维护这样的库,您需要了解三件事:

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

有几种方法可以做到这一点,目前最用户友好的方法可能是poetry,所以我将以它为例。如果您想将此文章用作教程,请使用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:包含类定义和定义模型的功能
  • 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:诗歌为了打包此代码而需要的元数据文件,类似于以下内容:
[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,但是您也可以设置私有PyPI实例and tell poetry about it,或手动将其上传到其他地方