materias:pln:uba2018:practico2_draft
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| materias:pln:uba2018:practico2_draft [2018/02/13 22:40] – francolq | materias:pln:uba2018:practico2_draft [2025/11/15 13:47] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 39: | Línea 39: | ||
| * Cantidad de veces que aparece (frecuencia), | * Cantidad de veces que aparece (frecuencia), | ||
| * 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. | + | |
| * 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, | + | * Para las palabras desconocidas, |
| + | * 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 '' | Interfaz de '' | ||
| Línea 93: | Línea 95: | ||
| $ nosetests tagging/ | $ nosetests tagging/ | ||
| - | |||
| - | |||
| - | ===== Ejercicio 3: Entrenamiento y Evaluación de Taggers ===== | ||
| - | |||
| - | * Programar un script '' | ||
| - | * Programar un script '' | ||
| - | * // | ||
| - | * // | ||
| - | * 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:// | * http:// | ||
| - | ===== 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 '' | ||
| - | |||
| - | <code python> | ||
| - | class HMM: | ||
| - | |||
| - | def __init__(self, | ||
| - | """ | ||
| - | n -- n-gram size. | ||
| - | tagset -- set of tags. | ||
| - | trans -- transition probabilities dictionary. | ||
| - | out -- output probabilities dictionary. | ||
| - | """ | ||
| - | |||
| - | def tagset(self): | ||
| - | """ | ||
| - | """ | ||
| - | |||
| - | def trans_prob(self, | ||
| - | """ | ||
| - | |||
| - | tag -- the tag. | ||
| - | prev_tags -- tuple with the previous n-1 tags (optional only if n = 1). | ||
| - | """ | ||
| - | |||
| - | def out_prob(self, | ||
| - | """ | ||
| - | |||
| - | word -- the word. | ||
| - | tag -- the tag. | ||
| - | """ | ||
| - | |||
| - | def tag_prob(self, | ||
| - | """ | ||
| - | 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, | ||
| - | """ | ||
| - | Log-probability of a tagging. | ||
| - | |||
| - | y -- tagging. | ||
| - | """ | ||
| - | |||
| - | def log_prob(self, | ||
| - | """ | ||
| - | Joint log-probability of a sentence and its tagging. | ||
| - | |||
| - | x -- sentence. | ||
| - | y -- tagging. | ||
| - | """ | ||
| - | |||
| - | def tag(self, sent): | ||
| - | """ | ||
| - | |||
| - | sent -- the sentence. | ||
| - | """ | ||
| - | |||
| - | |||
| - | class ViterbiTagger: | ||
| - | |||
| - | def __init__(self, | ||
| - | """ | ||
| - | hmm -- the HMM. | ||
| - | """ | ||
| - | |||
| - | def tag(self, sent): | ||
| - | """ | ||
| - | |||
| - | sent -- the sentence. | ||
| - | """ | ||
| - | </ | ||
| - | |||
| - | Tests: | ||
| - | |||
| - | $ nosetests tagging/ | ||
| - | $ nosetests tagging/ | ||
| - | |||
| - | Documentación: | ||
| - | |||
| - | * [[http:// | ||
| - | |||
| - | |||
| - | ===== Ejercicio 5: HMM POS Tagger ===== | ||
| - | |||
| - | * Implementar en una clase '' | ||
| - | * La clase debe tener **la misma interfaz que '' | ||
| - | * Agregar al script de entrenamiento (train.py) una opción de línea de comandos que permita utilizar la MLHMM con distintos valores de '' | ||
| - | * Entrenar y evaluar para varios valores de '' | ||
| - | |||
| - | Interfaz de '' | ||
| - | |||
| - | <code python> | ||
| - | class MLHMM: | ||
| - | |||
| - | def __init__(self, | ||
| - | """ | ||
| - | 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 -- the n-gram or (n-1)-gram tuple of tags. | ||
| - | """ | ||
| - | |||
| - | def unknown(self, | ||
| - | """ | ||
| - | |||
| - | w -- the word. | ||
| - | """ | ||
| - | |||
| - | """ | ||
| - | Todos los métodos de HMM. | ||
| - | """ | ||
| - | </ | ||
| - | |||
| - | Tests: | ||
| - | |||
| - | $ nosetests tagging/ | ||
| - | |||
| - | Documentación: | ||
| - | |||
| - | * [[http:// | ||
| - | ===== Ejercicio | + | ===== Ejercicio |
| * Implementar en '' | * Implementar en '' | ||
| Línea 310: | Línea 159: | ||
| - | ===== Ejercicio | + | ===== Ejercicio |
| * Implementar un MEMM con el siguiente // | * Implementar un MEMM con el siguiente // | ||
| Línea 396: | Línea 245: | ||
| - | ===== Ejercicio | + | ===== Ejercicio |
| 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: (editor externo)
