You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Kedro数据目录获取路径以运行Spacy模型训练?

在Kedro中调用Spacy训练命令的实现方法

核心问题解决:从Kedro数据目录获取文件路径

Kedro中注册的数据目录项可以通过**DataSet对象的_filepath属性**直接获取真实路径,或者通过项目上下文加载数据集后提取路径,两种方式都能将路径传递给训练节点。

方法1:通过DataSet对象直接获取路径

在训练节点函数中,接收Kedro的DataSet实例而非字符串,直接提取路径:

import subprocess
from kedro.io import DataSet

def train_spacy_nlp_model(
    config_dataset: DataSet, 
    train_dataset: DataSet, 
    dev_dataset: DataSet, 
    output_dir: str
):
    # 从DataSet对象提取文件路径
    config_filepath = str(config_dataset._filepath)
    train_filepath = str(train_dataset._filepath)
    dev_filepath = str(dev_dataset._filepath)
    
    # 修正命令参数格式:拆分"python -m"为独立元素,避免shell=True的安全风险
    cmd = [
        "python", "-m", "spacy",
        "train", config_filepath,
        "--output", output_dir,
        "--paths.train", train_filepath,
        "--paths.dev", dev_filepath
    ]
    
    # 使用check=True自动捕获执行错误
    subprocess.run(cmd, check=True)

方法2:通过Kedro上下文获取路径

若需要更灵活的数据集管理,可在节点中加载项目上下文获取路径:

import subprocess
from kedro.framework.project import load_context
import os

def train_spacy_nlp_model(output_dir: str):
    context = load_context(os.getcwd())
    
    # 从catalog加载数据集并提取路径
    config_filepath = str(context.catalog.load("config_cfg")._filepath)
    train_filepath = str(context.catalog.load("train_spacy")._filepath)
    dev_filepath = str(context.catalog.load("dev_spacy")._filepath)
    
    cmd = [
        "python", "-m", "spacy",
        "train", config_filepath,
        "--output", output_dir,
        "--paths.train", train_filepath,
        "--paths.dev", dev_filepath
    ]
    
    try:
        subprocess.run(cmd, check=True)
    except subprocess.CalledProcessError:
        raise RuntimeError("Spacy训练失败")

管道定义:传递数据集到节点

在pipeline.py中定义管道时,直接将注册好的数据集作为输入传给训练节点:

from kedro.pipeline import Pipeline, node
from .nodes import train_spacy_nlp_model

def create_pipeline(**kwargs) -> Pipeline:
    return Pipeline(
        [
            node(
                func=train_spacy_nlp_model,
                inputs=["config_cfg", "train_spacy", "dev_spacy", "params:output_dir"],
                outputs=None,
                name="train_spacy_node",
            )
        ]
    )

其中output_dir可在conf/base/parameters.yml中配置:

output_dir: "./output"

关键注意事项

  • 避免使用shell=True:列表形式的命令参数更安全,无注入风险且跨平台兼容性更好。
  • 数据集命名匹配:确保config_cfg、train_spacy、dev_spacy与你在catalog.yml中注册的数据集名称完全一致。
  • 路径转换:用str()转换_filepath属性,确保得到可直接使用的字符串路径。

内容的提问来源于stack exchange,提问作者João Areias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:20:34