Inquietudes…

Miércoles, 16 mayo, 2007

¿Inteligencia Artificial con Google?

Filed under: essentials,informáticas — Manuel @ 21:46

magnetic-words.jpgImagínate un programa capaz de ordenar una serie de palabras en una frase con sentido. Por ejemplo; tú le introduces: “ti, pensando, en, estoy” y él es capaz de ordenarlas y decirte: “estoy pensando en ti”.

Llevo varios días aprendiendo a programar en Java, .NET y a utilizar API‘s para intentar hacer precisamente esto. Y podréis pensar que parece un programa complicado, pero en realidad es tan sencillo que el algoritmo lo puedo esbozar en un breve párrafo:

El algoritmo cogería la serie de palabras y haría una búsqueda en Google para todas las combinaciones posibles (en nuestro ejemplo: “ti pensando en estoy”, “pensando en estoy ti”, etc). Si son 4 palabras, haría 4! búsquedas, es decir, 24 búsquedas. A cada combinación le asignaría el número de resultados que se obtuvieran en cada búsqueda en Google, y la combinación con más resultados es la que con mayor frecuencia se da en Google (y por tanto en Internet) y en la mayoría de los casos, tendrá sentido.

Por ejemplo; cojamos las palabras: “lo, siempre, dices, mismo”. Si buscamos todas las combinaciones en Google, obtenemos los siguientes resultados:

  • “siempre dices lo mismo”: 3950
  • “dices siempre lo mismo”: 1070
  • “mismo lo dices siempre”: 6 (en el contexto: “tú mismo lo dices siempre”)
  • “dices lo mismo siempre”: 4
  • “lo mismo dices siempre”: 3

Las demás 19 combinaciones tienen 1 ó 0 resultados.

Vemos que todas las opciones que da un número de resultados significativo (exceptuando la 3ª por sí misma) es una frase con sentido, mientras que las otras 19 no (ej: “mismo siempre dices lo”, “dices lo siempre mismo”, etc). Es decir, el mismo Google, con su inmensa y creciente base de datos, junto con un sencillo algoritmo, es capaz de ordenar una serie de palabras dando una frase inteligible. Casi como si fuera inteligente… (aunque en el fondo lo que tiene es mucha “memoria”)

Haciendo el mismo experimento con otras series de palabras ocurre algo similar. No obstante, si las palabras son menos usuales Google no da tan buenos resultados, si bien cabe esperar que en un futuro no muy lejano sí los dé, a medida que alimentemos Internet con páginas webs (muchas procedentes ya de la blogosfera).

Te preguntarás: ¿y dónde está el programa que hace esto? La respuesta es que, pese a su simplicidad, no he encontrado la manera eficiente de hacerlo, pues no es posible usar la API de Google para hacer una función que dé el número de resultados de una determinada búsqueda de Google, lo cual es básico para un programa así. Una verdadera lástima…

No obstante, no me doy por vencido. Y si algún ávido conocedor de la materia me echa una mano al respecto, estaré encantado de recibir su ayuda.

Fuente de inspiración: Una Teoría Matemática de la Información.

