Herramientas de usuario

Herramientas del sitio


materias:pln:uba2018:practico3_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:practico3_draft [2018/02/24 22:00] francolqmaterias:pln:uba2018:practico3_draft [2018/08/10 03:03] (actual) – editor externo 127.0.0.1
Línea 28: Línea 28:
 ===== Ejercicio 1: Corpus de Tweets: Estadísticas Básicas ===== ===== Ejercicio 1: Corpus de Tweets: Estadísticas Básicas =====
  
-El corpus ''InterTASS'' se compone de un conjunto de tweets en español, cada uno anotado con su polaridad general. Los valores posibles para la polaridad son los siguientes:+El corpus InterTASS se compone de un conjunto de tweets en español, cada uno anotado con su polaridad general. Los valores posibles para la polaridad son los siguientes:
  
   * ''P'': Polaridad positiva.   * ''P'': Polaridad positiva.
Línea 37: Línea 37:
 Puede encontrar una descripción más detallada del significado de cada etiqueta en [[https://cs.famaf.unc.edu.ar/~francolq/criterios_polaridad.pdf|este documento]]. Puede encontrar una descripción más detallada del significado de cada etiqueta en [[https://cs.famaf.unc.edu.ar/~francolq/criterios_polaridad.pdf|este documento]].
  
-Programar un script ''stats.py'' que muestre las siguientes estadísticas básicas de la sección de entrenamiento del corpus ''InterTASS'':+Programar un script ''stats.py'' que muestre las siguientes estadísticas básicas de la sección de entrenamiento del corpus InterTASS, y **por separado** para la sección de entrenamiento del corpus GeneralTASS:
  
   * Cantidad total de tweets.   * Cantidad total de tweets.
Línea 44: Línea 44:
 Documentación: Documentación:
  
 +  * [[http://www.sepln.org/workshops/tass/2017/|TASS Workshop 2017]]
 +  * [[https://cs.famaf.unc.edu.ar/~francolq/criterios_polaridad.pdf|Etiquetado de polaridad]]
   * [[http://nbviewer.ipython.org/url/cs.famaf.unc.edu.ar/~francolq/An%C3%A1lisis%20de%20Sentimiento.ipynb|Jupyter notebook: Análisis de Sentimiento]]   * [[http://nbviewer.ipython.org/url/cs.famaf.unc.edu.ar/~francolq/An%C3%A1lisis%20de%20Sentimiento.ipynb|Jupyter notebook: Análisis de Sentimiento]]
  
  
-===== Ejercicio 2: Clasificador Básico de Polaridad =====+===== Ejercicio 2: Mejoras al Clasificador Básico de Polaridad =====
  
-Implementar ...+Implementar, en el clasificador de sentimientos, **cuatro** de las seis posibles mejoras descriptas en las siguientes subseccionesPara cada mejora, reportar: 
 + 
 +  * Curvas de aprendizaje para los tres clasificadores (mnb, maxent y svm)Usar el script ''curve.py''
 +  * Resultado de la evaluación sobre el corpus de development de InterTASS. Usar el script ''eval.py''
 + 
 +Para **una sola de las mejoras**, usando maxent, reportar además: 
 + 
 +  * Features más relevantes para cada sentimiento. Usar ''print_maxent_features'' del módulo ''sentiment.analysis''
 +  * Tweet de ejemplo, con todos los features que intervienen y sus respectivos pesos para cada clase. Usar ''pprint_feature_weights_for_item''  del módulo ''sentiment.analysis''
 + 
 + 
 +==== Mejor Tokenizer ==== 
 + 
 +El tokenizer por defecto del ''CountVectorizer'' filtra toda la puntuación y los emojis. Sin embargo los emojis y algunas puntuaciones son indicadoras de sentimiento (e.g. "!" y "?"). Cambiar el tokenizer por uno que no elimine emojis y puntuación. Una opción posible es el tokenizador de NLTK.
  
  
 ==== Binarización de Conteos ==== ==== Binarización de Conteos ====
 +
 +Modificar la configuración del ''CountVectorizer'' para que ignore las repeticiones de palabras.
  
  
 ==== Normalización Básica de Tweets ==== ==== Normalización Básica de Tweets ====
 +
 +Preprocesar los textos de los tweets de la siguiente manera:
 +
 +  * Eliminar menciones de usuarios.
 +  * Eliminar URLs.
 +  * Contraer repeticiones de 3 o más vocales.
  
  
 ==== Filtrado de stopwords ==== ==== Filtrado de stopwords ====
 +
 +Modificar el ''CountVectorizer'' para que ignore stopwords del castellano (palabras sin carga semántica como artículos, preposiciones, etc.). Una posible fuente de stopwords es NLTK.
  
  
 ==== Lematización o Stemming ==== ==== Lematización o Stemming ====
 +
 +Modificar el tokenizador del ''CountVectorizer'' para que además haga stemming o lematización de las palabras. Una posibilidad es usar el Snowball stemmer que viene con NLTK.
 +
 +  * http://scikit-learn.org/stable/modules/feature_extraction.html#customizing-the-vectorizer-classes
 +  * http://www.nltk.org/api/nltk.stem.html#module-nltk.stem.snowball
  
  
 ==== Manejo de Negaciones ==== ==== Manejo de Negaciones ====
  
 +Modificar el tokenizador del ''CountVectorizer'' para que además maneje negaciones.
 +Al encontrar una negación ('no', 'tampoco', etc.), deben modificarse todas las palabras hasta el siguiente signo de puntuación, agregándoles el prefijo ''NOT_''.
  
 +Ejemplo:
  
 +  este verano tampoco ha llegado a hacer calor, sobre todo si lo comparamos con el pasado
  
-===== Ejercicio 3 (punto bonus)Lexicón de Sentimientos =====+debe ser reemplazado por:
  
-Incorporarlo como feature al clasifiador anterior. +  este verano tampoco NOT_ha NOT_llegado NOT_hacer NOT_calor , sobre todo si lo comparamos con el pasado
  
  
-===== Ejercicio 4 (punto bonus)Validación Cruzada / Grid-search =====+===== Ejercicio 3Evaluación Final =====
  
 +  * 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 ''eval.py'' con la opción ''-f''.
  
-===== Ejercicio 5 (punto bonus): Ensamble de Clasificadores ===== 
  
 +===== Ejercicio 4 (punto bonus): Exploración de Parámetros ("Grid Search") =====
 +
 +Para los tres tipos de clasificadores, pruebe diferentes combinaciones de parámetros y evalúe sobre el corpus de development. Reporte mejor resultado y configuración para cada clasificador.
 +
 +  * [[http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html|maxent:]] Probar distintos valores para ''penalty'' y ''C''.
 +  * [[http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html|svm:]]  Probar distintos valores para ''penalty'' y ''C''.
 +  * ...
 +
 +  * [[http://scikit-learn.org/stable/modules/grid_search.html|Tuning the hyper-parameters of an estimator (scikit-learn)]]
 +
 +
 +===== Ejercicio 5 (punto bonus): Lexicón de Sentimientos =====
 +
 +  * 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 (se puede usar FeatureUnion).
 +  * Entrenar, evaluar y analizar los resultados.
 +
 +
 +Documentación:
 +
 +  * Posibles fuentes de lexicones:
 +    * [[http://habla.dc.uba.ar/gravano/sdal.php?lang=esp|Spanish DAL: Diccionario de Afectos en Español (Agustín Gravano et al.)]]
 +    * [[http://web.eecs.umich.edu/~mihalcea/downloads.html#SPANISH_SENT_LEXICONS|Sentiment Lexicons in Spanish (Veronica Perez Rosas et al.)]]
 +  * [[http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.FeatureUnion.html|FeatureUnion (scikit-learn)]]
 +
 +
 +/*
 +===== Ejercicio 5 (punto bonus): Ensamble de Clasificadores =====
 +*/
materias/pln/uba2018/practico3_draft.1519509613.txt.gz · Última modificación: 2018/08/10 03:03 (editor externo)