A continuación se describe el esquema simplificado de un sistema de recuperación de información basado en el Modelo de Espacio Vectorial.
La recuperación de información es el proceso mediante el cual, partiendo de una colección de textos fija (por ejemplo resúmenes de libros) y una necesidad de información (expresada por ejemplo mediante palabras unidas por operadores booleanos), se devuelven los documentos que mejor satisfacen esa necesidad. Se trata de un proceso con numerosas aplicaciones prácticas, como buscadores web o bibliotecas digitales.
Generalmente el proceso sigue estos pasos:
Según este modelo cada expresión del lenguaje natural puede representarse como un vector de pesos de términos (entendiendo término como la unidad mínima de información, por ejemplo una palabra o, como veremos después, la raíz sintáctica de una palabra). En el caso de la recuperación de información se representan los documentos y la consulta:
Para determinar la similitud que existe entre un documento y una consulta se calcula la distancia que existen entre los vectores que los representan (a menor distancia, mayor similitud). Para calcular esa distancia se aplica el Teorema del Coseno:
vectorX · vectorY
cos(vectorX, vectorY) = -----------------------
|vectorX| · |vectorY|Como acabamos de ver, calcular la similitud entre un documento y una consulta es tan fácil como calcular la distancia entre dos vectores.Sin embargo esos vectores deben representar lo mejor posible tanto a los documentos como a la consulta. En este punto veremos cómo calcular esos vectores.Hemos comentado que los vectores están formados por "pesos de términos". El primer paso es escoger qué terminos se escogen. El enfoque más simplista sería escoger como términos cada una de las palabras de cada documento.De esta manera obtendríamos los términos para los documentos siguientes:
doc1 = "Mañana será un día estupendo, me voy de pesca" doc2 = "Me gusta más la noche que el día" doc3 = "Paco será alguien el día de mañana" términos = (mañana, será, un, día, estupendo, me, voy, de, vacaciones, gusta, más, la, noche, que, el, para, alguien)
A partir de los términos, hemos de asignar un peso para cada término de cada uno de los documentos. Por ejemplo, podemos asignar un 1 si el término aparece en el documento y un 0 si no aparece:
términos = mañana | será | un | día | estupendo | me | voy | de | pesca | gusta | más | la | noche | que | el | Paco | alguien doc1 = 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 doc2 = 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 doc3 = 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1
De esta manera los vectores quedan de la manera siguiente:
doc1 = (1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0) doc2 = (0,0,0,1,0,1,0,0,0,1,1,1,1,1,1,0,0) doc3 = (1,1,0,1,0,0,0,1,0,0,0,0,0,0,1,1,1)Si alguien empleara ahora la consulta:
consulta = "fotos de Paco de noche"
Habría que representarla mediante el proceso anterior, quedando:
consulta = (0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0)
A continuación calcularíamos la distancia del vector de la consulta con el vector de cada documento y devolveríamos los documentos ordenados de mayor a menor similitud.
Naturalmente pueden aplicarse procesos más sofisticados de representación, tanto para escoger los términos como para calcular los pesos. Un posible esquema a seguir sería:
Versión 1.0 - Dedicado al bueno de Maelmori
Todos los comentarios, críticas y sugerencias serán bien recibid@s en http://www.rivendel.org o en rivendelARROBArivendel.org
