Herramientas de usuario

Herramientas del sitio


materias:pln:2019:practico2

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Próxima revisión
Revisión previa
materias:pln:2019:practico2 [2019/04/01 19:00] – created francolqmaterias:pln:2019:practico2 [2019/04/29 21:36] (actual) francolq
Línea 6: Línea 6:
  
   * Repositorio: https://github.com/PLN-FaMAF/PLN-2019.   * Repositorio: https://github.com/PLN-FaMAF/PLN-2019.
-  * Fecha de entrega: 25/04 a las 23:59.+  * Fecha de entrega: <del>25/04</del> 2/5 a las 23:59.
  
  
Línea 51: Línea 51:
     * [[http://www.sepln.org/workshops/tass/2018/task-1|TASS 2018 Task 1]]     * [[http://www.sepln.org/workshops/tass/2018/task-1|TASS 2018 Task 1]]
       * [[http://www.sepln.org/workshops/tass/2018/task-1/private/evaluation/evaluate.php|Resultados]]       * [[http://www.sepln.org/workshops/tass/2018/task-1/private/evaluation/evaluate.php|Resultados]]
 +      * [[http://ceur-ws.org/Vol-2172/|Proceedings]]
 +      * [[http://ceur-ws.org/Vol-2172/p0_overview_tass2018.pdf|Overview]]
 +      * [[http://ceur-ws.org/Vol-2172/p2_elirf_tass2018.pdf|ELiRF-UPV (1st place)]]
 +      * [[http://ceur-ws.org/Vol-2172/p5_retuyt_tass2018.pdf|RETUYT (2nd place)]]
 +      * [[http://ceur-ws.org/Vol-2172/p1_atalaya_tass2018.pdf|Atalaya (3rd place)]]
     * [[https://competitions.codalab.org/competitions/21957|TASS 2019]]     * [[https://competitions.codalab.org/competitions/21957|TASS 2019]]
   * [[https://cs.famaf.unc.edu.ar/~francolq/criterios_polaridad.pdf|Etiquetado de polaridad]]   * [[https://cs.famaf.unc.edu.ar/~francolq/criterios_polaridad.pdf|Etiquetado de polaridad]]
Línea 61: Línea 66:
 Implementar, en el clasificador de sentimientos, **cuatro** de las seis posibles mejoras descriptas en las siguientes subsecciones. Para cada mejora, reportar: 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''.   * 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''. 
  
  
Línea 96: Línea 95:
 ==== 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.+Modificar el tokenizador del ''CountVectorizer'' para que además haga stemming o lematización de las palabras.
  
 +Recursos:
   * http://scikit-learn.org/stable/modules/feature_extraction.html#customizing-the-vectorizer-classes   * 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+  * Stemmers: 
 +    * [[http://www.nltk.org/api/nltk.stem.html#module-nltk.stem.snowball|Snowball (NLTK)]] 
 +  * Lematizadores: 
 +    * [[https://spacy.io/|Spacy]] 
 +    * [[http://www.cis.uni-muenchen.de/~schmid/tools/TreeTagger/|Treetagger]] (con [[https://treetaggerwrapper.readthedocs.io/en/latest/|treetaggerwrapper]])
  
  
Línea 116: Línea 120:
  
  
-===== Ejercicio 3: Evaluación Final =====+===== Ejercicio 3: 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|Regresión Logística]] (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''
 + 
 +Documentación: 
 + 
 +  * **[[https://github.com/PLN-FaMAF/PLN-2019/blob/master/notebooks/sentiment/05%20Grid%20Search.ipynb|Caso de estudio: 05 Grid Search]]** 
 +  * [[http://scikit-learn.org/stable/modules/grid_search.html|Tuning the hyper-parameters of an estimator (scikit-learn)]] 
 + 
 + 
 +===== Ejercicio 4: Inspección de Modelos ===== 
 + 
 +Para la regresión logística, haga una inspección de los parámetros internos: 
 + 
 +  - Imprima para cada clase los 10 features con más peso positivo y los 10 con más peso negativo. 
 +  - Haga un breve análisis sobre los features impresos: 
 +    - ¿Tienen sentido en general? 
 +    - ¿Hay features incorrectos, confusos o engañosos? 
 +    - ¿De qué manera se podrían corregir? (no hace falta implementar) 
 + 
 +Documentación: 
 + 
 +  * **[[https://github.com/PLN-FaMAF/PLN-2019/blob/master/notebooks/sentiment/06%20Inspeccion%20de%20Modelos.ipynb|Caso de estudio: 06 Inspeccion de Modelos]]** 
 + 
 + 
 +===== Ejercicio 5: Análisis de Error ===== 
 + 
 +Para la regresión logística, haga un análisis de errores sobre el conjunto de development: 
 + 
 +  * Arme una tabla con todas las instancias mal clasificadas. 
 +  * Ordénelas utilizando algún criterio de relevancia. Ejemplos: 
 +    * Largo del tweet. 
 +    * Probabilidad asignada a la clase errónea. 
 +    * Diferencia entre la probabilidad de la clase errónea y la correcta. 
 + 
 +Seleccione una instancia mal clasificada: 
 + 
 +  * Imprima los features que intervienen en su clasificación, con su respectivos pesos. 
 +  * Pruebe variaciones del texto del tweet, viendo de qué manera afecta las probabilidades. 
 +  * Proponga alguna modificación en el preprocesamiento que pueda mejorar la clasificación de la instancia. 
 + 
 + 
 +Documentación: 
 + 
 +  * **[[https://github.com/PLN-FaMAF/PLN-2019/blob/master/notebooks/sentiment/07%20Analisis%20de%20Error.ipynb|Caso de estudio: 07 Analisis de Error]]** 
 + 
 + 
 +===== Ejercicio 6: Evaluación Final =====
  
   * Seleccionar, del ejercicio anterior, el clasificador que haya dado mejores resultados.   * Seleccionar, del ejercicio anterior, el clasificador que haya dado mejores resultados.
Línea 122: Línea 176:
  
  
-===== Ejercicio (punto bonus): Lexicón de Sentimientos =====+===== Ejercicio 7 (punto bonus): Word Embeddings ===== 
 + 
 +  * Obtener word embeddings pre-entrenados para el idioma castellano. 
 +  * Programar un transformador de scikit-learn que, dado un tokenizador, calcule embeddings de tweets como el promedio de los embeddings de las palabras que lo componen. 
 +  * Incorporar estos features al pipeline de clasificación de polaridad. 
 +  * Entrenar, evaluar y analizar los resultados. 
 + 
 +Recursos: 
 +  * [[https://github.com/scikit-learn/scikit-learn/issues/8978|sklearn issue #8978: Vectorize text based on word embeddings]] 
 +  * Embeddings: 
 +    * [[https://fasttext.cc/|fastText]] 
 +    * [[https://nlp.stanford.edu/projects/glove/|GloVe]] 
 + 
 + 
 +/* 
 +===== Ejercicio 8 (punto bonus): Bolsa de Caracteres ===== 
 +*/ 
 + 
 + 
 +===== Ejercicio 8 (punto bonus): Lexicón de Sentimientos (y Emojis) =====
  
   * Obtener o elaborar un lexicón de palabras con polaridad positiva y negativa del castellano.   * 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.+  * Programar features que incorporen el uso de estas palabras en los tweets. Algunas opciones: 
 +    * Dos features, con conteos de cantidad de palabras positivas y negativas utilizadas. 
 +    * Escalar los valores (usar StandardScaler). 
 +    * Si el lexicón tiene valores de intensidad, usarlos de alguna manera.
   * Agregar estos nuevos features al pipeline (se puede usar FeatureUnion).   * Agregar estos nuevos features al pipeline (se puede usar FeatureUnion).
   * Entrenar, evaluar y analizar los resultados.   * Entrenar, evaluar y analizar los resultados.
Línea 132: Línea 208:
 Documentación: Documentación:
  
 +  * **[[https://github.com/PLN-FaMAF/PLN-2019/blob/master/notebooks/sentiment/08%20Lexicon%20de%20Sentimiento.ipynb|Caso de estudio: 08 Lexicon de Sentimiento]]**
   * Posibles fuentes de lexicones:   * 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://habla.dc.uba.ar/gravano/sdal.php?lang=esp|Spanish DAL: Diccionario de Afectos en Español (Agustín Gravano et al.)]]
Línea 137: Línea 214:
     * [[https://github.com/JoseCardonaFigueroa/sentiment-analysis-spanish/blob/master/data/subjectivity.csv]]     * [[https://github.com/JoseCardonaFigueroa/sentiment-analysis-spanish/blob/master/data/subjectivity.csv]]
     * [[http://www.lsi.us.es/~fermin/ML-SentiCon.zip|ML-SentiCon: A Layered, Multilingual Sentiment Lexicon (English, Spanish, Catalan, Galician, Basque)]]     * [[http://www.lsi.us.es/~fermin/ML-SentiCon.zip|ML-SentiCon: A Layered, Multilingual Sentiment Lexicon (English, Spanish, Catalan, Galician, Basque)]]
-  * [[http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.FeatureUnion.html|FeatureUnion (scikit-learn)]] +    * **[[http://kt.ijs.si/data/Emoji_sentiment_ranking/index.html|Emoji Sentiment Ranking v1.0]]** 
- +  Scikit-learn
- +    * [[http://scikit-learn.org/stable/modules/generated/sklearn.pipeline.FeatureUnion.html|FeatureUnion]] 
-/* +    * [[https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html|StandardScaler]]
-===== 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)]] +
-*/ +
  
 /* /*
materias/pln/2019/practico2.1554145255.txt.gz · Última modificación: 2019/04/01 19:00 por francolq