Herramientas de usuario

Herramientas del sitio


materias:pln:2019:practico1

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
materias:pln:2019:practico1 [2019/03/14 17:24] – created francolqmaterias:pln:2019:practico1 [2019/04/01 21:30] (actual) francolq
Línea 1: Línea 1:
 ====== Trabajo Práctico 1 - Modelado de Lenguaje ====== ====== Trabajo Práctico 1 - Modelado de Lenguaje ======
  
-[[materias:pln:uba2018|(volver a la página principal)]]+[[materias:pln:2019|(volver a la página principal)]]
  
 En este trabajo práctico implementaremos modelos de lenguaje y En este trabajo práctico implementaremos modelos de lenguaje y
 realizaremos algunos experimentos con ellos. realizaremos algunos experimentos con ellos.
  
-  * Repositorio: https://github.com/PLN-FaMAF/PLN-UBA2018+  * Repositorio: https://github.com/PLN-FaMAF/PLN-2019
-  * Fecha de entrega: <del>15/02</del> 18/02 a las 23:59.+  * Fecha de entrega: <del>28/3</del> 4/a las 23:59.
  
  
 ===== Instrucciones ===== ===== Instrucciones =====
  
-El código base para el proyecto se encuentra en el [[https://github.com/PLN-FaMAF/PLN-UBA2018|repositorio de la materia]].+El código base para el proyecto se encuentra en el [[https://github.com/PLN-FaMAF/PLN-2019|repositorio de la materia]].
 La entrega del proyecto es a través de github. Por lo tanto, deben **hacer un "fork" del repositorio** dentro de sus cuentas de github. La entrega del proyecto es a través de github. Por lo tanto, deben **hacer un "fork" del repositorio** dentro de sus cuentas de github.
  
Línea 19: Línea 19:
 Criterios de Evaluación: Criterios de Evaluación:
  
-  * Estilo de codificación (chequeado con flake8 y a ojo).+  * Estilo de codificación (chequeado con pylint, flake8 y a ojo).
   * Diseño del código: uso de clases, herencia, etc.   * Diseño del código: uso de clases, herencia, etc.
   * Uso y aprobación de tests (provistos y definidos por uds.).   * Uso y aprobación de tests (provistos y definidos por uds.).
Línea 34: Línea 34:
   * Revisar a ojo la tokenización y segmentado en oraciones. Si es muy mala, probar otras formas de tokenización/segmentado.   * Revisar a ojo la tokenización y segmentado en oraciones. Si es muy mala, probar otras formas de tokenización/segmentado.
   * Modificar el script ''train.py'' para utilizar el nuevo corpus.   * Modificar el script ''train.py'' para utilizar el nuevo corpus.
 +
 +
 +Interfaz de ''train.py'':
 +
 +<code>
 +$ python languagemodeling/scripts/train.py  --help
 +Train an n-gram model.
 +
 +Usage:
 +  train.py [-m <model>] -n <n> -o <file>
 +  train.py -h | --help
 +
 +Options:
 +  -n <n>        Order of the model.
 +  -m <model>    Model to use [default: ngram]:
 +                  ngram: Unsmoothed n-grams.
 +                  addone: N-grams with add-one smoothing.
 +                  inter: N-grams with interpolation smoothing.
 +  -o <file>     Output model file.
 +  -h --help     Show this screen.
 +</code>
 +
  
 Documentación: Documentación:
  
   * [[https://groups.google.com/forum/#!topic/pln-famaf-2015/KAa15XcqsXw|Ideas para corpus]]   * [[https://groups.google.com/forum/#!topic/pln-famaf-2015/KAa15XcqsXw|Ideas para corpus]]
 +  * [[https://github.com/crscardellino/sbwce/blob/master/unlabeled_corpora.tsv|Recursos del Spanish Billion Words Corpus (Cristian Cardellino)]]
   * [[http://www.nltk.org/book/ch03.html#regular-expressions-for-tokenizing-text|NLTK: Regular Expressions for Tokenizing Text]]   * [[http://www.nltk.org/book/ch03.html#regular-expressions-for-tokenizing-text|NLTK: Regular Expressions for Tokenizing Text]]
-  * [[http://nbviewer.jupyter.org/url/cs.famaf.unc.edu.ar/~francolq/Procesamiento%20B%C3%A1sico%20de%20Texto.ipynb#Tokenización|Jupyter notebook: Tokenización (ejemplo visto en clase)]]+  * [[https://github.com/PLN-FaMAF/PLN-2019/blob/master/notebooks/01%20Procesamiento%20B%C3%A1sico%20de%20Texto.ipynb|Jupyter notebook: Tokenización (ejemplo visto en clase)]]
   * [[https://docs.python.org/3/howto/regex.html|Python 3: Regular Expression HOWTO]]   * [[https://docs.python.org/3/howto/regex.html|Python 3: Regular Expression HOWTO]]
  
Línea 181: Línea 204:
  
   * Separar el corpus en entrenamiento y test (90% y 10% resp.).   * Separar el corpus en entrenamiento y test (90% y 10% resp.).
 +  * Implementar el cálculo de log-probability, cross-entropy y perplejidad en la clase ''ngram.LanguageModel''.
 +  * Programar un script ''eval.py'' para cargar un modelo de lenguajes y evaluarlo sobre el conjunto de test.
   * Usar el script ''train.py'' para entrenar el modelo "add one" y guardar las instancias resultantes para varios valores de n (1, 2, 3 y 4).   * Usar el script ''train.py'' para entrenar el modelo "add one" y guardar las instancias resultantes para varios valores de n (1, 2, 3 y 4).
   * Usar el script ''eval.py'' para calcular la perplejidad de los modelos entrenados en el ejercicio anterior. Reportar los resultados en el README.   * Usar el script ''eval.py'' para calcular la perplejidad de los modelos entrenados en el ejercicio anterior. Reportar los resultados en el README.
- 
-Nueva interfaz de ''train.py'': 
- 
-<code> 
-$ python languagemodeling/scripts/train.py  --help 
-Train an n-gram model. 
- 
-Usage: 
-  train.py -n <n> [-m <model>] -o <file> 
-  train.py -h | --help 
- 
-Options: 
-  -n <n>        Order of the model. 
-  -m <model>    Model to use [default: ngram]: 
-                  ngram: Unsmoothed n-grams. 
-                  addone: N-grams with add-one smoothing. 
-  -o <file>     Output model file. 
-  -h --help     Show this screen. 
-</code> 
- 
  
 Interfaz de ''eval.py'': Interfaz de ''eval.py'':
Línea 218: Línea 223:
   -h --help     Show this screen.   -h --help     Show this screen.
 </code> </code>
 +
 +Documentación:
 +
 +  * {{ :materias:pln:2019:lm-notas.pdf |Modelado de Lenguaje: Notas Complementarias}}
 +  * Mails:
 +    * [[https://groups.google.com/forum/#!topic/pln-famaf-2015/29EwJKp5nrY|Resultados típicos de perplexity para todos los modelos]]
  
  
Línea 257: Línea 268:
 (Course notes for NLP by Michael Collins, Columbia University)]] (Course notes for NLP by Michael Collins, Columbia University)]]
     * **Especialmente** [[https://cs.famaf.unc.edu.ar/~francolq/Ejercicio%204.png|esta parte]] (última parte  de la sección 1.4.1).     * **Especialmente** [[https://cs.famaf.unc.edu.ar/~francolq/Ejercicio%204.png|esta parte]] (última parte  de la sección 1.4.1).
-  * [[https://cs.famaf.unc.edu.ar/~francolq/lm-notas.pdf|Modelado de Lenguaje: Notas Complementarias]]+  * {{ :materias:pln:2019:lm-notas.pdf |Modelado de Lenguaje: Notas Complementarias}}
   * [[https://www.youtube.com/watch?v=-aMYz1tMfPg&list=PL6397E4B26D00A269&index=17|4 - 6 - Interpolation - Stanford NLP - Professor Dan Jurafsky & Chris Manning]]   * [[https://www.youtube.com/watch?v=-aMYz1tMfPg&list=PL6397E4B26D00A269&index=17|4 - 6 - Interpolation - Stanford NLP - Professor Dan Jurafsky & Chris Manning]]
   * [[http://nbviewer.jupyter.org/url/cs.famaf.unc.edu.ar/~francolq/Modelado%20de%20Lenguaje%20Parte%202.ipynb#Suavizado-por-Interpolación|Jupyter notebook: Suavizado por Interpolación (ejemplo visto en clase)]]   * [[http://nbviewer.jupyter.org/url/cs.famaf.unc.edu.ar/~francolq/Modelado%20de%20Lenguaje%20Parte%202.ipynb#Suavizado-por-Interpolación|Jupyter notebook: Suavizado por Interpolación (ejemplo visto en clase)]]
Línea 266: Línea 277:
  
  
-===== Ejercicio 7 (punto bonus): Reordenamiento de Palabras ó Atribución de Autoría =====+===== Ejercicio 7: Suavizado por Back-Off con Discounting ===== 
 + 
 +  * Implementar el suavizado por back-off con discounting en ''ngram.py'' en una clase ''BackOffNGram''
 +  * Usar add-one para el nivel más bajo (unigramas). 
 +  * Usar datos held-out (un 10% de train) y barrido para elegir valor para beta. 
 +  * Agregar al script de entrenamiento (train.py) una opción de línea de comandos que permita utilizar este modelo. 
 +  * Calcular y reportar perplejidad para varios valores de ''n'' (1, 2, 3 y 4). Reportar los resultados en el README. 
 + 
 +Interfaz de la clase ''BackOffNGram'' (en ''ngram.py''): 
 + 
 +<code python> 
 +class BackOffNGram: 
 + 
 +    def __init__(self, n, sents, beta=None, addone=True): 
 +        """ 
 +        Back-off NGram model with discounting as described by Michael Collins. 
 + 
 +        n -- order of the model. 
 +        sents -- list of sentences, each one being a list of tokens. 
 +        beta -- discounting hyper-parameter (if not given, estimate using 
 +            held-out data). 
 +        addone -- whether to use addone smoothing (default: True). 
 +        """ 
 + 
 +    """ 
 +       Todos los métodos de NGram. 
 +    """ 
 + 
 +    def A(self, tokens): 
 +        """Set of words with counts > 0 for a k-gram with 0 < k < n. 
 + 
 +        tokens -- the k-gram tuple. 
 +        """ 
 + 
 +    def alpha(self, tokens): 
 +        """Missing probability mass for a k-gram with 0 < k < n. 
 + 
 +        tokens -- the k-gram tuple. 
 +        """ 
 + 
 +    def denom(self, tokens): 
 +        """Normalization factor for a k-gram with 0 < k < n. 
 + 
 +        tokens -- the k-gram tuple. 
 +        """ 
 +</code> 
 + 
 +Tests: 
 + 
 +  $ nosetests languagemodeling/tests/test_backoff_ngram.py  
 + 
 +Documentación: 
 + 
 +  * [[http://www.cs.columbia.edu/~mcollins/lm-spring2013.pdf|Language Modeling 
 +(Course notes for NLP by Michael Collins, Columbia University)]] 
 +  * {{ :materias:pln:2019:lm-notas.pdf |Modelado de Lenguaje: Notas Complementarias}} 
 +  * [[https://www.youtube.com/watch?v=hsHw9F3UuAQ&index=3&list=PLO9y7hOkmmSHE2v_oEUjULGg20gyb-v1u|Discounting Methods - Part I]] (Michael Collins, Columbia University) 
 +  * [[https://www.youtube.com/watch?v=FedWcgXcp8w&index=4&list=PLO9y7hOkmmSHE2v_oEUjULGg20gyb-v1u|Discounting Methods - Part II]] (Michael Collins, Columbia University) 
 + 
 + 
 +===== Ejercicio 8 (punto bonus): Reordenamiento de Palabras ó Atribución de Autoría =====
  
   * Elegir y resolver uno de los dos ejercicios siguientes de Jurafsky & Martin (2008):   * Elegir y resolver uno de los dos ejercicios siguientes de Jurafsky & Martin (2008):
materias/pln/2019/practico1.1552584243.txt.gz · Última modificación: 2019/03/14 17:24 por francolq