La nueva versión de Android incluye un sistema de búsqueda por voz más sofisticado que en versiones anteriores. Ahora mismo mediante Google Search Voice puedes preguntarle a tu dispositivo ¿Cuándo es el día del padre o ¿Cuál es la capital de Suecia?. Lo que mucha gente se pregunta ahora mismo, es: ¿cómo funciona esta tecnología?, ¿entienden realmente estos dispositivos lo que preguntamos?.
Los Lenguajes Naturales son las Interfaces de usuario más avanzadas. Imaginen un dispositivo que pueda entender todo lo que decimos, eso sería impresionante! Imaginen no tener que programar en 'lenguajes de programación' si no que se pudiera dar ordenes en un alto nivel a nuestros dispositivos en español. Imaginen a la abuelita programando!
En este artículo explicaré cómo funciona un sistema de preguntas y respuestas.
La diferencia entre Conocimiento e Información.
Vivir en la Era de la información significa que tenemos acceso a gran cantidad de contenidos y que somos capaces de generar contenidos y compartirlos con otros. Compartimos y generamos información cuando tuiteamos comentando acerca de un producto o servicio, cuando publicamos en 4square que estamos en un restaurante y que nos agrada o detestamos lo que ordenamos para comer.
Por otro lado, Conocimiento es usar grandes cantidades de información para establecer, por ejemplo, patrones de comportamiento, tomar decisiones y predecir sucesos. Generamos información cuando escuchamos música y usamos el scrobber de last.fm para almacenar las canciones que hemos escuchado durante el ultimo año, conocimiento es cuando last.fm en base a todas esas canciones nos recomienda una canción nueva que probablemente nos agrade.
Estamos en el boom en cuanto de la generación de conocimiento por que existen las plataformas para generar y compartir información. Naturalmente ello conduce a dos problemas:
- El primer problema se relaciona con la cantidad de información. ¿Cómo procesar tanta cantidad?. De este problema surge el éxito de la computación en la nube y frameworks como hadoop que facilitan a los desarrolladores trabajar en ambientes distribuidos.
- El Segundo problema consiste en que la información no es estructurada, es decir, NO es una gran Base de Datos a la cual podemos consultar, todo lo que la gente escribe en blogs, foros, twitter, facebook, reddit es lenguaje natural... el reto está en cómo extraer información y relaciones entre la información descrita en estos lenguajes.
Recuperación de Información
Recuperación de información es lo que ha hecho Google durante todo este tiempo. Formalmente consiste en, dado un conjunto de palabras clave, retornar una lista de documentos que se relacionen con las palabras clave.
Este es el paradigma que hemos usado todo este tiempo, si es el mejor o no, es una discusión. Lo que sí es cierto, es que queremos optimizar nuestro tiempo, no queremos perder nuestro tiempo buscando y leyendo documentos que no nos interesan.
Imagina que quieres comprar un nuevo teléfono, el teléfono X, probablemente antes de comprarlo quieras saber:
- Qué opina la gente que ya compró ese teléfono.
- Comparativas entre el teléfono X y sus competidores más cercanos
Lo que tu haces, es generar distintas búsquedas en Google, leer un foro, probablemente alguien hizo una pregunta en Yahoo Answers, una pregunta similar a: "cual teléfono debo comprar el X o el Y?" ..etc.. generas varias búsquedas, lees un poco de los resultados arrojados.. ¿tal vez buscas algo relacionado en twitter?, y finalmente tomas tu decisión.
Imagina un sistema, que no sólo indexe la información de la web, pero que además razone sobre ella, que entienda lo que está escrito. Entonces le podrías decir que te haga un resumen sobre el teléfono X. En vez de una lista de sitios web, como resultado obtendrías quizás una lista sólo con opiniones y comparaciones, que es realmente lo que te interesa para tomar tu decisión.
Para mí, todo lo anterior es la recuperación de información en el futuro. Las búsquedas resultarán mucho más eficientes, los resultados serán tan precisos como lo sea la pregunta ingresada, y si la pregunta no es precisa, los resultados serán un overview a gran escala de muchas fuentes diferentes. Seguramente, muchos de los resultados que se obtengan no sea información, si no, conocimineto, eso es el poder de la información.
Pensemos que esta tecnología ahora mismo es quizás un poco fantasiosa, o no, tal vez en 5 o 10 años lo podremos ver?....Aterrizando un poco al 2012, Google le apunta a ello, tienen la información y quieren procesarla, de allí apuntarle a los sistemas de preguntas y respuestas.
Sistemas de Pregunta y Respuesta
A un sistema de preguntas y respuestas le haces una pregunta y el sistema, en vez de responderte con una lista de documentos que se relacionen con las palabras de la pregunta, te arroja una respuesta concreta o cercana a la pregunta que fue ingresada.
¿Esto es magia? No. Es procesamiento de lenguaje natural. Probablemente Google en estos momentos está generando una ontología (una representación de conocimiento) donde se especifican conceptos y relaciones entre esos conceptos. Creo que ello es parte de lo que ellos llaman "The Knowledge Graph", si van al sitio web, pueden navegar entre conceptos (ejemplo: Italia) y cómo se relaciona un concepto con otros, por ejemplo: Italia <-> Leonardo da Vinci.
Este proceso se denomina Open Information Extraction, el cual consiste en extraer conceptos y relaciones de texto en lenguaje natural.
Veamoslo de esta manera: a partir de un noticia que diga:
:
El sistema de Google extrae un registro:
:
Y más relaciones son posibles para el mismo ejemplo.
:
A partir de esos registros se crea una ontología como la de 'the knowledge graph' automáticamente. Obviamente esto requiere muchos procesos relacionados con inteligencia artificial, se tienen que entrenar sistemas para que reconozcan cosas más avanzadas, por ejemplo que a partir de una relación como:
:
:
Parece muy sencillo, pero a nivel computacional es muy difícil, por que involucra lo que llamamos "sentido común".
A partir de esta ontología se puede crear un sistema que permita responder preguntas. Aquí el sistema tiene que 'entender la pregunta'.. y en base a ello calcular la posible respuesta.
¿Cómo entender la pregunta y encontrar la respuesta?
Lamentablemente no existen sistemas avanzados con respecto al entendimiento de lenguajes. En mi humilde opinión, sólo son trucos estadísticos que crean la fantasía que la computadora puede entender lo que decimos.
Supongamos que la pregunta al sistema es, "¿Dónde murio Michael Jackson?", el componete del sistema encargado de procesarla se fija en varios componentes: establecer el tipo de pregunta, establecer el tema de la pregunta y establecer relaciones entre componentes de la pregunta.
Establecer el Tipo de Pregunta
El sistema debe encontrar una partícula que le indique qué tipo de pregunta es y a que categoría pertenece la respuesta que busca. En este caso "Dónde" le indica que lo que está buscando como respuesta es una "locación", lo que sea la respuesta debe de ser en su base de conocimientos una "locación".Establecer el Tema de la Pregunta
Para encontrar el tema de la pregunta, tiene que descartar las palabras menos relevantes, y encontrar las más predominantes, en este caso el tema es "Michael Jackson".Establecer relaciones entre componentes de la Pregunta
Usar las palabras del contexto para encontrar posibles relaciones. en este caso podría ser la palabra "morir".A partir de ello el sistema sabe que va a buscar algo en la ontología que tiene que ver con "Michael Jackson", que lo que va a retornar como respuesta tiene que ser una locación en la ontología, además que la relación entre ese lugar y "Michael Jackson" tiene que ver con: "muerte","morir".
Posibles problemas
¿Cómo saber si todas las relaciones que se extraen son correctas? qué podría pasar si alguien escribe: "Michael Jackson murió en Bogotá, Colombia", entonces la base de conocimientos es errónea y las respuestas serán erradas.
Lo que ocurre en este tipo de casos es que muy probablemente Google descarta las relaciones encontradas en ciertos sitios, o usa por ejemplo el sistema de búsquedas actual lanzando una búsqueda como "Michael Jackson muere en Bogotá" si esta consulta arroja menos de cierta cantidad de resultados entonces la considera como una relación falsa.
Una pregunta con la partícula "Dónde" es fácil de responder, el sistema busca un lugar, pero ¿que pasa con preguntas con las palabras: "Cómo" o "Porqué"?. Estas preguntas requieren un razonamiento más avanzado, y no creo que tengamos pronto un sistema que pueda resolverlas.
Finalmente
El tema de lenguaje natural es algo filosófico al momento lo que sí es seguro es que compañías como Google y Apple le apuesten fuertemente a iniciativas en esta dirección. En mi opinión el siguiente gran salto en interfaces de usuario va relacionado con poder entender los lenguajes naturales y poder generar frases en estos lenguajes haciendo que estas frases suenen lo menos robóticas posibles. (alguien ha escuchado a Hatsune Miku♥ ? )
Este es un artículo divertido con varias preguntas que le hacen al sistema "70 things to try with Google's Android 4.1 Voice Search"
Espero este post les de una idea de cómo funcionan ciertos servicios, los cuales probablemente se van a volver muy sofisticados en los próximos años.
@dav009
¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.
Por Paola el 16 de Noviembre de 2012
Por tufik2 el 18 de Noviembre de 2012
Por burngeek el 18 de Noviembre de 2012
Por dav009 el 19 de Noviembre de 2012
Por Arwen_123 el 21 de Noviembre de 2012
Por cullersite el 22 de Noviembre de 2012