Estos son los tipos de algoritmos clave en la búsqueda de la inteligencia artificial

Estos son los tipos de algoritmos clave en la búsqueda de la inteligencia artificial

13 comentarios Facebook Twitter Flipboard E-mail
Estos son los tipos de algoritmos clave en la búsqueda de la inteligencia artificial

La inteligencia artificial o, para abreviar, IA, es uno de los grandes objetivos de la informática desde hace muchos años. La cuestión es, ¿qué hay detrás de todos esos intentos para acercarse a la creación de una inteligencia que parezca humana? ¿Cómo podemos conseguir que un ordenador nos entienda, o que reconozca nuestra cara, o que razone?

Hoy en Xataka vamos a ver ese aspecto de la inteligencia artificial, la técnica y los algoritmos detrás del asistente virtual que te responde cuando le preguntas una cosa, del móvil que reconoce tu cara o del coche que sabe cómo reaccionar en una situación complicada.

Aunque definir exactamente qué es la inteligencia es bastante complicado, en la práctica sí que podemos decir qué queremos de un sistema que sea "inteligente". Queremos que sea capaz de reconocer patrones (imágenes o sonidos) para que pueda recibir información del mundo exterior. Queremos que sea capaz de aprender filtrando la información útil y guardando sus nuevos descubrimientos. Y por último, queremos que también razone y sea capaz de razonar y deducir - en otras palabras, que sea capaz de crear conocimiento.

¿Cómo aprende un sistema?

Spam Los sistemas de aprendizaje automático sirven hasta para algo tan mundano y común como es el spam en el correo electrónico.

Podemos decir que la parte más importante de una inteligencia artificial es la capacidad de aprender, de cambiar su comportamiento en base a nueva información. Es, en cierto sentido, la parte más _espectacular_ de todo esto: ver cómo a medida que se entrena un sistema mejora y acaba siendo capaz de hacer cosas para las que no se le había programado explícitamente.

Aunque hay muchas herramientas que hacen que un sistema "aprenda", hay una bastante sencilla que nos resulta muy útil. Los sistemas _antispam_ muchas veces usan lo que se llama un clasificador bayesiano ingenuo. Este algoritmo es la aplicación de un teorema probabilístico, el Teorema de Bayes, que para los propósitos de este artículo no nos interesa demasiado. Este clasificador, como su nombre indica, lo que hace es clasificar. Obviedades aparte, lo podemos usar para clasificar un correo electrónico como spam o como "no spam".

¿Y cómo lo hace? Usando un enfoque bastante intuitivo. Del correo extraemos varios datos, como por ejemplo cuántas veces aparece cada palabra. Entonces, miramos cuánto valen esos datos en otros correos que hayamos marcado como spam. Si en todos ellos aparece siempre la palabra _"Viagra"_ y en el que estamos analizando también aparece, entonces es más probable que el correo sea spam. Fácil y sencillo. Para mejorar el algoritmo, se tiene en cuenta también cual es la probabilidad de que un correo aleatorio sea spam: si el 99% de los mensajes que recibimos lo son, entonces es muy probable que el que estemos analizando lo sea aunque no tenga muchas palabras "sospechosas". Por el contrario, si apenas recibimos spam, necesitaremos evidencias más fuertes para clasificarlo como spam.

Pero lo interesante del clasificador es cómo aprende. Cada vez que pulsas el botón "esto es spam" o "esto no es spam" se actualizan esos valores para mejorar la clasificación. Con cada indicación que le das sobre la naturaleza de un correo, va aprendiendo mejor a distinguir unos de otros.

La cuestión es que, aunque esto parezca muy sencillo, en el fondo nos dice cómo aprenden muchos de los sistemas de inteligencia artificial, principalmente los de clasificación. Se le pasan unos datos y su clasificación esperada, y se ajustan los valores del sistema para que "absorba" ese conocimiento y pueda aplicarlo a nuevas entradas. Las redes neuronales, que últimamente están dando resultados muy interesantes, aplican esa misma idea: van ajustando poco a poco los pesos de sus "neuronas" hasta que sale lo que se espera.

El aprendizaje automático imita nuestro comportamiento, aunque sin las limitaciones de la imaginación y la intuición

Aunque este enfoque pueda parecer simple, es en realidad muy potente. En el fondo, no es más que imitar nuestro proceso de aprendizaje, pero sin las limitaciones de nuestra imaginación, prejuicios e intuición. Así, los sistemas de aprendizaje automático son capaces de extraer las características más importantes y sintetizar la información que reciben. Como ejemplo, sólo hay que ver los grandes avances que se han logrado en reconocimiento de voz con redes neuronales profundas. Estos sistemas pueden ser entrenados: se les alimenta con "pedazos" de audio y su transcripción para que aprendan cómo funciona el habla. Así extraen reglas que, aunque probablemente incomprensibles y extrañas para nosotros, sirven para identificar palabras mucho mejor que otros modelos inspirados en supuestos de cómo funciona nuestro lenguaje y nuestra voz.

