【发布时间】:2020-11-30 04:55:06
【问题描述】:
我有一个用于情绪分析的保存模型以及代码和数据。我正在尝试创建一个库,该库将具有此代码的功能并使用此训练有素的模型。我不明白如何合并依赖它的模型和功能。
谁能指导我具体怎么做?
编辑:使用pickle是我采用的方法(在下面回答)
【问题讨论】:
标签: python machine-learning module libraries python-packaging
我有一个用于情绪分析的保存模型以及代码和数据。我正在尝试创建一个库,该库将具有此代码的功能并使用此训练有素的模型。我不明白如何合并依赖它的模型和功能。
谁能指导我具体怎么做?
编辑:使用pickle是我采用的方法(在下面回答)
【问题讨论】:
标签: python machine-learning module libraries python-packaging
如果你想正确维护这样一个库,你需要知道三件事:
有几种方法可以做到这一点,目前最用户友好的可能是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,或者在其他地方手动上传【讨论】:
pip install modelpersisterf-0.1.0-py3-none-any.whl 之类的东西安装它们。一个很好的测试,看看你的 .whl 和 .tar 是否良好,可以创建新的虚拟环境并使用上述 pip 命令将其安装到其中。