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.

2 comentarios:

Dani dijo...

Hola,

Supongo que el uso de RAM se debe a que todas las operaciones se hacen en memoria.

Con colecciones grandes (como el CLEF) es inviable trabajar en memoria y no quedaría más remedio que hacerlo en disco.

No sé si irán por ahí los tiros ni cómo de difícil/fácil sería adaptar lo que ya tienes para que trabaje sobre disco duro.

Saludos, Dani

Miguel Martínez Álvarez dijo...

El problema de la RAM como bien dices es por utilizar mucho cálculo en memoria (que ya tengo previsto en parte como arreglarlo) y no es demasiado complejo.

El problema es que para aplicar el SVD en una próxima iteración el modulo del numpy coge como parametro la matriz de coocurrencias... y una matriz de 15000 x 15000 de flotantes ocupa bastante.

Resumiendo, en el prototipo básico podré arreglarlo (perdiendo mucha velocidad como es obvio) pero en otras iteraciones tendré que pensar algo más.

Aún así repito la pregunta. ¿La idea es probar los sistemas con todos los documentos del CLEF o con un subconjunto?

Gracias por contestar tan rapido