Redes neuronales

Por desgracia, no todo es perfecto, y el aprendizaje automático no es siempre tan directo como "pasar unos datos, que aprenda y ya". Es, de hecho, más arte que ciencia. El principal problema que uno se puede encontrar es el del sobreajuste: un sistema que funciona perfectamente con los datos de ejemplo pero que funciona terriblemente mal con otros datos. Por ejemplo, nuestro clasificador antispam podría tener un problema para funcionar en el mundo real si lo entrenamos con los correos de un comercial de Viagra. Otros casos son todavía más curiosos, como por ejemplo las redes neuronales que clasifican imágenes abstractas como si fueran un bikini o un mando de televisión.

El otro problema es ver qué tipo de clasificador usar. Resulta que no hay ningún "clasificador supremo". Las redes neuronales son bastante relevantes por los resultados que consiguen, pero no son las únicas ni los mejores algoritmos para ciertos problemas. Por ejemplo, para identificar la estructura de las proteínas, las máquinas de vectores de soporte (SVM) dan mejores resultados que las redes neuronales. Y para la clasificación de spam los métodos bayesianos y de aprendizaje estadístico consiguen muy buenos resultados con una implementación muy sencilla.

Creando conocimiento nuevo: deducción y razonamiento

Aprender está muy bien, pero no podemos dejar de lado algo muy interesante: razonar y hacer deducciones para añadir más conocimientos al sistema. La primera opción es usar la lógica. Hay hasta varios lenguajes de programación dedicados a ello. El más conocido es Prolog, con un paradigma muy distinto al de lenguajes más habituales.

La idea es que en lugar de darle instrucciones de cómo hacer algo, simplemente le damos algunas reglas lógicas y hechos y el sistema deduce las soluciones. Por ejemplo, se puede resolver el problema del granjero, el lobo, la cabra y la col que cruzan el río sin decirle cómo. Simplemente se escriben las reglas del acertijo formalmente: tienes que decirle a Prolog qué significa eso de "cruzar el río" y qué estados no están permitidos (es decir, tienes que decirle que el lobo no puede estar con la cabra, ni la cabra con la col). Después, le explicas qué es lo que quieres: una lista de movimientos que lleven a todos de un lado del río a otro. Por último, le preguntas si existe alguna serie de movimientos que resuelvan ese acertijo y, por arte de magia, te responde.

No es, por supuesto, magia. Prolog usa las reglas de la lógica para razonar (todo sea dicho, bastante más rápido que tú y que yo) y ver cuál es la solución. De esta forma, evitas tener que decirle cómo resolver la pregunta. Puede parecer un ahorro trivial, pero no lo es cuando tienes montones de hechos, reglas y preguntas posibles: un sistema lógico puede enfrentarse a preguntas que su creador ni siquiera habría imaginado.

Sin embargo, aquí nos encontramos con varios problemas. El primero es fácil de ver: hay que tener el conocimiento base. No nos sirve de nada razonar si no tenemos nada sobre qué hacerlo. Hay que crear esa base, y puede no ser fácil. Por un lado, es complicado enumerar todas las reglas y relaciones de un campo en concreto. Por otro, puede ser difícil escribirlo formalmente y ordenarlo para que un ordenador lo entienda. Pensadlo: ¿seríais capaces de expresar sin lugar a dudas todo lo que sabéis?

Hay otro problema adicional, y es que el mundo real (especialmente el mundo que percibimos y del que hablamos los humanos) no se adapta del todo bien a algo tan estricto como la lógica. No hace falta decir que los humanos somos de todo menos lógicos, y que no todo es verdadero o falso.

Para lo primero hay poco que hacer, pero lo segundo sí tiene solución: la lógica difusa. Pongamos que somos parte de un equipo para desarrollar un asistente de voz estilo Siri, Cortana o Google Now, y nos dicen que tenemos que lograr que el asistente responda al usuario cuando pregunte si tiene que ponerse un abrigo para salir a la calle y/o llevar paraguas.

Parece fácil: si hace frío lleva abrigo, y si llueve lleva paraguas. Ahora bien, ¿qué temperatura es exactamente "hace frío"? ¿Y vamos a hacer llevar al pobre usuario un paraguas si están cayendo cuatro gotas, cuando podría llevar sólo el abrigo? Pero, ¿como sabemos si caen cuatro gotas o llueve a cántaros? ¿Hacemos que el usuario saque el móvil por la ventana a ver qué pasa?

