materias:pln:2019:practico2_draft
Diferencias
Muestra las diferencias entre dos versiones de la página.
| Próxima revisión | Revisión previa | ||
| materias:pln:2019:practico2_draft [2019/03/07 23:44] – created francolq | materias:pln:2019:practico2_draft [2025/11/15 13:47] (actual) – editor externo 127.0.0.1 | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| - | ====== Trabajo Práctico 2 - Etiquetado | + | ====== Trabajo Práctico 2 - Análisis |
| [[materias: | [[materias: | ||
| - | En este trabajo práctico implementaremos | + | En este trabajo práctico implementaremos modelos de análisis |
| - | secuencias | + | |
| * Repositorio: | * Repositorio: | ||
| - | * Fecha de entrega: | + | * Fecha de entrega: |
| Línea 27: | Línea 26: | ||
| - | ===== Ejercicio 1: Corpus | + | ===== Ejercicio 1: Corpus |
| - | Programar un script '' | + | Los corpus InterTASS 2018 se componen de conjuntos de tweets en español, cada uno anotado con su polaridad general. Los valores posibles para la polaridad son los siguientes: |
| - | * Estadísticas básicas: | + | * '' |
| - | * Cantidad de oraciones. | + | * '' |
| - | * Cantidad de ocurrencias de palabras. | + | * '' |
| - | * Cantidad de palabras (vocabulario). | + | * '' |
| - | * Cantidad de etiquetas (vocabulario de tags). | + | |
| - | * Etiquetas más frecuentes: Una tabla con las 10 etiquetas más frecuentes y la siguiente información para cada una: | + | |
| - | * Cantidad de veces que aparece (frecuencia), | + | |
| - | * 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: | + | |
| - | * Cantidad de palabras y porcentaje del total. | + | |
| - | * Cinco palabras más frecuentes. | + | |
| - | * Incluir todas las estadísticas en el README. | + | |
| - | Uso del script: | + | Puede encontrar una descripción más detallada |
| - | $ python tagging/ | + | En InterTASS 2018 se proveen corpus de entrenamiento, |
| - | Documentación: | + | Programar un script |
| - | + | ||
| - | * [[http:// | + | |
| - | * [[https:// | + | |
| - | * [[https:// | + | |
| - | * [[http:// | + | |
| - | + | ||
| - | + | ||
| - | ===== Ejercicio 2: Baseline Tagger ===== | + | |
| - | + | ||
| - | * Programar un etiquetador baseline, que elija para cada palabra su etiqueta más frecuente observada en entrenamiento. | + | |
| - | * 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 '' | + | |
| - | + | ||
| - | <code python> | + | |
| - | class BaselineTagger: | + | |
| - | + | ||
| - | def __init__(self, | + | |
| - | """ | + | |
| - | tagged_sents -- training sentences, each one being a list of pairs. | + | |
| - | default_tag -- tag for unknown words. | + | |
| - | """ | + | |
| - | + | ||
| - | def tag(self, sent): | + | |
| - | """ | + | |
| - | + | ||
| - | sent -- the sentence. | + | |
| - | """ | + | |
| - | + | ||
| - | def tag_word(self, | + | |
| - | """ | + | |
| - | + | ||
| - | w -- the word. | + | |
| - | """ | + | |
| - | + | ||
| - | def unknown(self, | + | |
| - | """ | + | |
| - | + | ||
| - | w -- the word. | + | |
| - | """ | + | |
| - | </ | + | |
| - | + | ||
| - | Tests: | + | |
| - | + | ||
| - | $ nosetests tagging/ | + | |
| - | Ejemplo | + | * Cantidad total de tweets. |
| + | * Cantidad | ||
| - | $ python tagging/ | + | Imprimir estas estadísticas para los tres corpus de InterTASS 2018. |
| - | $ python tagging/ | + | |
| Documentación: | Documentación: | ||
| - | * http://scikit-learn.org/stable/auto_examples/model_selection/plot_confusion_matrix.html | + | * TASS: |
| + | * [[http://www.sepln.org/ | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| - | ===== Ejercicio | + | ===== Ejercicio |
| - | * Implementar en '' | + | Implementar, en el clasificador de sentimientos, |
| - | | + | |
| - | | + | |
| - | | + | |
| - | * '' | + | |
| - | * También implementar los siguientes | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | Interfaz | + | * Curvas |
| + | * Resultado de la evaluación sobre el corpus de development de InterTASS. Usar el script '' | ||
| - | <code python> | + | Para **una sola de las mejoras**, usando maxent, reportar además: |
| - | class NPrevTags(Feature): | + | |
| - | def __init__(self, | + | * Features más relevantes para cada sentimiento. Usar '' |
| - | """ | + | * Tweet de ejemplo, con todos los features que intervienen y sus respectivos pesos para cada clase. Usar '' |
| - | n -- number of previous tags to consider. | ||
| - | """ | ||
| - | def _evaluate(self, | + | ==== Mejor Tokenizer ==== |
| - | """ | + | |
| - | h -- a history. | + | El tokenizer por defecto del '' |
| - | | + | |
| - | class PrevWord(Feature): | + | ==== Binarización de Conteos ==== |
| - | def __init__(self, | + | Modificar la configuración del '' |
| - | """ | + | |
| - | f -- the feature. | ||
| - | """ | ||
| - | def _evaluate(self, | + | ==== Normalización Básica de Tweets ==== |
| - | """ | + | |
| - | h -- the history. | + | Preprocesar los textos de los tweets de la siguiente manera: |
| - | """ | + | |
| - | </ | + | |
| - | Tests: | + | * Eliminar menciones de usuarios. |
| + | * Eliminar URLs. | ||
| + | * Contraer repeticiones de 3 o más vocales. | ||
| - | $ nosetests tagging/ | ||
| - | Documentación: | + | ==== Filtrado de stopwords ==== |
| - | * [[http:// | + | Modificar el '' |
| - | ===== Ejercicio 4: Maximum Entropy Markov Models ===== | + | ==== Lematización o Stemming |
| - | * Implementar un MEMM con el siguiente // | + | Modificar |
| - | * Vectorizador ('' | + | |
| - | * Clasificador de máxima entropía ('' | + | |
| - | * Implementar el algoritmo de tagging secuencial en el método '' | + | |
| - | * Entrenar y evaluar | + | |
| - | * Probar también los siguientes clasificadores: | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | * Reportar los resultados en el README. Reportar también tiempo de evaluación. | + | |
| - | * **Bonus**: Inventar y agregar features | + | |
| - | Interfaz de '' | + | * http:// |
| + | * http:// | ||
| - | <code python> | ||
| - | class MEMM: | ||
| - | def __init__(self, | + | ==== Manejo de Negaciones ==== |
| - | """ | + | |
| - | n -- order of the model. | + | |
| - | tagged_sents -- list of sentences, each one being a list of pairs. | + | |
| - | clf -- classifying model, one of ' | + | |
| - | """ | + | |
| - | def sents_histories(self, tagged_sents): | + | Modificar el tokenizador del '' |
| - | """ | + | Al encontrar una negación |
| - | Iterator over the histories of a corpus. | + | |
| - | tagged_sents -- the corpus (a list of sentences) | + | Ejemplo: |
| - | """ | + | |
| - | def sent_histories(self, | + | este verano tampoco ha llegado |
| - | """ | + | |
| - | Iterator over the histories of a tagged sentence. | + | |
| - | tagged_sent -- the tagged sentence (a list of pairs (word, tag)). | + | debe ser reemplazado por: |
| - | """ | + | |
| - | def sents_tags(self, tagged_sents): | + | este verano tampoco NOT_ha NOT_llegado NOT_hacer NOT_calor |
| - | """ | + | |
| - | Iterator over the tags of a corpus. | + | |
| - | tagged_sents -- the corpus (a list of sentences) | ||
| - | """ | ||
| - | def sent_tags(self, | + | ===== Ejercicio 3: Evaluación Final ===== |
| - | """ | + | |
| - | Iterator over the tags of a tagged sentence. | + | |
| - | tagged_sent -- the tagged sentence (a list of pairs (word, tag)). | + | * Seleccionar, del ejercicio anterior, el clasificador que haya dado mejores resultados. |
| - | """ | + | * Calcular y reportar los resultados de la evaluación con el corpus de test final de InterTASS. Usar el script '' |
| - | def tag(self, sent): | ||
| - | """ | ||
| - | sent -- the sentence. | + | ===== Ejercicio 4 (punto bonus): Lexicón de Sentimientos ===== |
| - | """ | + | |
| - | def tag_history(self, h): | + | * Obtener o elaborar un lexicón de palabras con polaridad positiva y negativa del castellano. |
| - | """ | + | * Programar dos features que calculen la cantidad de ocurrencias de palabras positivas y negativas en cada tweet. |
| + | * Agregar estos nuevos features al pipeline | ||
| + | * Entrenar, evaluar y analizar los resultados. | ||
| - | h -- the history. | ||
| - | """ | ||
| - | def unknown(self, | + | Documentación: |
| - | """ | + | |
| - | w -- the word. | + | * Posibles fuentes de lexicones: |
| - | """ | + | * [[http:// |
| - | </code> | + | * [[http:// |
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| - | Tests: | ||
| - | $ nosetests tagging/tests/ | + | /* |
| + | ===== Ejercicio 4 (punto bonus): Exploración de Parámetros ("Grid Search" | ||
| - | Documentación: | + | Para los tres tipos de clasificadores, |
| - | * [[http://nbviewer.ipython.org/url/cs.famaf.unc.edu.ar/ | + | * [[http://scikit-learn.org/stable/ |
| - | * [[http://nbviewer.ipython.org/url/cs.famaf.unc.edu.ar/ | + | * [[http://scikit-learn.org/stable/modules/ |
| - | * [[http:// | + | * |
| - | + | | |
| - | /* | + | |
| - | ===== Ejercicio 5 (punto bonus): Análisis de Error y Nuevos Features | + | |
| */ | */ | ||
| - | ===== Ejercicio 5 (punto bonus): | + | /* |
| - | + | ===== Ejercicio 5 (punto bonus): | |
| - | Implementar el algoritmo de Viterbi para obtener la secuencia de tags de máxima probabilidad de acuerdo a un MEMM: | + | */ |
| - | + | ||
| - | | + | |
| - | * Beam: En cada paso del Viterbi, guardar sólo los '' | + | |
| - | * Evaluar para varios clasificadores ('' | + | |
| - | + | ||
| - | + | ||
| - | Documentación: | + | |
| - | * [[http:// | ||
| - | * Beam inference: | ||
| - | * [[https:// | ||
| - | * [[https:// | ||
materias/pln/2019/practico2_draft.1552013046.txt.gz · Última modificación: (editor externo)
