jueves, 20 de mayo de 2010

Los problemas de la Busqueda Semantica

Desde hace un tiempo se oye hablar mucho de la busqueda semantica, incluso muchas empresas se ganan la vida vendiendo buscadores semanticos. Sin embargo, no es oro todo lo que reluce y la busqueda semantica no solo no es util en muchos casos, sino que ademas, en ocasiones puede llegar a ser perjudicial.

El problema con la busqueda semantica, ya sea desde la perspectiva del PLN o desde el punto de vista de la Web Semantica de Tim Berners-Lee reside en que la integracion de conocimiento semantico en los buscadores tradicionales es muy complicada. Desde mi punto de vista, la tarea mas importante que realiza un buscador no es recuperar documentos (o paginas web), sino ordenarlos.

El ranking es la pieza clave de un buscador, ya que un buscador ha de ser capaz de situar aquellos documentos que satisfacen la necesidad de informacion del usuario, es decir los mas relevantes, en las primeras posiciones de la lista de resultados.

Un error muy tipico es pensar que los buscadores se basan solamente en un sistema booleano, es decir en calcular si un documento o pagina web es relevante o no lo es para el usuario que realiza la consulta, y esto no es asi, ya que la tarea es calcular en que medida es relevante para el usuario, de manera que podamos situar los documentos mas relevantes en la parte alta del ranking de resultados.

Aunque las tecnologias semanticas son utiles para recuperar documentos, sin embargo, suelen ser bastante perjudiciales a la hora de ordenar esos documentos en funcion de su relevancia.

Te pondre un ejemplo muy sencillo, es una simplificacion, pero sirve para ilustrar lo que intento explicar aqui. Imagina que el usuario introduce la siguiente consulta en un buscador:

Consulta : restaurante barcelona

La necesidad de informacion del usuario parece bastante clara, quiere recuperar documentos que hablen de restaurantes que estan en la ciudad de barcelona.

Si vemos esta consulta desde la perspectiva de una algoritmo tipico de IR como los que usan los buscadores veremos que cada documento se ordenara en funcion del peso (el peso es un valor numerico que define la importancia de una palabra en un documento, por ejemplo, el numero de veces que aparece) de las palabras de la consulta que aparecen en el. De esta forma se suma el peso de "restaurante" mas el peso de "barcelona" y eso nos ayuda a generar nuestra lista ordenada de documentos relevantes.

Asi pues podemos decir que la palabar "barcelona" aporta un 50% de la informacion necesaria para resolver la necesidad de informacion del usuario y la palabra "restaurante" aporta el otro 50%.

Ahora imaginemos que metemos algo de semantica, una ontologia, o algun tipo de diccionario por detras que nos permite expandir de alguna forma la consulta inicial del usuario, por ejemplo:

Consulta original: restaurante barcelona

Consulta expandida: restaurante bistro buffet barcelona

Aparentemente estamos completando la informacion que nos ha dado el usuario, utilizando sinonimos de la palabra "restaurante" de manera que ahora recuperaremos tambien documentos sobre buffets en barcelona que tambien podrian ser del interes del usuario. El problema reside es que si bien estamos mejorando la capacidad de recuperar nuevos documentos, nos estamos cargando el ranking.

Recordemos que el ranking se calcula en base a una suma (combinacion lineal) de los pesos en los documentos de cada una de las palabras que aparecen en la consulta, de manera que con la version expandida de la consulta la palabra "Barcelona" ha pasado de tener un 50% de impacto en el calculo de nuestro ranking (que es lo que tenia en la consulta inicial) a tener solo un 25%, ya que en la consulta expandida tenemos restaurante 25% + bistro 25% + buffet 25% + barcelona 25%

Esto quiere decir que un documento donde aparezcan las palabras "buffet" "restaurante" y "bistro" pero no la palabra "barcelona" estara mas arriba en nuestro ranking que un documento que contenga solo las palabras "restaurante" y "barcelona". Asi pues, hay una probabilidad muy alta de devolverle al usuario paginas web con informacion de restaurantes, buffets y bistros en Madrid.

Este ejemplo es una simplificacion, y existen tecnicas para suavizar el efecto de la expansion, pero aun asi no estan muy depuradas y sigue siendo un problema por resolver en lo que a busqueda semantica se refiere.

6 comentarios:

  1. Jose Ramón.

    ¿Qué ocurre cuando el texto que se busca no es el original? sino un abstract generado por una persona.

    En mi experiencia el resumen tiene a empobrecer las posibilidades de recuperación. Porque el que ha generado ese resumen ha machacado el doc original (su estructura) y lo ha simplificado (menos riqueza de palabras)

    Estas búsquedas semánticas intentan muchs veces recuperar algo de lo perdido por el camino, con la finalidad de evitar los "resultados 0".

    Es como un, de perdidos al río, si no tengo nada, saquemos algo, lo que sea. Con lo bonito que es el silencio ;)

    En fin, te esperamos como agua de mayo..

    fernando.

    ResponderEliminar
  2. :-) muy buena pregunta.

    El problema de recall o exhaustividad es uno de los problemas tipicos en recuperacion de informacion, aunque actualmente con el tamano que tienen las colecciones hoy en dia siempre hay algo que responder con lo cual este problema se ha reducido mucho, especialmente en la web.

    Aun asi sigue estando presente en colecciones mas pequenas, o donde, como tu bien dices, se ha perdido el texto original y se ha sustituido por una version reducida.

    La clave para utilizar informacion semantica es hacerlo en el indice y no en la consulta, el principal problema reside en la expansion de consultas basada en informacion semantica, es decir cuando cogemos la consulta inicial del usuario y le anadimos nuevos terminos. Sin embargo, el problema desaparece si los metadatos estan indexados junto con el documento, ya que la consulta no se modifica, y por lo tanto la forma en la que el usuario ha definido su necesidad de informacion permanece intacta, manteniendo cada palabra de la consulta su importancia inicial.

    Si seguimos el ejemplo del post, podemos anadir a nuestros documentos sobre restaurantes la palabra "bistro" como un metadato, de esta forma estos documentos podran ser recuperados cuando el usuario busque por "bistro" o por la palabra "restaurante" solucionando asi el problema de recall y facilitando nuevos puntos de entrada a nuestra coleccion para el usuario.

    Asi pues la clave cuando usamos informacion semantica es usarla a nivel del documento (o del objeto que queramos recuperar) y nunca a nivel de la consulta. Podriamos decir algo asi como "expande tus documentos, no tus consultas" :-)

    Dicho esto, tambien he de decir que hay ciertas formas de hacerlo a nivel de consulta, pero son un poco complicadas y aun no estan maduras. Yo escribi un articulo sobre esto hace una temporada, (si te animas mandame un mail y te lo mando http://www.springerlink.com/content/8k203446tt35j193/), aunque debo reconocer que es un poco teorico de mas :-(

    Otra forma de lidiar con este problema, es en base a busquedas por facetas, de manera que en lugar de expandir la consulta, se generan varias consultas nuevas a partir de la original que se ejecutan de forma separada, por ejemplo por un lado lanzas la consulta:

    restaurante + barcelona

    y por otro:

    bistro + barcelona

    con una lista de resultados distinta para cada consulta

    Esto te puede ayudar en el caso de que no tengas nada para "restaurante", pero si para "bistro".

    Pero claro, esta solucion se basa en distintas consultas y distintas listas de resultados y una navegacion por facetas para que el usuario pueda ir de una a otra.

    Vaya rollo que te he soltado :-) yo tambien estoy deseando que llegue el 1 de julio, estoy superilusionado, la verdad. Nos vemos prontito.

    jose

    ResponderEliminar
  3. Gracias por la respuesta Jose Ramòn,

    Si he entendido bien, se trataría de asociar bistró / bistro / bistrot que funcionaría como un sinónimo de "restaurante"

    Eso provocaría que todos los docs indexados por "restaurantes" lo fueran tambíén por bistró al mismo tiempo.

    ResponderEliminar
  4. Justo, esa es la idea, al hacerlo a nivel del documento, y no en la consulta, se evitan los problemas de la combinacion lineal (suma) en el calculo de relevancia y a la vez permites que un documento que hable de restaurantes pueda ser recuperado tambien por la palabra bistro.

    El tratamiento de estos metadatos en el indice es un poco especial, ya que no suelen llevar asociada una frecuencia de aparicion que nos ayude a calcular su relevancia en el documento, con lo cual hay que tratarlos de manera diferente al resto de palabras que aparecen originalmente en el documento, pero bueno este ya es otro problema.

    En mi opinion el mejor uso que se puede hacer de este tipo de metadatos, especialmente si tienes un buen tesauro por detras, es generar facetas asociadas a cada busqueda, de manera parecida a como se hace en el nuevo interfaz de google.

    Generar facetas a partir de una busqueda mejora mucho la usabilidad del buscador y de hecho se ha revelado como la mejor alternativa a los antiguos directorios, que a dia de hoy han quedado obsoletos.

    ResponderEliminar
  5. Entonces hablaríamos de algo que se puede hacer a nivel de tesauro. Bien esto pone la jugada más interesante todavía ;)

    ResponderEliminar
  6. Claro, a nivel de tesauro se puede hacer algo muy útil en la linea de búsqueda por facetas y búsqueda exploratoria. El gran problema de los grandes buscadores es que como no pueden tener un tesauro tan inmenso como el que necesitarían entonces tienen que detectar las facetas automaticamente, lo cual es muy complicado. Sin embargo, en el caso de los buscadores especializados tener un tesauro es algo mas factible y por lo tanto la implementación de busqueda por facetas se simplifica mucho.

    ResponderEliminar