lunes, 17 de julio de 2017

Usando el modelo de red neuronal de traducción de Google (GNMT)...¡para jugar al ajedrez!

Hace unos días, y para mi gran sorpresa, Google nos hizo el enorme regalo de hacer público el código fuente de su motor de traducción de lenguaje natural más moderno (GNMT): https://github.com/tensorflow/nmt

Así que decidí rápidamente hacer uso de esta maravilla, junto con las mejoras con la que la versión 1.2 de TensorFlow viene cargada, para programar las modificaciones necesarias para poder enfocar el modelo de Google a la traducción...¡de jugadas en el juego del ajedrez! Es decir; que el modelo (con modificaciones mínimas), en lugar de aprender a traducir por ejemplo de español a inglés, será capaz de inferir movimientos de ajedrez válidos (usando la notación algebraica) dado un estado de tablero cualquiera.

El resultado final lo podéis ver (y usar) en el siguiente repositorio de mi cuenta personal en GitHub: https://github.com/Zeta36/Using-Google-Neural-Machine-Translation-for-chess-movements-inference-TensorFlow-.

Pero lo realmente importante sin embargo, es sin duda el hecho de comprender la potencia que tiene el modelo de Google para ser generalizado a cualquier tarea de mapeo que pueda ser tratada y representada de la manera adecuada como para servir como pares de entrada source-target en el entrenamiento supervisado. En este sentido se puede decir que el mismo modelo neuronal que es capaz de traducir entre idiomas, es también capaz de aprender a inferir como realizar tareas que en principio parecen poco relacionadas con  la propia traducción de textos. 

Esto me hace pensar que en realidad con este hecho se está demostrando algo significativo pero ya a un nivel neuronal (humano). Es posible que resultados como el que se demuestran con este tipo de generalizaciones de aprendizaje (y memorización) bajo una misma estructura de red neuronal artificial, sean una pista del modo en que nuestro propio cerebro podría ser capaz de reutilizar una misma zona cerebral para realizar muy diversas tareas de procesamiento. En este sentido no es descabellado a la luz de lo observado que por ejemplo partes de nuestro cerebro que se utilicen para entender y traducir lenguaje natural, sea utilizado también para otras tareas de inferencias totalmente distintas de las lingüísticas (como aprender a jugar al ajedrez, o incluso comprender ciertas ideas matemáticas). Os dejo a continuación con un poco de más información técnica sobre el proyecto que he realizado:

Using (Google) Neural Machine Translation for chess movements inference

Somedays ago a free version of the source code of the GNMT (Google Neural Machine Translation) was release in: https://github.com/tensorflow/nmt by Thang Luong, Eugene Brevdo, Rui Zhao
 

Introduction

Sequence-to-sequence (seq2seq) models (Sutskever et al., 2014, Cho et al., 2014) have enjoyed great success in a variety of tasks such as machine translation, speech recognition, and text summarization.
I've used the release of this seq2seq to show the power of the model. Using a vocabulary with just de numbers and letters (the symbols) used for the chess algebraic notation, I was able to train a model to infer the movement a human would do given a table state.
The supervised learning uses then source-target pairs of the form:
Source: rnq1kb1r/pp11ppp1/11p11n11/1111111p/11111111/11111NPb/PPPP1P1P/RNBQR1KB b
Target: Bg4
The source is the state of the board, and the target the movement a human would do in this situation.
In this way the source vocabulary was:
w
/
1
p
r
n
b
q
k
P
R
N
B
Q
K
and the target vocabulary:
p
r
n
b
q
k
P
R
N
B
Q
K
x
+
O
-
1
2
3
4
5
6
7
8
a
c
d
e
f
g
h
=

Results

Using a NMT + GNMT attention (2 layers) the model was able to reach a good result with:
eval dev: perplexity 2.83 eval test: perplexity 3.07 global training step 72100 lr 0.868126 step-time 0.51s wps 9.57K ppl 2.76 bleu 20.64
This means that, given a board state whatever, the model can predict in a seq2seq way a valid (and usually human) chess movement.

miércoles, 12 de julio de 2017

La magnífica mejora en el sistema de traducción de Google (que ha pasado casi desapercibida)

"Alrededor de dos mil quinientos años atrás, un comerciante mesopotámico reunió arcilla, madera y juncos y cambió la humanidad para siempre. Con el tiempo, su ábaco permitiría a los comerciantes hacer un seguimiento de los bienes y reconciliar sus finanzas, permitiendo que la economía florezca.

Pero ese momento de inspiración también ilumina otra asombrosa habilidad humana: nuestra capacidad de recombinar conceptos existentes e imaginar algo completamente nuevo. El inventor desconocido habría tenido que pensar en el problema que querían resolver, el artefacto que podían construir y las materias primas que podían reunir para crearlo. La arcilla se podría moldear en una tableta, un palillo se podría utilizar para rasguñar las columnas y los juncos pueden actuar como contadores. Cada componente era familiar y distinto, pero juntos en esta nueva forma, formaron algo revolucionario.

