jueves, 23 de octubre de 2008

RecogTheme (Construcción)

Ya con esta fase tenemos los casos de uso que nos faltaba por implementar
- Grabar conocimiento
- Recuperar conocimiento
¿Problemas?
La red neuronal solo reconoce el texto que tiene casi las mismas palabras y el mismo orden, que los textos con los cuales ha sido entrenada. Por ejemplo:

"El niño está en casa" (frase de entrenamiento)

"En casa está el niño" (frase a analizar)
La frase a analizar no la reconocería, ya que las palabras están en otro orden. Se intento entrenar a la red neuronal con todas las palabras por orden alfabético, pero, pero no se alcanzaba un error minimo en la red de 0.05.


Con lo cual, el componente queda para el reconomiento de texto muy parecido. Habría que hacer más pruebas y ver hasta que punto es capaz de reconocer.
Para quien quiera usarlo, y hacer alguna modificación en el programa de test. El código fuente está aquí.

Y con esto, dejamos ahí este proyecto.

Movimiento Tanques

Movimiento Tanques

Con este programa, quería implementar el algoritmo de “Flocking”. Con este algoritmo se pueden simular movimiento de banco de peces, el tráfico, ...pero yo he supuesto que se movian tanques.

¿Aspectos a destacar en este desarrollo?

Lo he implementado como si fuese un prototipo, y para aprender dicho algoritmo. Y como no, he caido en algunos de los anti-patterns (pero siendo un prototipo, están más o menos justificados estos anti-patterns). Como el anti-pattern Blod. Donde casi todo el código está en la clase Form1. Y también otro anti-pattern es el Cut-and-Paste. Esto sobre todo al inicializar las varibles. ¿Solución? re-factorizar.

miércoles, 15 de octubre de 2008

RecogTheme (Elaboración)

Hemos pasado ya la fase de Elaboración y ya tenemos los dos casos de uso principales. Que erán:
- Entrenar el componente
- Reconocer un texto a través del componente
Asi que, con estos dos casos de uso tenemos la base de arquitectura de la aplicación. El cual es uno de los objetivos de la fase de Elaboración.
¿Qué ha pasado en esta fase? problemas....como en todo proyecto...
Tecnologico: como se ha usado c++/cli, había que pasar una función de callback desde c++/cli a c++ puro y duro. Y claro, en debug no pasada nada con ese tipo de formato, no casca, y el relase si casca si no se dice explicitamente el tipo de formato (stdcall o cdecl).
Otro asunto, fue el entrenamiento de la red neuronal. No bajaba el error de la red de 0.18. ¿No aprendía la red?. Al final, hubo que normalizar las entradas a la red a valores en el rango [-0.1 y 1.0]. Y claro, todo esto, ha aumentado mis estimaciones sobre sobre la finalización de esta fase.
Y claro, ya lo dicen los textos, cuando la tecnología es nueva y el campo de trabajo es nuevo, el tiempo se dispara.

¿Riesgos detectados?

La red neurnal, solamente reconoce aquellos textos que las palabras estén en orden. Por ejemplo, si entrenamos la red con un texto, y luego invertimos las palabras de orden, la red no reconocera el texto. Con lo cual, es un problema. Ya que un texto puedo estar en distinto orden y significar los mismo, y sin embarlo la red necesita que esten en orden.



¿Posibles soluciones para mitigar el riesgo? Idear algo para que las palabras entren a la red de forma ordenada. Una forma sería ordenar las palabras por su longitud. Es decir, contando el número de letras de cada palabra, asi, las de longitud 1 entrarían en la neurona de entrada 1, las de longitud 2 a la neurona segunda. Esto reduciria de 50 neuronas de entrada a 10 como mucho. Habría que hacer pruebas. O idear otra forma.

Aquí está el fichero de Rational Rose donde se diseño primeramente los casos de uso, realización de casos de uso, diagramas de secuencia,...

Y como manda, la fase de Elaboración, aquí está un ejecutable de la arquitectura. Solo hay que pulsar el botón "Iniciar Entrenamiento" y pasar a la otra pestaña para que el componente reconozca los temas.

Un pantallazo se puede ver aquí.



martes, 7 de octubre de 2008

RecogTheme (Concepción)

Supongamos que estamos en la empresa Acme y nos comentan un jefe que tenemos que desarrollar un componente inteligente que reconozca los temas de cada texto, ya que este, se podría usar en distintos proyectos del grupo y dar a cada aplicación, algo de inteligencia.

Asi, con esta descripción, nos ponemos manos a la obra y generemos un documento de Visión, donde ya le añadimos las funciones básicas del componente y un documento con la arquitectura candidata y prototipo de interfaz de usuario.

Asi de esta manera pasamos la Fase de Concepción en RUP para este proyecto. Ha sido corta y hemos generado poca liturgia (como lo llaman en el libro The Rational Unified Process Made Easy - A Practitioner's Guide To The Rup), pero solo era eso lo que necesitabamos.
 
Free counter and web stats