En esta entrada vamos a dar una breve explicación de cómo podemos usar Word Embeddings en nuestros modelos, y sobre todo dar una breve introducción al tema. No nos trataremos de adentrar a la teoría de los mismos, pero si daremos referencia, por si gustan aprender más.

Image taken from Francesco Gadaleta article at Medium.

Sobre los Word Embeddings

Los Word Embeddings son funciones que nos permiten mapear palabras a un vector n-dimensional, partiendo del supuesto que palabras que se encuentran en un espacio semejante deben ten

er algún tipo de relación. Con ese supuesto, se ha creado modelos que intentan capturar la mayor cantidad de información posible del entorno en una palabra, llegando a poder contener incluso información semántica, y sintáctica. Existe una gran gama de algoritmos y propuestas que han mejorado el comportamiento de muchas tareas de Procesamiento de Lenguaje Natural, cómo es la identificación de nombres, identificación de idiomas, traducción automática, etc. En este caso daremos un caso práctico para poder usarlo de maner sencilla en nuestros programas.

Los tensores

Los tensores matrices multidimensionales que contienen elementos de un único tipo. Esto es importante para machine learning ya que usamos todos los cálculos en una red neuronal tendrán que hacerse con estas unidades. Básicamente podemos usar ocho tipo de tensores en CPUs o GPUs. Estos son según la documentación de PyTorch los siguientes:

Cómo construirlos

Para poder usarlos primero se deben de construir. Para ello se pueden crear partiendo de una lista de python o de un tipo de datos de NumPy. Es bastante sencillo, y se utiliza la funcion torch.tensor(). Para averiguar el tipo de un tensor, usamos el método tensor.type(). Para hacer esto más claro, veamos el siguente ejemplo:

import torch

lista = torch.tensor([[1,1],[1,1]])
print(lista)
print(lista.type())

lista = torch.tensor([[1.,1.],[1.,1.]])
print(lista)
print(lista.type())

lista = torch.tensor([[1.,1.],[1,1]])
print(lista)
print(lista.type())

Con la sigueinte salida:

tensor([[1, 1],
[1, 1]])
torch.LongTensor
tensor([[1., 1.],
[1., 1.]])
torch.FloatTensor
tensor([[1., 1.],
[1., 1.]])

Cuando intentamos separa datos en dos o más clases (por ejemplo separar hojas de árboles y hojas de pétalos) con un algoritmo de machine learning, entonces siempre es importante entender qué tipo de datos son los que tenemos. La idea básica de clasificar datos es encontrar una función g() tal qué pueda separar los datos en las regiones requeridas. Esto es bastante sencillo si lo hiciéramos con datos que se pueden separar por una línea (o con un hiperplano). Sin embargo, muchos de los datos en la realidad no se pueden separar de esta manera. Para ejemplificar datos que no son linealmente separables, utilizaremos una distribución de datos aleatorias llamada moons, o lunas, que tiene la ventaja de mostrar el problema en dos dimensiones. 

Para este estudio requeriremos:

  • sklearn
  • python3
  • numpy
  • matplotlib

Introducción a las RNN.

Es ampliamente conocido que las Redes Neuronales Recurrentes (Recurrent Neural Networks RNN) son la mejor elección a la hora de procesar datos secuenciales. ¿Qué tipo de datos son secuenciales? Podemos considerar para este caso texto, voz, DNA, moléculas, lineas de tiempo, etc. Como vemos este tipo de redes son muy útiles. Dos tareas comunes para trabajar con estos datos son: segmentar los datos de entrada y asignar anotación a los datos. Cada una de estas tareas se suele realizar mediante una red neuronal distinga. En la siguiente imagen vemos cómo por cada entrada xt se obtiene una salida yt donde xtX  y ytY.  

Bidirectional RNN. Fuente

Cada estado hes una unidad RNN, donde las más comunes son LSTMs o GRUs. Para capturar la mayor cantidad de contexto se suele usar dos capas de RNN. Una que lee la secuencia desde el inicio hasta el final (de x0 hasta xn, donde n es el tamaño de la secuencia) y otro desde el final hasta el inicio. Los estados de las dos RNN se concatenan y se calcula la probailidad de salida mediante una función de activación, que en la mayoría de los casos es una función tangente hiperbólica tanh. Evidentemente, el error de estas redes es calculado por una función de error y son corregidas por algún algoritmo de optimización, cómo puede ser el Algoritmo de la Gradiente Descendiente. 

En recientes años se ha podido observar un decremento en la capacidad de predicción por parte de las encuestas tradicionales. Esto se debe a que en parte las personas han establecido nuevas relaciones por las redes sociales y también se han visto infuenciados por estas. Sin embargo, medir las redes sociales en la tendencia electoral no es una tarea fácil. En el caso de las elecciones para presidente de México del año 2018, hemos entrenado de NLP (Procesamiento de Lenguaje Natural), para clasificar los sentimientos que expresan las personas al momento de opinar sobre los principales candidatos, e las redes sociales, en concreto usamos Twitter. Los datos son analizados y reportados directo a nuestro portal en www.stat.eenube.com para su acceso en tiempo real. Las actualizaciónes que se realizan son cada 15 minutos, para tener un márgen suficiente de tweets para estalecer tendencias. Iniciamos con las mediciones desde el 9 de enero de 2018 y seguirá corriendo hasta el final del proceso electoral y continuará si es que existiese algún conflicto post electoral. 

Cómo se muestra en la imágen anterior, es posible realcionar eventos concretos, o declaraciones directo sobre la opinión de las personas. Esto se expersará en un cambio de tendencia. Conforme se colecten más datos se podrá analizar también la tendencia general de las opiniones de los usuarios por días y presentar análsis cuantitativos sobre los candidatos. Todo esto lo publicaremos en esta página. Para resumir:

  • Sentimientos respecto a los candidatos expresado por usuarios en twitter.

  • Uso de algoritmos Deep Learning del estado del arte.

  • Actualizaciones en tiempo real.

 

Para ver el estudio en tiempo real, se puede encontrar en el siguiente link:

www.stat.eenube.com

  

 

Por otro lado, su ustedes gustan de saber el mecanismo con el cuál se hacen las predicciones, a continuación se explicará. Se utiliza un Red Neuronal Recurrente (RNN) con un modelo encoder decoder. Para mejorar la clasificación se incluye además un mecanismo de atención. Las neuronas utilizadas son GRU y el algoritmo de optimización es un adam. El corpus con el cuál se entrenó fue recolectado y anotado por el quipo de eenube. Si tienen más preguntas acerca de la metodología utilizada con gusto pueden escribir a la página o preguntarnos en redes sociales. Esperamos esta herramienta sea útil en su seguimiento de las elecciones del presente año. 

 

Share This