Esta idea de "composicionalidad" está en el centro de las capacidades humanas como la creatividad, la imaginación y la comunicación basada en el lenguaje. Equipado con sólo un pequeño número de bloques de construcción conceptuales familiares, somos capaces de crear un gran número de nuevos sobre la marcha. Hacemos esto naturalmente colocando conceptos en jerarquías que van de específico a más general y luego recombinando diferentes partes de la jerarquía de maneras novedosas.

Pero lo que viene tan naturalmente a nosotros, sigue siendo un reto en la investigación de la IA.

En nuestro nuevo artículo , proponemos un nuevo enfoque teórico para abordar este problema. También se demuestra un nuevo componente de red neural denominado Symbol-Concept Association Network (SCAN), que puede, por primera vez, aprender una jerarquía de conceptos visuales conectados de manera que imita la visión humana y la adquisición de palabras, permitiéndole imaginar conceptos novedosos guiado por instrucciones de lenguaje.

Nuestro enfoque difiere de los trabajos previos en esta área, ya que está totalmente basado en los datos sensoriales y aprende de muy pocos pares de "imagen-palabra". Mientras que otros enfoques de aprendizaje profundo requieren miles de ejemplos de imágenes para aprender un concepto, SCAN aprende tanto las primitivas visuales como las abstracciones conceptuales principalmente de observaciones sin supervisión y con tan sólo cinco pares de una imagen y una etiqueta por concepto. Una vez entrenado, SCAN puede generar una lista diversa de conceptos que corresponden a una imagen en particular, e imaginar diversos ejemplos visuales que corresponden a un concepto particular, incluso si nunca ha experimentado el concepto antes.

Esta capacidad de aprender nuevos conceptos mediante la recombinación de los existentes a través de instrucciones simbólicas ha dado a los seres humanos capacidades asombrosas, lo que nos permite razonar sobre conceptos abstractos como el universo, el humanismo o - como fue el caso en Mesopotamia - economía. Mientras que nuestros algoritmos tienen un largo camino por recorrer antes de que puedan hacer tales saltos conceptuales, este trabajo demuestra un primer paso hacia tener algoritmos que pueden aprender de una manera en gran medida sin supervisión, y pensar en abstracciones conceptuales como las utilizadas por los seres humanos."

Este texto que acabo de pegar arriba es la asombrosa conclusión de un nuevo trabajo de Google DeepMind (publicado hoy). Se trata de una traducción parcial del siguiente artículo del blog oficial de la propia compañía de Google: https://deepmind.com/blog/imagine-creating-new-visual-concepts-recombining-familiar-ones/

Pero lo más destacado de todo esto no es quizás el trabajo comentado en sí mismo, sino el hecho de que el texto mostrado antes ha sido totalmente traducido de manera autónoma por el actual motor de IA de Google. No he necesitado hacer ni una sola modificación o corrección al texto devuelto, y si acaso lo que yo quizás pondría sería un "la" delante de donde dice "sobre conceptos abstractos como el universo, el humanismo o - como fue el caso en Mesopotamia - LA economía".

En fin, es evidente que rápidamente nos acostumbramos a lo bueno, y que pocos recuerdan ya las críticas hacia la traducción automática que hacíamos del traductor de Google hace apenas un año y pico. Pues bien, desde entonces Google ha mejorado MUCHO el sistema de traducción gracias a una innovación tecnológica que han denominado Neural Machine Translation:
https://research.googleblog.com/2016/09/a-neural-network-for-machine.html
https://research.googleblog.com/2016/11/zero-shot-translation-with-googles.html


El sistema aún no es perfecto (y su implantación tristemente casi ha pasado desapercibida en los medios de comunicación), pero si uno se fija y compara el tipo de traducciones automáticas de las que disponíamos hace apenas 5 años con las que tenemos hoy día, se puede ver claramente una mejora literalmente exponencial. Muy (muy) probablemente Google logrará una traducción con capacidades sobrehumanas en los próximos 5 años, amén de un sistema de reconocimiento de voz igualmente mejor que el del hombre medio. Vale unir a esto la síntesis autónoma de voz "end-to-end" de trabajos como los de WaveNet o Tacotron para poderse asegurar que en no más de un lustro dispondremos de aparatos (igual un simple móvil Android) capaces de oír (y transcribir el contenido de) una voz, detectar el lenguaje, traducir lo escuchado a otra lengua arbitraria, y dictar con una voz sintética indiferenciable de una humana dicho texto ya traducido. Esto de hecho ya hay dispositivos que "pueden" hacerlo, pero la cuestión es que en poco tiempo existirán proyectos capaces de realizar esta tarea siempre MEJOR (y más rápido) que cualquier persona.

Los traductores humanos serán posiblemente el primer gremio (mucho antes incluso que los taxistas y demás transportistas) en perder TODO su trabajo a manos de la automatización.

Un saludo, compañeros.