martes, 18 de noviembre de 2008

Estancamiento

La modificación del prototipo es completa y apenas ocupa memoria ram en comparación con la anterior implementación. Por desgracia no todo van a ser buenas noticias...

Actualmente mi portatil sigue indexando 10 documentos del clef (unos 1300 documentos en total) y lleva 10 horas... (estimo que tardará 2 o 3 más). Llevo muchos días intentando optimizar cada fragmento de código y no he conseguido tiempos de ejecución razonables hasta ahora. En el último modelo tuve que aplicar una modificación "mia" para limar un poco el tiempo de ejecución y el algoritmo simplemente no tiene en cuenta ninguna coocurrencia que se de con una probabilidad menor de 0.05

El problema que tengo es que utilizo TODOS los terminos del índice como nuevo espacio vectorial por lo que la matriz de ocurrencias tiene que almacenar relaciones entre muchísimos términos. Esto puede arreglarse utilizando SVD posteriormente o solo almacenando relaciones entre ciertas palabras (nombres, verbos, ...) o entre ciertas partes de la frase (con análisis sintactico).

En varios artículos de DS se habla incluso de decidir "a mano" los términos conceptuales (en torno a 1000) lo cual en el caso de adoptarse en mi prototipo daría unos tiempos mucho más razonables.

La cuestión es que si en dos días más no consigo mejoras sustanciales me veré obligado a hacer algún cambio en la elección de los conceptos... El no haber avanzado apenas en 2 semanas me agobia...

PD: El SVD tiene otro problema añadido y es que si parto de la matriz de coocurrencias completa (para quitar el ruido) tendría que dar al algoritmo la matriz de 25000 x 25000 y, al menos la implementación de numpy no es capaz de procesarla sin utilizar muchísima memoria...

miércoles, 5 de noviembre de 2008

Prototipo V1.0

Hace mucho tiempo que no edito el blog pero no por ello he estado sin trabajar este mes. Llevo todo este tiempo trabajando en el diseño e implementación de mi primer prototipo en Python.

El prototipo es un sistema de recuperación de información que implementa un modelo básico de semántica distribuida. Está en pruebas y da unos resultados bastante buenos con la salvedad de que utiliza una cantidad desmesurada de memoria RAM y que las consultas son algo lentas (no así el indexado). Es un problema que estoy tratanto de arreglar actualmente y con el que estaré hasta la semana que viene cuando debería de dar por finalizado el primer prototipo.

El problema que tengo es que las pruebas las estoy realizando en mi ordenador y no se qué cantidad de datos podría utilizar para las pruebas. Actualmente utilizo de 1 a 15 documentos del clef lo cual pueden ser de 500 a 3000 documentos aproximadamente. Aún mejorando sustancialmente la necesidad de memoria no creo que pueda llegar a procesar los 300 documentos del clef del 95.

La semana que viene enviaré un mail a Dani para que definamos las pruebas para las comparaciones en un futuro.

Las tres siguientes iteraciones serán la posibilidad de un coeficiente de hibridación respecto del modelo vectorial, la incorporación del SVD (ya he realizado algunas pequeñas pruebas) para eliminar ruido en la matriz de coocurrencias y la aplicación de análisis sintactico para obtener solo las coocurrencias más relevantes.