Tabla de Contenidos
Trabajo Práctico 2 - Análisis de Sentimiento
(volver a la página principal)
En este trabajo práctico implementaremos modelos de análisis de sentimiento y haremos algunos experimentos con ellos.
- Repositorio: https://github.com/PLN-FaMAF/PLN-2019.
- Fecha de entrega: 25/04 a las 23:59.
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:
- Estilo de codificación (chequeado con flake8 y a ojo).
- Diseño del código: uso de clases, herencia, etc.
- Uso y aprobación de tests (provistos y definidos por uds.).
- Uso apropiado de git (commits granulares, logs informativos).
- Resultados.
- README.
Ejercicio 1: Corpus de Tweets: Estadísticas Básicas
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:
P
: Polaridad positiva.N
: Polaridad negativa.NEU
: Polaridad neutra.NONE
: Sin polaridad.
Puede encontrar una descripción más detallada del significado de cada etiqueta en este documento.
En InterTASS 2018 se proveen corpus de entrenamiento, desarrollo y evaluación para tweets de tres países: España, Costa Rica y Perú.
Programar un script stats.py
que muestre las siguientes estadísticas básicas de la sección de entrenamiento del corpus InterTASS:
- Cantidad total de tweets.
- Cantidad de tweets por cada valor de polaridad (
P
,N
,NEG
yNONE
).
Imprimir estas estadísticas para los tres corpus de InterTASS 2018.
Documentación:
- TASS:
-
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:
- 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ódulosentiment.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ódulosentiment.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
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:
- Eliminar menciones de usuarios.
- Eliminar URLs.
- Contraer repeticiones de 3 o más vocales.
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
- 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 4 (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: