NLP and TM Módulo 4

Taller 2: recurrent neural networks

Nombres:

Cargue el modelo de RNN entrenado con la Biblia: https://github.com/lin99/NLPTM-2016/blob/gh-pages/4.Docs/grnn_best.tar

1. Calculando la siguiente palabra más probable

Construya una función que calcule la palabra, que con alta probailidad, puede seguir a otra. Formalmente, dada una palabra $w_i$ se debe calcular $w_{i+1}$:

$$ w_{i+1} = \arg \max_{w_{i+1}} P(w_{i+1}|w_i) $$

In [3]:
def next_word(word):
    # Su código aquí
    return ''

Explique claramente como es su estrategia. Pruebe la función con diferentes ejemplos. Discuta los resultados.

2. Jugando al ahorcado

Diseñe una función que sea capaz de encontrar los caracteres faltantes en una palabra. La función deber funcionar de la siguiente manera:

>>> hangman('_al_br_')
'palabra'

>>> hangman('_erp__nt_')
'serpiente'

In [4]:
def hangman(word):
    ### Su código debe ir aquí
    return ''

Explique claramente como es su estrategia. Pruebe la función con diferentes ejemplos. Discuta los resultados.

3. Probando un modelo alternativo

Cargue el modelo de RNN entrenado con un conjunto de datos alternativo: https://github.com/lin99/NLPTM-2016/blob/gh-pages/4.Docs/reg1_best.tar.

Genere texto con el modelo y trate de determinar con qué tipo de datos se entrenó originalmente el modelo.

Pruebe las funciones del punto 1 y 2 con el nuevo modelo. Discuta los resultados.

Cuando cargue el archivo de texto de entrenamiento utilice el siguiente código:


In [ ]:
# Load training file to get vocabulary
text_file = 'reg1.txt' # input file
with codecs.open(text_file, 'r', 'utf-8') as f:
    data = f.read()
chars = [u'\u0432', u'\u1293', u'\u2014', u'\u2018', u'\u201c', u'\U00061ba1', u' ', u'$', u'(', u',', u'\xaf', u'\\', u'\u03b1', u'0', u'\xb3', u'4', u'\xb7', u'8', u'\xbb', u'\u203c', u'\xbf', u'@', u'\u9839', u'\xd7', u'\u263b', u'\u05e1', u'`', u'\xe3', u'd', u'\xe7', u'h', u'l', u'\xef', u'p', u'\xf3', u't', u'x', u'\ufffd', u'|', u'\ufeff', u'\u2003', u'j', u'\u200b', u'\U000ee28c', u'\u2013', u'\xa0', u'#', u"'", u'\xa8', u'+', u'/', u'\xb0', u'3', u'\xb4', u'7', u';', u'?', u'\U00065ca1', u'\u044b', u'\u2022', u'[', u'_', u'\u0161', u'\xe0', u'c', u'\U00061b65', u'\xe4', u'g', u'\xe8', u'k', u'\u2026', u'\xec', u'o', u's', u'\u0434', u'\xf4', u'w', u'{', u'\xfc', u'\U00061285', u'\u2030', u'\n', u'\ud299', u'\xa1', u'"', u'&', u'\xa9', u'*', u'\xad', u'.', u'\xb1', u'2', u'6', u':', u'\xbd', u'>', u'\u0436', u'\u2663', u'\u2665', u'^', u'\xe1', u'b', u'f', u'\xe9', u'\u266a', u'\xed', u'n', u'\xf1', u'r', u'v', u'\xf9', u'z', u'\xfd', u'\u266b', u'~', u'\t', u'\u2113', u'\x92', u'\u2019', u'\u201d', u'!', u'\u9ba0', u'\xa2', u'%', u'\u1ba4', u')', u'\xaa', u'-', u'\U0006192f', u'\xae', u'1', u'5', u'9', u'\xba', u'=', u'\u0441', u'\u0430', u'\U000ee825', u']', u'a', u'\xe2', u'e', u'i', u'\xea', u'm', u'q', u'\xf2', u'u', u'\u92a8', u'y', u'\xfa', u'}']
vocab_size = len(chars)
char_to_ix = {ch: i for i, ch in enumerate(chars)}
ix_to_char = {i: ch for i, ch in enumerate(chars)}
print "Total number of chars:", len(data)
print "Vocabulary size:", vocab_size

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.