Fuzzylogic En la práctica, no hay una temperatura en la que de repente deja de hacer calor y se está templado. La lógica difusa nos permite trabajar con estos conceptos imprecisos, como "hace frío".

La lógica difusa permite trabajar con conceptos imprecisos como "mucho frío" o "llueve poco"

Para solucionarlo, en lugar de complicarnos tratando de definir esos conceptos imprecisos que a los humanos se nos dan también, lo que hacemos es aceptarlos en nuestro sistema y trabajar con ellos. Usando lógica difusa, escribiremos reglas del estilo _"si hace calor, no lleves abrigo"_, _"si llueve poco, lleva abrigo"_ o _"si llueve mucho, lleva paraguas"_. Por debajo, esos predicados no se transforman en "sí o no", sino que se le asignan grados en un rango entre 0 y 1 (o 0-100%, por comodidad). Por ejemplo, a la pregunta de "hace calor" nuestro sistema de lógica difusa no respondería "sí", sino algo como "50%". Igualmente, la acción no sería o llevar o no llevar abrigo, sino llevarlo con un cierto grado intermedio (por supuesto, luego transformaríamos eso en acciones concretas para evitar decirle al usuario "lleva un 80% de abrigo y un 20% de paraguas").

Aunque podáis pensar que os estoy tomando el pelo, en realidad esto es muy útil porque refleja bien nuestro razonamiento humano. Por ejemplo, si está lloviendo un poco más que cuatro gotas pero hace mucho calor, nuestro asistente nos diría que no llevemos nada: como hace mucho calor, la opción "llevar abrigo" pierde puntos, por así decirlo, y a pesar de que llueva algo la recomendación sería no llevar abrigo.

Rotk La lógica difusa sirve hasta para simular de manera realista el comportamiento de grandes grupos de gente, como en esta escena de El Señor de los Anillos.

Precisamente por parecerse más a nuestro pensamiento, la lógica difusa ha tenido bastantes usos. Uno muy famoso es el de control de ciertos trenes de metro en Japón, más eficiente y suave que los conductores humanos. También ha servido para darle algo más de vida a películas tan famosas como la trilogía de El Señor de los Anillos, creando enormes grupos de personajes animados en 3D que se mueven y responden de forma realista en función de lo que tienen a su alrededor.

Cuando el ordenador habla tu idioma: procesamiento de lenguaje

Siri

Todavía nos falta una parte de los sistemas inteligentes: la comunicación natural. Es quizás la parte más llamativa, la que permite que un ordenador se comunique con nosotros y nosotros con él, sin tener que aprender lenguajes de programación ni miles de comandos con poco sentido. Este es el área de la IA llamada procesamiento de lenguaje natural.

La primera parte es que el ordenador sea capaz de entender una frase natural. Hay varias posibilidades para lograrlo. Una de ellas, la más simple, es buscar coincidencias en una base de datos de acciones predefinidas. En otras palabras, que cuando a tu programa de control por voz le dices "Reproducir la lista de rock", lo que hará será detectar la palabra "reproducir", la palabra "lista" y "rock" y, usando instrucciones que los programadores han incluido explícitamente, buscara en tu música una lista que sea "rock" y lo reproducirá.

La cuestión es que ese enfoque es limitado. No podemos decir que un sistema es inteligente si lo único que hemos hecho ha sido preprogramarle las respuestas explícitamente. Queremos que un sistema nos entienda incluso las frases que "oye" o "lee" por primera vez.

Para resolver este problema, una de las técnicas más interesantes que se usa consiste en usar algo que deberíais recordar del instituto: análisis sintáctico. Conociendo la estructura del lenguaje, la gramática, un ordenador puede convertir una frase como "¿Cuál es la sede del ministerio que se encarga de la agricultura en España?" en una consulta que le haga buscar, entre los ministerios de España, el que entre sus responsibilidades tiene "agricultura" y que de él saque la propiedad "sede".

¿Recordáis el análisis sintáctico del instituto? Eso mismo se puede usar para que un ordenador "entienda" lo que le quieres decir

El sistema necesitará también el significado de las palabras. El análisis sintáctico le puede decir que el "ministerio" está en "España", pero necesitaría saber que "España" es un país para poder entender qué significa exactamente eso de "estar en España".

Algo así es lo que hacía el sistema SHRDLU, creado en 1971. Usando la gramática del inglés, el sistema era capaz de entender las preguntas y órdenes que se le daban sobre un mundo virtual con varios objetos, como cubos y pirámides.

Cubos Este es el mundo virtual de SHRDLU, que entiende el lenguaje natural. Así, es capaz de mover objetos o apilarlos unos sobre otros en base a lo que le pidas, o responderte preguntas como "¿Dónde está el cubo verde?".

