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.

Instalación de polyglot

Usamos la biblioteca polyglot de python, por lo cuál lo primero que vamos a hacer es instalarla.

$ git clone https://github.com/aboSamoor/polyglot
$ cd polyglot
$
python setup.py install

Ahora requeriremos modelos pre entrenados para el idioma que queremos estudiar.

$ Polyglot Downloader
---------------------------------------------------------------------------
d) Download l) List u) Update c) Config h) Help q) Quit
---------------------------------------------------------------------------

Presionando l nos va a salir una lista con todos los idiomas de los que se tiene modelos entrenados. En nuestro caso escogeremos espa~ol, que tiene el código LANG:es.

Al finalizar la lista, simplemente precionamos d e introducimos el código de lenguaje que vamos a usar.

A jugar!

Ahora que ya tenemos listos nuestros embeddings, es hora de jugar con ellos. Para cargarlos es facil:

from polyglot.mapping import Embedding

embeddings = Embedding.load("ruta/a/embeddings2/es/embeddings_pkl.tar.bz2")

Sólo será necesario adaptar la ruta donde se encuentre nuestro modelo. Ahora vamos a buscar palabras relacionadas con una palabra dada que ingresemos. Esto se puede realizar facilmente buscando en el vecinadio del embedding por otros vectores cercanos.

neighbors = embeddings.nearest_neighbors("gato")
print(neighbors)

Con lo cuál obtendremos palabras relacionas de una u otra forma a la palabra ingresada:

['oso', 'lobo', 'león', 'pato', 'dragón', 'pájaro', 'monstruo', 'conejo', 'cerdo', 'cocodrilo']

Ahora calculemos la distancia entre dos palabras. Para ellos podemos hacer lo sigueinte:

dist = embeddings.distances("perro", ["gato", "computadora"])
print("Distancia de perro a gato es", dist[0])
print("Distancai de perro a computadora es", dist[1])

Que nos dará la distancia euclidianda entre las dos palabras. Vemos que perro y gato son más cercanos que perro y computadora.

Distancia de perro a gato es [1.9079777]
Distancai de perro a computadora es [3.1684666]

Fin

Como hemos visto no es nada díficil usar word embeddings en nuestros programas. La gran ventaja es que este tipo de representación de las palabras nos permiten mejorar mucho los resultados de nuestros algoritmos, sin tener que modificarlos. Espero esto ha servido. Si tienen dudas, congusto pueden dejar un comentario abajo.

 

 

 

 

 

 

 

 

 

 

Share This