跳到主要内容

MLflow spaCy 集成

简介

spaCy 是一个专为生产环境设计的、工业级的自然语言处理库。它提供了预训练模型和高效的处理流水线,用于命名实体识别、词性标注和文本分类等任务。

MLflow 的 spaCy 集成提供了 NLP 工作流的模型日志记录、版本控制和部署功能。

为什么选择 MLflow + spaCy?

模型打包

自动捕获所有管道组件和依赖项,记录 spaCy 模型。

实验跟踪

跨实验跟踪 NLP 指标、模型性能和训练配置。

轻松部署

使用 MLflow 部署 spaCy 模型,作为 REST API 或批处理推理管道。

版本控制

使用 MLflow 的模型注册表管理不同的模型版本和管道配置。

模型日志记录

将 spaCy 模型记录到 MLflow

python
import mlflow
import spacy

# Load or train your spaCy model
nlp = spacy.load("en_core_web_sm")

# Log to MLflow
model_info = mlflow.spacy.log_model(nlp, name="spacy_model")

使用 MLflow 进行自定义训练

使用 MLflow 跟踪自定义 spaCy 训练

python
import mlflow
import spacy
from spacy.training import Example

# Load base model
nlp = spacy.blank("en")
nlp.add_pipe("ner")

# Sample training data
TRAIN_DATA = [
("Apple is a tech company", {"entities": [(0, 5, "ORG")]}),
("Google acquired YouTube", {"entities": [(0, 6, "ORG"), (16, 23, "PRODUCT")]}),
]

# Convert to Examples
examples = [
Example.from_dict(nlp.make_doc(text), annotations)
for text, annotations in TRAIN_DATA
]

# Initialize and train
optimizer = nlp.initialize()

with mlflow.start_run():
mlflow.log_params(
{
"model": "blank_en",
"pipeline": "ner",
}
)

for epoch in range(10):
losses = {}
for example in examples:
nlp.update([example], sgd=optimizer, losses=losses)

mlflow.log_metric("loss", losses["ner"], step=epoch)

# Log the trained model
mlflow.spacy.log_model(nlp, name="custom_ner_model")

模型加载

从 MLflow 加载 spaCy 模型

python
import mlflow

# Load as spaCy model
nlp = mlflow.spacy.load_model("models:/<model_id>")
doc = nlp("Apple is looking at buying a startup")

# Load as PyFunc for deployment
predictor = mlflow.pyfunc.load_model("models:/<model_id>")
predictions = predictor.predict(["Text to process"])

了解更多