Es una tarea compleja, como podéis imaginar. Hay que tener bien organizadas y clasificadas las palabras y todos sus posibles significados (lo que se llama el léxico). Hay que tener en cuenta las ambigüedades y lo que se da por supuesto en el lenguaje, y también el contexto. Por ejemplo, ¿qué haría un ordenador con la frase "La primera planta de la casa está hecha un desastre"? Podemos estar hablando de una planta vegetal o del primer piso, eso depende del contexto. Además, el ordenador debería saber que "estar hecho un desastre" es una frase hecha y no queremos decir que la planta que teníamos en una maceta se haya convertido en un huracán o algo así.

Para saltarnos estos problemas, muchas veces se usan técnicas que no requieren tanto "entendimiento" del lenguaje. Identificación de palabras claves o nombres, resúmenes, clasificación de frases o análisis de sentimientos son algunas de las tácticas que se usan para que un ordenador "entienda" lo que un humano le está queriendo decir.

Un ejemplo es el sistema IBM Watson, capaz de jugar y ganar a humanos en un concurso llamado Jeopardy! que consiste en responder a preguntas tipo trivia sobre varios temas lo más rápido posible. Para ello, Watson usa varias técnicas para entender la pregunta y otras tantas para buscar la respuesta en su base de datos. Si varias técnicas proporcionan la misma respuesta, el sistema la da por buena. Es un enfoque pragmático: como es difícil simular la mente humana, es mejor usar varias técnicas distintas que, aunque no sean "inteligentes" y no entiendan realmente lo que se pregunta, sí sean capaces de dar respuestas y no sean tan complejas de programar.

La otra parte del procesamiento del lenguaje es recorrer el camino en sentido contrario: generar un texto natural que represente el conocimiento que quiere transmitir el sistema. Igualmente, aquí hay varios enfoques: desde el uso de plantillas predefinidas (por ejemplo, un asistente de voz cuando le preguntas qué tiempo va a hacer responde _"Hoy/mañana/el día X va llover/hacer sol/nevar/diluviar"_) hasta sistemas que, de nuevo, "entienden" la gramática y traducen su representación formal a una estructura sintáctica y después buscan en el léxico las palabras que necesitan para crear la frase.

Juntando los bloques y creando "inteligencia"

650 1200

A lo largo de este artículo hemos ido comentando algunas técnicas (no todas, y por supuesto no con completa precisión) para lograr ciertos aspectos de un sistema "inteligente". Lo que falta es unirlos para crear sistemas completos.

Por ejemplo, ¿cómo funcionan los asistentes de voz como Cortana, Siri o Google Now? Por un lado tienen que pasar tu voz a un texto, y después entender ese texto y hacer una acción. Para lo primero, usan redes neuronales (Apple está en proceso de hacerlo con Siri) bastante complejas, que entrenan con muchísimos sonidos para que traduzcan voz a texto de forma eficiente. De hecho, envían algunos comandos que tú le dictas a teléfonos a humanos que los interpretan y se lo pasan de vuelta a la red neuronal para mejorarla todavía más.

La otra parte de este tipo de asistentes es el procesamiento del lenguaje, usando las técnicas que veíamos para tratar de "entender" qué es lo que quieres. Ahora bien, de lo que no son capaces es de mantener una conversación y razonar. Eso es un nivel más alto, que requiere las técnicas lógicas de deducción.

El sistema SHRDLU que comentábamos antes sí llegaba a ese nivel. Una vez que la parte de procesado de lenguaje traducía las frases en representaciones formales, añadía los nuevos hechos a su base de conocimiento y era capaz de "aprender" que, por ejemplo, no puedes poner un cubo encima de una pirámide. En base a esos hechos y propiedades, SHRDLU era capaz de responderte a preguntas como "¿Qué puedo poner encima de un cubo?" usando su base de conocimientos y la lógica para hacer deducciones.

Coche Autónomo

El coche autónomo, que ahora está muy de moda, también puede usar la inteligencia artificial para funcionar. Por un lado, puede tener sistemas de aprendizaje automático para detectar coches y peatones basándose en la información de sensores y cámaras: así, no hay que programar directamente los patrones para ver que esos píxeles en la imagen son un peatón, sino decirle al sistema en qué imágenes hay peatones y dónde están colocados para que "aprenda" a detectarlos. Además, pueden usar lógica difusa para controlar la navegación y la conducción de forma suave, similar a como conduciría una persona.

Por supuesto, aquí no está todo lo que existe o hace falta para crear "inteligencia", pero sí que hemos logrado ver, a grandes rasgos, qué es lo que se está haciendo para avanzar en ese camino hacia la imitación de la inteligencia humana.

Imagen | arnold | inuyaki

Comentarios cerrados
Inicio