我有一个保存的情感分析模型以及代码和数据。我正在尝试创建一个具有此代码功能并使用此受过训练的模型的库。我不知道如何整合依赖于它的模型和功能。
有人可以指导我具体如何做吗?
答案 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,或手动将其上传到其他地方