Como estudiante de lingüística computacional, con frecuencia hago experimentos de aprendizaje automático donde tengo que preparar los datos de entrenamiento de todo tipo de recursos diferentes, como los corpus de texto sin formato o anotados o los bancos de árbol sintáctico. Para cada nueva tarea y cada nuevo experimento, escribo programas (normalmente en Python y, a veces, en Java) para extraer las características y valores que necesito y transformar los datos de un formato a otro. Esto generalmente da como resultado una gran cantidad de archivos muy grandes y una gran cantidad de programas pequeños que los procesan para obtener la entrada de algún marco de aprendizaje automático (como los archivos arff para Weka).Marcos generales para preparar los datos de entrenamiento?
Uno necesita estar muy bien organizado para tratar con eso y programar con gran cuidado para no perder ninguna peculiaridad importante, excepciones o errores en las toneladas de datos. Muchos principios de un buen diseño de software como patrones de diseño o paradigmas de refactorización no son un gran uso para estas tareas porque cosas como la seguridad, la mantenibilidad o la sostenibilidad no tienen importancia real: una vez que el programa procesó los datos con éxito ya no los necesita. Esto ha llegado tan lejos que incluso dejé de molestarme en utilizar clases o funciones en absoluto en mi código y programa de Python de una manera sencilla de procedimiento. El próximo experimento requerirá diferentes conjuntos de datos con características únicas y en un formato diferente para que su preparación tenga que ser programada desde cero de todos modos. Mi experiencia hasta ahora es que no es inusual gastar entre el 80% y el 90% del tiempo de un proyecto en la tarea de preparar datos de capacitación. Las horas y los días solo pasan cuando se piensa en cómo pasar de un formato de datos a otro. En ocasiones, esto puede ser bastante frustrante.
Bueno, probablemente has adivinado que estoy exagerando un poco, incluso a propósito, pero estoy seguro de que entiendes lo que estoy tratando de decir. Mi pregunta, en realidad, es esta:
¿Existen marcos generales, arquitecturas, mejores prácticas para abordar estas tareas? ¿Cuánto del código que escribo puedo esperar ser reutilizable si tengo un diseño óptimo?
De acuerdo con mi experiencia en la escuela de posgrado, no considero que sea una exageración en absoluto. :PAG – ealdent