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"])