11 comentarios »

  1. Me encanta la idea. ¿Cómo haces para buscarlas?¿simplemente metes las palabras en el buscador? Explícame eso porfavor.

    Un abrazo.

    Comentario por elblogdedani — Jueves, 17 mayo, 2007 @ 21:12 | Responder

  2. Una idea brillante!
    Pero me imagino que con muchas palabras, el tiempo para encontrar resultados satisfactorios sería enorme! Supongamos 20 palabras…10 palabras, para no ser tan groseros.
    En su misma sencillez creo que está el mayor problema. 10! da más de 3.5 millones! Esas son bastantes búsquedas🙂

    Comentario por Pancho — Viernes, 18 mayo, 2007 @ 0:25 | Responder

  3. Dani: metes las palabras entre comillas en el Google; y así el orden de las palabras sí importa.

    Pancho: ¡Gracias! Es correcto lo que dices, el crecimiento es n!, que es muy rápido. Haciendo varias búsquedas de palabras estoy viendo que Google me tarda ~0.09 seg. Para 10 palabras (~3.6 millones de búsquedas) estamos hablando de ~91 horas. Es mucho, pero estoy seguro que esto es optimizable (por ejemplo, si el programa se implantara en el mismo servidor de Google, con lo que te ahorrarías todo el tiempo de transmisión…)

    Comentario por Manuel — Viernes, 18 mayo, 2007 @ 9:26 | Responder

  4. Hola Manuel,

    La idea de sistematizar un google voting parece muy buena. Nunca se me ocurrio ponerme con las APIs de Google (con la de flickr tuve la tentacion) pero supongo que debe requerir su trabajo. Se me ocurre una chapuza que puede funcionar. No se exactamente si quieres hacer un programa que corra en tu ordenador o en una página web (esto último también sería interesante, no?). El caso es que puedes llamar directamente la url de Google con la pregunta:

    http://www.google.es/search?q=“lo, siempre, dices, mismo”

    Y emplear expresiones regulares para extraer el número de resultados del chorizo de texto resultante. El programa ocuparía solo unas lineas con PHP (fopen para leer URL) y debería ser relativamente rápido. Si prefieres un programa que corra en tierra el mísmo método es perfectamente aplicable también.

    Una cosa que se me ocurre es que si empleas muchas llamadas automatizadas Google puede bloquearte. Pueden confundirte con ataque de denegación de servicio (DoS)😉.

    Comentario por Ergodic — Sábado, 19 mayo, 2007 @ 12:30 | Responder

  5. Hola,

    en realidad eso ya se hace pero sin usar google. Un programa “lee” todo un corpus de textos escritos en un idioma y aprende los porcentajes de repetición de, por ejemplo, tríos de palabras (los hay de más pero requieren mucha mas memoria). Luego para construir una frase se basan en la ordenación mas probable dados todos los grupos de 3 que se pueden formar. Lo usan, por ejemplo, programas de traducción automática para generar la frase traducida en el idioma objetivo.

    saludos
    emili

    Comentario por emili — Sábado, 19 mayo, 2007 @ 20:37 | Responder

  6. Asi es emili, tambien se emplea un sistema similar en los filtros antispam para modelizar el contexto de los mails. Intuyo que la idea de Manuel es aprovechar que google ha hecho ya eso con toda la red y por tanto el conocimiento que se puede extraer de él es “universal”.

    Comentario por Ergodic — Domingo, 20 mayo, 2007 @ 14:46 | Responder

  7. Ergodic: ¡¡Muchas gracias!! Me pondré con PHP y Regular Expressions y a ver si consigo hacerlo. Te mantendré informado de mis avances.

    Emili: En el artículo de Shannon que cito (sección 3) se habla de algo muy similar: la construcción de frases mediante la probabilidad de transición de pares de palabras. Es de interés ver cómo con un método tan sencillo se construyen frases “casi” con sentido.

    Son, precisamente, procesos markovianos ergódicos🙂

    Comentario por Manuel — Lunes, 21 mayo, 2007 @ 21:50 | Responder

  8. Pues si, es un buena idea. mantennos informados de tus avances con la API de google, porque la cosa puede dar mucho de si. De hecho tengo alguna idea “secreta” en la misma linea🙂

    Comentario por kikollan — Jueves, 7 junio, 2007 @ 22:13 | Responder

  9. Hola. Una solución: http://www.phpclasses.org/browse/package/3924.html

    Comentario por Josep — Miércoles, 13 junio, 2007 @ 12:48 | Responder

  10. Josep, suena muy interesante. ¡Gracias!

    Espero tener algo de tiempo pronto y hacerlo. Por supuesto, el resultado lo pondré en el blog.

    Manuel

    Comentario por Manuel — Miércoles, 13 junio, 2007 @ 18:01 | Responder

  11. Pues la verdad que no estarias siendo nada eficiente. Ademàs para poder utilizar el hardware existente y simutal la inteligencia humana hace falta saber programar, no saber lenguajes de programaciòn. Es por ello que empresas como microsoft, google y facebook contratan egresados en ciencias de la computaciòn para puestos de ingenieros de software (no es la carrera). Sin embargo muchos creemos que con saber java, C, python, delfi, pascal, etc; ya podremos programar.

    Para el ejemplo de ordenamiento de palabras, habrìa que crear algoritmos que nos permitan itendificar el orden de las palabras que les da el ser humano. un inicio podrìa ser basàndose en las reglas del lenguaje y el uso correcto de las oraciones. sujetos, vervos, predicados y sus demas componentes.

    Google quiere aprender primero el comportamiento del ser humano para luego empezar a crear IA. Si no porquè creen que google sigue sacando nuevos servicios gratis?

    Comentario por Gianpiere Salcedo — Domingo, 5 junio, 2011 @ 10:27 | Responder


RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: