Tabla de Contenidos

Trabajo Práctico 3 - Análisis de Sentimientos

(volver a la página principal)

En este trabajo práctico implementaremos modelos de análisis de sentimientos y haremos algunos experimentos con ellos.

Instrucciones

El código base para el proyecto se encuentra en el repositorio de la materia. La entrega del proyecto es a través de github. Por lo tanto, deben hacer un “fork” del repositorio dentro de sus cuentas de github.

Además del código fuente, deben elaborar un README con una breve explicación de lo que hicieron en cada ejercicio. El README puede estar en texto plano (txt), markdown (md) o restrucured text (rst), y debe estar incluído dentro de la carpeta tagging.

Criterios de Evaluación:

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:

Puede encontrar una descripción más detallada del significado de cada etiqueta en este documento.

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:

Documentación:

Ejercicio 2: Mejoras al Clasificador Básico de Polaridad

Implementar, en el clasificador de sentimientos, cuatro de las seis posibles mejoras descriptas en las siguientes subsecciones. Para cada mejora, reportar:

Para una sola de las mejoras, usando maxent, reportar además:

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

Modificar la configuración del CountVectorizer para que ignore las repeticiones de palabras.

Normalización Básica de Tweets

Preprocesar los textos de los tweets de la siguiente manera:

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

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.

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

debe ser reemplazado por:

este verano tampoco NOT_ha NOT_llegado NOT_hacer NOT_calor , sobre todo si lo comparamos con el pasado

Ejercicio 3: Evaluación Final

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.

Ejercicio 5 (punto bonus): Lexicón de Sentimientos

Documentación: