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/14 01:40] – francolq | materias: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), | * 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: 2018/08/10 03:03 (editor externo)