Будучи студентом вычислительной лингвистики, я часто выполняю эксперименты по компьютерному обучению, где мне приходится готовить данные обучения из всех видов различных ресурсов, таких как сырые или аннотированные текстовые тела или банки синтаксических деревьев. Для каждой новой задачи и каждого нового эксперимента я пишу программы (обычно в Python, а иногда и Java), чтобы извлекать нужные мне функции и значения и преобразовывать данные из одного формата в другой. Обычно это приводит к очень большому количеству очень больших файлов и очень большому числу небольших программ, которые обрабатывают их, чтобы получить вход для некоторых рамок для машинного обучения (например, файлы arff для Weka).Общие рамки подготовки учебных данных?
Нужно быть очень хорошо организованным, чтобы справляться с этим и программировать с большой осторожностью, чтобы не пропустить какие-либо важные особенности, исключения или ошибки в тоннах данных. Многие принципы хорошего дизайна программного обеспечения, такие как шаблоны проектирования или парадигмы рефакторинга, не имеют большого значения для этих задач, поскольку такие вещи, как безопасность, ремонтопригодность или устойчивость, не имеют никакого реального значения - как только программа успешно обработала данные, она больше не нужна. Это зашло так далеко, что я даже переставал беспокоиться об использовании классов или функций вообще в моем коде и программе Python простым процедурным способом. В следующем эксперименте потребуются разные наборы данных с уникальными характеристиками и в другом формате, так что их подготовка, вероятно, будет запрограммирована с нуля в любом случае. Мой опыт до сих пор заключается в том, что нередко тратить 80-90% времени проекта на задачу подготовки учебных данных. Часы и дни идут только на размышления о том, как добраться из одного формата данных в другой. Время от времени это может стать довольно неприятным.
Ну, вы, наверное, догадались, что я преувеличиваю, но я уверен, что вы понимаете, что я пытаюсь сказать. Мой вопрос, на самом деле, таков:
Существуют ли общие рамки, архитектуры, лучшие практики для решения этих задач? Сколько кода, который я пишу, могу ожидать, что его можно использовать повторно для оптимального дизайна?
Основываясь на моем опыте в школьной школе, я не считаю это преувеличением вообще. :П – ealdent