Beruflich Dokumente
Kultur Dokumente
La Arquitectura 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.
Aunque hay muchas herramientas que hacen que un sistema "aprenda", hay una
bastante sencilla que nos resulta muy útil. Los sistemas antispammuchas 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
Mg. Jose Calvay / 2018
nombre indica, lo que hace es clasificar. Obviedades aparte, lo podemos usar para
clasificar un correo electrónico como spam o como "no 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 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.
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.
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?
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?
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.
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,
Mg. Jose Calvay / 2018
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á.
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".
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.
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
Mg. Jose Calvay / 2018
hecha y no queremos decir que la planta que teníamos en una maceta se haya
convertido en un huracán o algo así.
https://goo.gl/T8Ho3M
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.
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
Mg. Jose Calvay / 2018
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.
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.
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.
Mg. Jose Calvay / 2018
La Arquitectura Automática
Diseño algorítmico
No, no estoy hablando del diseño de algoritmos, que es toda una rama de las
ciencias de la computación, sino de la aplicación de algoritmos en el proceso
creativo del diseño gráfico. Un ejemplo claro de esto es el logotipo del MIT Media
Lab, que puede recrearse de forma única para cada persona como se muestra en
el vídeo:
https://vimeo.com/20250134
Arquitectura algorítmica
puede verse como una extensión especial, incluso más compleja, del
diseño algorítmico
https://goo.gl/hGVXTV
Algunos Trabajos
ARTIFICIAL SYMBIONT
https://vimeo.com/13296635