Kedro - Получение пути к элементу в каталоге данных

Я тренирую модель nlp, используя spacy. У меня есть все этапы предварительной обработки, написанные в виде конвейера, и теперь мне нужно провести обучение. Согласно документации spacy мне нужно выполнить следующую команду:

python -m spacy train config.cfg --output ./output --paths.train ./train.spacy --paths.dev ./dev.spacy

Файлы config.cfg, train.spacy и dev.spacy зарегистрированы в моем каталоге данных. Я хочу запустить эту команду с чем-то вроде следующего кода:

import subprocess


def train_spacy_nlp_model(
    config_filepath: str, 
    train_filepath: str, 
    dev_filepath: str, 
    output_dir: str
    ):
    cmd = [
        "python -m", "spacy",
        "train", config_filepath,
        "--output", output_dir,
        "--paths.train", train_filepath,
        "--paths.dev", dev_filepath
    ]

    result = subprocess.run(" ".join(cmd), shell=True)
    if result.returncode != 0:
        raise RuntimeError("Spacy training failed")

Но я понятия не имею, как получить информацию о пути к файлу из элементов моего каталога данных. Есть ли способ передать эту информацию моим узлам при создании конвейера?

Мутабельность и переработка объектов в Python
Мутабельность и переработка объектов в Python
Объекты являются основной конструкцией любого языка ООП, и каждый язык определяет свой собственный синтаксис для их создания, обновления и...
Другой маршрут в Flask Python
Другой маршрут в Flask Python
Flask - это фреймворк, который поддерживает веб-приложения. В этой статье я покажу, как мы можем использовать @app .route в flask, чтобы иметь другую...
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
Проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
Python PyPDF2 - запись метаданных PDF
Python PyPDF2 - запись метаданных PDF
Python скрипт, который будет записывать метаданные в PDF файл, для этого мы будем использовать PDF ридер из библиотеки PyPDF2 . PyPDF2 - это...
Переменные, типы данных и операторы в Python
Переменные, типы данных и операторы в Python
В Python переменные используются как место для хранения значений. Пример переменной формы:
Почему Python - идеальный выбор для проекта AI и ML
Почему Python - идеальный выбор для проекта AI и ML
Блог, которым поделился Harikrishna Kundariya в нашем сообществе Developer Nation Community.
0
0
88
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Переменные, которые вы используете в качестве входных данных, являются строками. Пока каталог данных другой. Переменные каталога данных — набор данных Kedro.

Оба разные. Сохраните путь как часть конфигурации, и вы начнете свой проект.

Мне дан код только как пример поведения, которого я ожидаю, код не высечен на камне. Я действительно хочу избежать сохранения пути как в конфигурации, так и в каталоге данных, так как это было бы анти-шаблоном, если бы они были в обоих местах, и мне нужны файлы в каталоге для предыдущих шагов предварительной обработки.

João Areias 11.11.2022 10:31

Есть ли способ заставить их делиться этой информацией из одного источника?

João Areias 11.11.2022 10:32

Я знаю, что он хранится в атрибуте _filepath для набора данных, но если бы я мог получить доступ к этому атрибуту в конвейере, было бы здорово

João Areias 11.11.2022 10:59
Ответ принят как подходящий

Это, вероятно, не самое элегантное решение, но оно работает для меня, поэтому я буду использовать его, пока не получу лучшее решение. Решение состояло в том, чтобы вернуть путь с объектом в моей реализации DataSet, я сомневаюсь, что это будет обобщено для других наборов данных, таких как SQL-запросы, например, но, поскольку я знаю, что здесь я должен иметь дело с файлом, работает нормально. Вот моя реализация:

from kedro.io import AbstractDataSet
from spacy.tokens import DocBin
from dataclasses import dataclass
from typing import Union
from pathlib import Path


@dataclass
class DocBinModel:
    filepath: Path
    docbin: DocBin


class SpacyDocBinDataSet(AbstractDataSet):
    def __init__(self, filepath, save_args=None, load_args=None):
        self._filepath = filepath
        self._save_args = save_args or {}
        self._load_args = load_args or {}

    def _describe(self):
        return dict(
            filepath=self._filepath,
            save_args=self._save_args,
            load_args=self._load_args,
        )

    def _load(self):
        with open(self._filepath, "rb") as f:
            docbin = DocBin().from_bytes(f.read())
        
        return DocBinModel(self._filepath, docbin)

    def _save(self, data: Union[DocBin, DocBinModel]):
        if isinstance(data, DocBinModel):
            data = data.docbin
        data.to_disk(self._filepath)

    def _exists(self):
        return Path(self._filepath).exists()

Другие вопросы по теме