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 este 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, es también capaz de inferir movimientos de ajedrez válidos (usando la notación algebraica) dado un estado cualquiera de tablero.
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 de todo es sin duda el hecho de comprender la potencia que tiene el modelo de Google para poder ser generalizado a cualquier tarea de mapeo que pueda ser tratada y representada de manera adecuada y de modo que podamos generar pares de entrada (source-target) para 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 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 igualmente 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 además 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:
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 este 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, es también capaz de inferir movimientos de ajedrez válidos (usando la notación algebraica) dado un estado cualquiera de tablero.
Esto me hace pensar que 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 igualmente 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 además 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.
Animo Samu!!
ResponderEliminarGracias por el comentario, Jose Hervas :).
ResponderEliminarUn saludo.