Herramientas de usuario

Herramientas del sitio


materias:pln:uba2018:practico2_draft

Diferencias

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

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisión
Revisión previa
materias:pln:uba2018:practico2_draft [2018/02/14 01:40] francolqmaterias:pln:uba2018:practico2_draft [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 39: Línea 39:
     * Cantidad de veces que aparece (frecuencia), y porcentaje del total.     * Cantidad de veces que aparece (frecuencia), y porcentaje del total.
     * Cinco palabras más frecuentes con esa etiqueta.     * Cinco palabras más frecuentes con esa etiqueta.
-    * En el README, agregar a mano una breve descripción del significado de la etiqueta.+    * **En el README, agregar a mano una breve descripción del significado de la etiqueta.**
   * Niveles de ambigüedad de las palabras: Una figura similar a la Figura 5.10 de Jurafsky & Martin (2008). Para cada nivel de ambigüedad (de 1 a 9) mostrar:   * Niveles de ambigüedad de las palabras: Una figura similar a la Figura 5.10 de Jurafsky & Martin (2008). Para cada nivel de ambigüedad (de 1 a 9) mostrar:
     * Cantidad de palabras y porcentaje del total.     * Cantidad de palabras y porcentaje del total.
Línea 59: Línea 59:
  
   * Programar un etiquetador baseline, que elija para cada palabra su etiqueta más frecuente observada en entrenamiento.   * Programar un etiquetador baseline, que elija para cada palabra su etiqueta más frecuente observada en entrenamiento.
-  * Para las palabras desconocidas, devolver la etiqueta 'nc0s000'.+  * Para las palabras desconocidas, devolver la etiqueta 'nc0s000' (nombre común singular). 
 +  * Entrenar y evaluar el modelo baseline del ejercicio anterior. Reportar los resultados en el README. 
 +  * **Bonus**: Graficar la matriz de confusión como un mapa de calor (ver documentación abajo).
  
 Interfaz de ''BaselineTagger'' en  ''baseline.py'': Interfaz de ''BaselineTagger'' en  ''baseline.py'':
Línea 93: Línea 95:
  
   $ nosetests tagging/tests/test_baseline.py    $ nosetests tagging/tests/test_baseline.py 
- 
- 
-===== Ejercicio 3: Entrenamiento y Evaluación de Taggers ===== 
- 
-  * Programar un script ''train.py'' que permita entrenar un etiquetador baseline. 
-  * Programar un script ''eval.py'' que permita evaluar un modelo de tagging. Calcular: 
-    * //Accuracy//, esto es, el porcentaje de etiquetas correctas. 
-    * //Accuracy// sobre las palabras conocidas y sobre las palabras desconocidas. 
-    * Matriz de confusión, como se explica en la sección 5.7.1 (//Error Analysis//) de Jurafsky & Martin. 
-  * Entrenar y evaluar el modelo baseline del ejercicio anterior. Reportar los resultados en el README. 
-  * **Bonus**: Graficar la matriz de confusión como un mapa de calor (ver documentación abajo). 
  
 Ejemplo de uso de los scripts: Ejemplo de uso de los scripts:
Línea 114: Línea 105:
   * http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html   * http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html
  
-===== Ejercicio 4: Hidden Markov Models y Algoritmo de Viterbi ===== 
- 
-  * Implementar un Hidden Markov Model cuyos parámetros son las probabilidades de transición entre estados (las etiquetas) y de emisión de símbolos (las palabras). 
-  * Implementar el algoritmo de Viterbi que calcula el etiquetado más probable de una oración. 
- 
-Interfaz de ''HMM'' y ''ViterbiTagger'' en  ''hmm.py'': 
- 
-<code python> 
-class HMM: 
- 
-    def __init__(self, n, tagset, trans, out): 
-        """ 
-        n -- n-gram size. 
-        tagset -- set of tags. 
-        trans -- transition probabilities dictionary. 
-        out -- output probabilities dictionary. 
-        """ 
- 
-    def tagset(self): 
-        """Returns the set of tags. 
-        """ 
- 
-    def trans_prob(self, tag, prev_tags): 
-        """Probability of a tag. 
- 
-        tag -- the tag. 
-        prev_tags -- tuple with the previous n-1 tags (optional only if n = 1). 
-        """ 
- 
-    def out_prob(self, word, tag): 
-        """Probability of a word given a tag. 
- 
-        word -- the word. 
-        tag -- the tag. 
-        """ 
- 
-    def tag_prob(self, y): 
-        """ 
-        Probability of a tagging. 
-        Warning: subject to underflow problems. 
- 
-        y -- tagging. 
-        """ 
- 
-    def prob(self, x, y): 
-        """ 
-        Joint probability of a sentence and its tagging. 
-        Warning: subject to underflow problems. 
- 
-        x -- sentence. 
-        y -- tagging. 
-        """ 
- 
-    def tag_log_prob(self, y): 
-        """ 
-        Log-probability of a tagging. 
- 
-        y -- tagging. 
-        """ 
- 
-    def log_prob(self, x, y): 
-        """ 
-        Joint log-probability of a sentence and its tagging. 
- 
-        x -- sentence. 
-        y -- tagging. 
-        """ 
- 
-    def tag(self, sent): 
-        """Returns the most probable tagging for a sentence. 
- 
-        sent -- the sentence. 
-        """ 
- 
- 
-class ViterbiTagger: 
- 
-    def __init__(self, hmm): 
-        """ 
-        hmm -- the HMM. 
-        """ 
- 
-    def tag(self, sent): 
-        """Returns the most probable tagging for a sentence. 
- 
-        sent -- the sentence. 
-        """ 
-</code> 
- 
-Tests: 
- 
-  $ nosetests tagging/tests/test_hmm.py  
-  $ nosetests tagging/tests/test_viterbi_tagger.py  
- 
-Documentación: 
- 
-  * [[http://www.cs.columbia.edu/~mcollins/hmms-spring2013.pdf]] 
- 
- 
-===== Ejercicio 5: HMM POS Tagger ===== 
- 
-  * Implementar en una clase ''MLHMM'' un Hidden Markov Model cuyos parámetros se estiman usando Maximum Likelihood sobre un corpus de oraciones etiquetado. 
-  * La clase debe tener **la misma interfaz que ''HMM''** con las modificaciones y agregados especificadas abajo. 
-  * Agregar al script de entrenamiento (train.py) una opción de línea de comandos que permita utilizar la MLHMM con distintos valores de ''n''. 
-  * Entrenar y evaluar para varios valores de ''n'' (1, 2, 3 y 4). Reportar los resultados en el README. Reportar también tiempo de evaluación. 
- 
-Interfaz de ''MLHMM'' en ''hmm.py'': 
- 
-<code python> 
-class MLHMM: 
- 
-    def __init__(self, n, tagged_sents, addone=True): 
-        """ 
-        n -- order of the model. 
-        tagged_sents -- training sentences, each one being a list of pairs. 
-        addone -- whether to use addone smoothing (default: True). 
-        """ 
- 
-    def tcount(self, tokens): 
-        """Count for an n-gram or (n-1)-gram of tags. 
- 
-        tokens -- the n-gram or (n-1)-gram tuple of tags. 
-        """ 
- 
-    def unknown(self, w): 
-        """Check if a word is unknown for the model. 
- 
-        w -- the word. 
-        """ 
- 
-    """ 
-       Todos los métodos de HMM. 
-    """ 
-</code> 
- 
-Tests: 
- 
-  $ nosetests tagging/tests/test_ml_hmm.py  
- 
-Documentación: 
- 
-  * [[http://www.cs.columbia.edu/~mcollins/hmms-spring2013.pdf]] 
  
-===== Ejercicio 6: Features para Etiquetado de Secuencias =====+===== Ejercicio 3: Features para Etiquetado de Secuencias =====
  
   * Implementar en ''features.py'' los siguientes features básicos:   * Implementar en ''features.py'' los siguientes features básicos:
Línea 310: Línea 159:
  
  
-===== Ejercicio 7: Maximum Entropy Markov Models =====+===== Ejercicio 4: Maximum Entropy Markov Models =====
  
   * Implementar un MEMM con el siguiente //pipeline// de scikit-learn:   * Implementar un MEMM con el siguiente //pipeline// de scikit-learn:
Línea 396: Línea 245:
  
  
-===== Ejercicio (punto bonus): Algoritmo de Viterbi para MEMMs (con Beam)  =====+===== Ejercicio (punto bonus): Algoritmo de Viterbi para MEMMs (con Beam)  =====
  
 Implementar el algoritmo de Viterbi para obtener la secuencia de tags de máxima probabilidad de acuerdo a un MEMM: Implementar el algoritmo de Viterbi para obtener la secuencia de tags de máxima probabilidad de acuerdo a un MEMM:
materias/pln/uba2018/practico2_draft.1518572424.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)