NLP and TM Módulo 4

Taller 1: word2vec

Nombres:

Obtenga el archivo del modelo word2vec entrenado con WikiNews en Español: eswikinews.bin


In [6]:
# import word2vec model from gensim
from gensim.models.word2vec import Word2Vec
# load pre-trained model
model = Word2Vec.load_word2vec_format('eswikinews.bin', binary=True)

1. Comparando composicionalidad y analogía.

Composicionalidad y analogía son dos mecanismos diferentes que se pueden usar con representaciones distribuidas. La idea es usar independientemente composicionalidad y analogía para resolver el mismo problema. El problema a resolver es encontrar el presidente de un país dado.

Primero usaremos composicionalidad. La función siguiente debe recibir el nombre de un país y retornar una lista de palabras que posiblemente corresponden a presidentes.

Por ejemplo, si la función se invoca con 'ecuador' como argumento:

>>> presidents_comp('ecuador')
[u'jamil_mahuad',
 u'presidencia',
 u'jose_maria_velasco_ibarra',
 u'republica',
 u'rafael_correa',
 u'gustavo_noboa',
 u'lucio_gutierrez',
 u'abdala_bucaram',
 u'vicepresidente',
 u'gabriel_garcia_moreno']

In [1]:
def presidents_comp(country):
    ### Su código debe ir aquí
    return []

for country in ['colombia', 'venezuela', 'ecuador', 'brasil', 'argentina', 'chile']:
    print country
    for president in presidents_comp(country):
        print ' ', president


colombia
venezuela
ecuador
brasil
argentina
chile

El siguiente paso es usar analogías para encontrar el presidente de un país dado.


In [2]:
def presidents_analogy(country):
    ### Su código debe ir aquí
    return []

for country in ['colombia', 'venezuela', 'ecuador', 'brasil', 'argentina', 'chile']:
    print country
    for president in presidents_analogy(country):
        print ' ', president


colombia
venezuela
ecuador
brasil
argentina
chile

¿Cual versión funciona mejor? Explique claramente. ¿Por qué cree que este es le caso?

3. Escriba una función que calcule el antónimo de una palabra


In [3]:
def antonimo(palabra):
    ### Su código debe ir aquí
    return '-'

for palabra in ['blanco', 'menor', 'rapido', 'arriba']:
    print palabra, antonimo(palabra)


blanco -
menor -
rapido -
arriba -

Busque más ejemplos en los que funcione y otros en los que no funcione. Explique.

4. Una de estas cosas no es como las otras...

Gensim provee la función doesnt_match, la cual permite encontrar, dentro de una lista de palabras, una palabra que está fuera de lugar. Por ejemplo:


In [26]:
model.doesnt_match("azul rojo abajo verde".split())


Out[26]:
'abajo'

La idea es implementar la misma funcionalidad por nuestra cuenta. La condición es que solo podemos usar la función similarity de Gensim la cual calcula la similitud de dos palabras:


In [28]:
print model.similarity('azul', 'rojo')
print model.similarity('azul', 'abajo')


0.872345939774
0.263285541342

In [5]:
import numpy as np
def no_es_como_las_otras(lista):
    ### Su código debe ir aquí
    return '-'

print no_es_como_las_otras("azul rojo abajo verde".split())


-

Nota: no olvide incluir los nombres de los integrantes del grupo (máximo 2) en el encabezado del notebook. Remita el notebook al siguiente file request de Dropbox: https://www.dropbox.com/request/k4GFiKHjl8OuE9sCiq1N.