Acabo de terminar con una implementación prototipo de un algoritmo de aprendizaje supervisado, asignando automáticamente etiquetas categóricas a todos los elementos en la base de datos de nuestra compañía (aproximadamente 5 millones de elementos).Agile: Historias de usuarios para el proyecto de aprendizaje automático?
Los resultados se ven bien, y me han dado luz verde para planificar el proyecto de implementación de producción.
He hecho este tipo de trabajo antes, así que sé cómo los componentes funcionales del software. Necesito una colección de rastreadores web para buscar datos. Necesito extraer características de los documentos rastreados. Esos documentos deben segregarse en un "conjunto de capacitación" y un "conjunto de clasificación", y los vectores de características deben extraerse de cada documento. Esos vectores de características se autoorganizan en grupos y los clústeres se pasan a través de una serie de operaciones de reequilibrio. Etc, etc. etc. etc.
Así que armé un plan, con aproximadamente 30 tareas únicas de desarrollo/implementación, cada una con estimaciones de tiempo. La primera etapa de desarrollo, ignorando algunas características avanzadas que nos gustaría tener a largo plazo, pero que aún no es lo suficientemente alta como para incluirla en el cronograma de desarrollo, está programada para dos meses de trabajo. . (Tenga en cuenta que ya tengo un prototipo funcional, por lo que la implementación final es significativamente más sencilla que si el proyecto comenzara desde cero.)
Mi gerente dijo que el plan le parecía bueno, pero me preguntó si podía reorganizarlo. las tareas en historias de usuarios, por varias razones: (1) nuestro software de gestión de proyectos está totalmente organizado en torno a historias de usuarios; (2) toda nuestra programación se basa en ajustar cuentos completos de usuarios en sprints, en lugar de tareas de programación individual; (3) otros equipos, como los desarrolladores web, han hecho un gran uso de metodologías ágiles, y se han beneficiado al modelar todas las características del software como historias de usuarios.
así que creé una historia de usuario en el nivel superior del proyecto:
Como usuario del sistema, quiero buscar elementos por categoría, por lo que puedo encontrar fácilmente los elementos más relevantes dentro de una base de datos enorme y compleja.
O tal vez una historia mejor de nivel superior de esta función sería:
Como editor de contenido, quiero crear automáticamente designaciones categóricas para los artículos en nuestra base de datos, por lo que los clientes pueden fácilmente encuentre datos de alto valor dentro de nuestra enorme y compleja base de datos.
Pero ese no es el problema real.
La parte engañosa, para mí, es descubrir cómo crear historias de usuario subordinadas para el resto de la arquitectura de aprendizaje automático.
Caso en punto ... Sé que el algoritmo requiere dos subdivisiones arquitectónicas principales: (A) entrenamiento y (B) clasificación. Y sé que la parte de capacitación de la arquitectura requiere la construcción de un espacio de clúster.
Toda la literatura de desarrollo ágil que he leído parece indicar que una historia de usuario debe ser la "implementación más pequeña posible que ofrece valor comercial". Y eso tiene mucho sentido cuando se diseña una pieza de software para el usuario final. Comience de a poco y luego incremente el valor cuando los usuarios demanden funcionalidades adicionales.
Pero un espacio de clúster, en sí mismo, proporciona cero valor comercial.Tampoco lo hace un rastreador, o un extractor de funciones. No hay valor comercial (no para el usuario final ni para ninguno de los roles internos de la empresa) en un sistema parcial . Un espacio de clúster entrenado solo es posible con el rastreador y el extractor de funciones, y solo es relevante si también desarrollamos un clasificador acompañante.
supongo que sería posible crear historias de usuario, donde los componentes subordinados del sistema actúan como los usuarios en las historias:
Como supervisado-learning rutina de construcción clúster de espacio, que quiere consumir datos de un extractor de características, para que yo pueda existir.
Pero eso parece realmente extraño. ¿Qué beneficio me proporciona como desarrollador (o nuestros usuarios, o cualquier otra parte interesada, para el caso) para modelar mis historias de usuario de esa manera?
Aunque la historia principal se puede dividir fácilmente a lo largo de los límites del componente arquitectónico (rastreador, entrenador, clasificador, etc.), no puedo pensar en ninguna descomposición útil desde la perspectiva del usuario.
¿Qué piensan? ¿Cómo se planifican las historias de usuario Agile para componentes sofisticados, indivisibles y sin uso del usuario?
Con respecto a las "pruebas obvias", en el nivel superior del clasificador, definitivamente hay algunas pruebas obvias, y ya puedo medir varios tipos diferentes de exactitud de agregado. Pero una vez que rompo el diseño en componentes, las pruebas se vuelven mucho menos obvias. Es muy difícil probar la "extracción de características" aislada de la "clasificación" porque los resultados del clasificador definen los criterios de éxito para las características extraídas. ¡Ninguna parte del sistema produce resultados mensurablemente correctos o incorrectos, hasta que esos componentes se ensamblen en un sistema completo! – benjismith