Articulo 2
Articulo 2
realizado por:
Alberto Calvo Madurga
tutelado por:
Valentı́n Cardeñoso Payo
ii
Índice general
Índice de figuras v
Resumen/Abstract ix
Agradecimientos xi
1 Introducción 1
1.1 Motivación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Objetivos y tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Plan de Trabajo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Estructura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2 Marco Teórico 7
2.1 Emociones y comunicación . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.2 Modelos de emociones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.3 Las Redes Sociales y las emociones . . . . . . . . . . . . . . . . . . . . . 9
2.4 Reconocimiento automático de emociones . . . . . . . . . . . . . . . . . . 10
2.4.1 Selección y extracción de datos . . . . . . . . . . . . . . . . . . . 10
2.4.2 Preprocesamiento: Filtrado y acondicionamiento . . . . . . . . . . 11
2.4.3 Extracción de caracterı́sticas . . . . . . . . . . . . . . . . . . . . . 13
2.4.4 Modelado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.4.5 Diseño del experimento y Técnicas de Validación . . . . . . . . . 16
iii
4 Resultados y Discusión 63
4.1 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
4.2 Discusión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
Bibliografı́a 71
Anexos 75
iv
Índice de figuras
v
vi
Índice de cuadros
vii
3.24 Selección de parámetros con Word2Vec (SkipGram) como extracción de
caracterı́sticas y SVM, Random Forest y Regresión Logı́stica como clasi-
ficadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.25 Tiempos de ejecución selección de parámetros con BoW (TF-IDF) como
extracción de caracterı́sticas y SVM, Random Forest y Regresión Logı́stica
como clasificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
3.26 Tiempos de ejecución selección de parámetros con Word Embeddings (Word2Vec)
como extracción de caracterı́sticas y SVM, Random Forest y Regresión
Logı́stica como clasificadores . . . . . . . . . . . . . . . . . . . . . . . . 58
3.27 Selección de parámetros con BoW (TF-IDF) como extracción de carac-
terı́sticas y SVM, Random Forest y Regresión Logı́stica como clasificadores 59
3.28 Tiempos de ejecución selección de parámetros con BoW (TF-IDF) como
extracción de caracterı́sticas y SVM, Random Forest y Regresión Logı́stica
como clasificadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.29 Selección de parámetros con W2V (Skip Gram) como extracción de carac-
terı́sticas y SVM, Random Forest y Regresión Logı́stica como clasificadores 60
3.30 Tiempos de ejecución selección de parámetros con Word2Vec (Skip Gram)
como extracción de caracterı́sticas y SVM, Random Forest y Regresión
Logı́stica como clasificadores . . . . . . . . . . . . . . . . . . . . . . . . 61
4.1 Validación del clasificador final con BoW con diseño HoldOut estratificado
80/20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.2 Validación del clasificador final con BoW con diseño de validación cruzada
estratificada de 10 folds . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.3 Validación del clasificador final con Word2Vec con diseño HoldOut estra-
tificado 80/20 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
4.4 Validación del clasificador final con Word2Vec con diseño de validación
cruzada estratificada de 10 folds . . . . . . . . . . . . . . . . . . . . . . 65
viii
Resumen
La irrupción de las redes sociales en nuestro dı́a a dı́a como medios de comunicación bási-
cos ha generado un interés creciente por el estudio de la forma de comunicarnos en ellas
y cómo nuestros sentimientos y emociones influyen en esa comunicación. En este trabajo
se presenta la construcción de un sistema de reconocimiento automático de sentimientos,
partiendo de un estudio de los trabajos existentes. De dicho análisis se deriva la estruc-
tura general de resolución de este problema y se detallan las distintas fases diferenciadas.
Inicialmente se consideran las técnicas de Bag of Words y Words Embeddings para la
fase de extracción de caracterı́sticas y los algoritmos de Machine Learning SVM, Ran-
dom Forest y Regresión Logı́stica en una tarea de clasificación supervisada. Se detallan
los procedimientos seguidos en todas las etapas del proceso hasta llegar a construir un
sistema de clasificación de sentimiento en base a la polaridad positiva o negativa.
Palabras clave: análisis de sentimientos, análisis de emociones, machine learning, pro-
cesamiento del lenguaje natural
Abstract
The irruption of social networks in our daily life as basic media has generated a growing
interest in the study of how we communicate in them and how our feelings and emotions
influence that communication. In this paper we present the construction of automatic
feelings recognition system, based on the study of existing works. From this analysis,
the general structure for solving this problem is derived and the different phases are
detailed. Initially the techniques of Bag of Words and Words Embeddings for the feature
extraction phase and the Machine Learning algorithms SVM, Random Forest and Logistic
Regression are considered in a supervised classification task. The procedures followed in
all stages are detailed until a sentimental classification system is built based on positive
or negative polarity.
Keywords: sentiment analysis, emotion analysis, machine learning, natural languaje
processing
ix
x
Agradecimientos
Me gustarı́a aprovechar la elaboración de este trabajo que supone el fin de una etapa
llena de aprendizaje y buenas experiencias. Agradecer a mis compañeros de carrera por
haber compartido este camino intenso a mi lado, apoyándonos y ayudándonos cuando la
situación lo ha requerido.
Por supuesto agradecer a mis padres, mi hermana y mi familia que son los que me
han inculcado los valores del esfuerzo que me han hecho llegar hasta donde estoy ahora
mismo, sin ellos nada de esto serı́a posible.
Para finalizar, agradecer a mi grupo de amigos de siempre, Jugones. Alguien dijo una
vez que “Los amigos, son la familia que elegimos”, no podrı́a estar más de acuerdo con
esta afirmación, sin su apoyo moral constante, estos años tan intensos se hubieran hecho
el doble de complicados.
xi
xii
Capı́tulo 1. Introducción
1.1 Motivación
No es ninguna sorpresa decir que las redes sociales han invadido nuestro dı́a a dı́a.
Estos sitios facilitan la comunicación entre las personas, intercambiando información vı́a
imágen, vı́deo o texto. Con la inmensa cantidad de información compartida en estas
plataformas, ¿cómo de útil serı́a el disponer de un sistema que pudiera reconocer el
estado emocional o las intenciones de los usuarios que emiten los mensajes en las redes
sociales? Esta tarea se denomina reconocimiento de sentimientos y emociones y es parte
del procesamiento del lenguaje natural.
Está claro que un sistema construido podrá realizar la tarea de procesamiento del
lenguaje natural con un gran acierto, pero por motivos obvios, no toda la información se
puede captar de forma acertada. La forma de expresarse del ser humano es cambiante y
está llena de detalles que no siempre se pueden procesar correctamente: sarcasmo, ironı́as,
coloquialismos, etc. Esto aumenta sustancialmente la dificultad de construir un sistema
de reconocimiento automático de emociones.
1
asignaturas de ambas carreras, como por ejemplo, algoritmos de aprendizaje automático
(Minerı́a de Datos y Técnicas de Aprendizaje Automático), tratamiento del lenguaje
(Gramática y Lenguajes Formales), visualización de datos (Computación Estadı́stica o
Estadı́stica Descriptiva) o gestión y organización de proyectos (Planificación y Diseño de
Sistemas Computacionales).
Del mismo modo, este proyecto junto con el Trabajo de Fin de Grado de Estadı́stica,
supone el primer gran trabajo “individual” realizado, con las ganas y el ánimo que esto
supone para realizar un buen proyecto del que quizás en un futuro no muy lejano se pueda
utilizar en el ámbito laboral.
Las tareas que se van a realizar durante el transcurso del trabajo son:
• Estudio del problema: Una primera tarea de estudio del contexto en el que surge
el problema, junto con un análisis de los trabajos en el área y la forma en que se
aborda la resolución del mismo.
2
1.3 Plan de Trabajo
En esta sección se exponen las tareas relativas a la gestión del proyecto ya que la correcta
gestión de los esfuerzos es una tarea crı́tica y determinante en el desarrollo cualquier
proyecto, y en consecuencia, del cumplimiento de sus objetivos.
El proyecto tiene lugar como Trabajo de Fin de Grado en el Doble Grado de Ingenierı́a
Informática y Estadı́stica de la Universidad de Valladolid. Tiene una carga de 12 créditos
que equivalen a 300h de trabajo. El proyecto, si bien fue acordado tiempo antes, se
considera que se inicia el 24 de febrero con una finalización estimada del 1 de julio de
2020. Si nos ajustáramos a estos plazos, se contarı́a con 18 semanas, donde se estiman
15-20h a la semana de trabajo que equivaldrı́an a 3-4h diarias si excluyéramos los fines
de semana como dı́as laborables.
Una vez se han aclarado los objetivos y tareas a lograr en el proyecto, se define un plan
de actuación que irá acompañado de dos diagramas de Gantt que ilustran la planificación
inicial 1.1 y el esfuerzo real del trabajo 1.2.
Planificación de tareas
3
suponer. Por tanto lo primero que haremos será obtener los datos con los que trabajar.
Inicialmente se buscó un conjunto de datos formado por tweets escritos en castellano,
que fuera relativamente actual y sobre todo que estuviese etiquetado con respecto al
sentimiento o emociones que pretenda transmitir. Ante la negativa de esto, se dota de
una mayor importancia a esta fase realizando la extracción de los datos directamente de
Twitter mediante sus APIs y elaborando un sistema de etiquetado basado en léxicos que
nos permita clasificar los tweets extraı́dos.
Con el objetivo de analizar por qué existen estos tweets que podrı́amos decir que
son nulos en lo que a sentimiento explı́cito se refiere, se realizar una tarea de análisis
descriptivo del conjunto de datos final con el que se va a trabajar, indagando en las
diferencias entre los tweets que han podido ser etiquetados con respecto a alguna de las
dos polaridades y los que no. En dicha tarea diferenciaremos los tweets “no nulos” de los
tweets “nulos” para analizar en ellos caracterı́sticas como la longitud de los mismos, los
términos utilizados en base al lenguaje español y los emojis utilizados.
Estas dos fases están unidas mediante un proceso de selección de parámetros que
buscan la solución más óptima de cara a un experimento de validación cruzada de 5
folds con el conjunto de entrenamiento. El conjunto de entrenamiento ha sido construido
como una partición estratificada 80/20 del conjunto de datos preprocesado sin los tweets
etiquetados como “neutros”.
4
Con todo el análisis ya realizado, se pretende explicar de la manera más didáctica e
ilustrativa posible al lector como se ha procedido. Mostrando los archivos y programas
utilizados de manera que se pueda replicar el trabajo y continuar con alguna de las
posibles ampliaciones de trabajo que se proponen.
Planificación inicial
El diagrama 1.1 muestra la planificación inicial del proyecto. Se muestran las tareas a
abordar divididas en tres fases diferenciadas: análisis del problema, desarrollo del expe-
rimento y elaboración de la memoria final.
Durante las dos primeras fases del proyecto, existe una tarea de documentación y
refinamiento constante, pero se define claramente puntos de finalización que deben ser
cubiertos antes de avanzar de fase. A continuación se muestra el esfuerzo final con los
respectivos comentarios de las modificaciones ocurridas.
Esfuerzo real
Tal y como era de esperar, la planificación inicial se ha visto alterada en múltiples puntos
ya que es improbable el seguimiento exacto de la misma. Esto se debe tanto a retrasos en
la ejecución de las tareas como a la aparición de imprevistos que requieren una adaptación
dinámica de la planificación.
5
Figura 1.2: Esfuerzo real del proyecto
1.4 Estructura
La memoria del trabajo contiene cinco capı́tulos en los que se desarrollan las partes fun-
damentales del trabajo. En la primera parte integrada por los capı́tulos 1 (Introducción)
y 2 (Marco Teórico), se presenta la introducción y el marco teórico en el que surge el
proyecto.
6
Capı́tulo 2. Marco Teórico
Aristóteles
Existen múltiples formas en las que se producen estos intercambios, desde vı́a textual,
oral o incluso simplemente con las expresiones faciales. Como es lógico pensar, todas
estas variantes comparten caracterı́sticas comunes, y a su vez, cada una tiene su campo
de estudio con una serie de caracterı́sticas especı́ficas. Con la intención de realizar un
trabajo acotado a un terreno fijo, nos centraremos en el análisis textual de los sentimientos
y emociones.
Ciertamente existe una gran variedad de tipos de documentos, desde el ensayo elabo-
rado tras la reflexión y el estudio, a la comunicación espontánea y casi instantánea de una
idea, sentimiento, opinión, crı́tica o comentario a través de una red social. Con la irrup-
ción de la tecnologı́a en la era en la que vivimos, se presentan con mayor facilidad formas
de comunicación que no hace sino facilitar la compartición de nuestros pensamientos y
puntos de vista con el mundo.
Esta gran capacidad de conectividad proporcionada por las redes sociales, nos faci-
lita la posibilidad de generar un valor informativo colectivo. Pierre Levy introduce por
primera vez en los años 1990s el concepto de inteligencia colectiva [3] basándose en que
7
gracias a la inteligencia humana combinada con el razonamiento reflexivo, el ser humano
utiliza el lenguaje como esquema para dar argumentos y producir resultados. Con este
concepto en mente, serı́a de gran utilidad saber si se puede desarrollar un nuevo tipo de
instrumento para visualizar el estado de la realidad. ¿Podrı́amos tener un sistema que ob-
servara la realidad fı́sica y pudiera proporcionar una visión totalmente fidedigna mediante
la inteligencia colectiva de los usuarios de las redes sociales?, ¿que propiedades deberı́a
poseer dicho dispositivo?, ¿como de susceptible serı́a para la manipulación intencionada
de la realidad?, ¿que armas tendrı́a para mitigar estos efectos?
Si pudiéramos conseguir este ideal de dispositivo, la intervención del ser humano es-
tarı́a ayudando a los algoritmos a esquivar la desfiguración de la realidad, ya que estos
no tienen la habilidad de reconocer cuando una actividad se corresponde a un compor-
tamiento anormal. A diferencia de los sensores artificiales, los humanos podemos resumir
nuestras observaciones de forma que nos permiten crear nuestra propia interpretación de
la realidad. Si bien estas interpretaciones pueden estar sesgadas o ser subjetivas, el obje-
tivo es precisamente conseguir que mediante el instrumento desarrollado, estos desafı́os
queden vencidos.
Queda por tanto planteada la gran problemática del trabajo, que es conseguir en-
tender cómo poder llegar a elaborar sistemas que predigan o clasifiquen textos, en este
caso provenientes de las redes sociales, en base a los sentimientos o emociones que estos
pretenden transmitir.
Después de introducir el contexto en el que surge este análisis, debemos entender “qué”
es lo que realmente buscamos. Si nos referimos el tı́tulo encontramos dos conceptos clave
como son: Emoción y Sentimiento. Aunque en ocasiones estos dos términos son tratados
como iguales, la detección de emociones es una tarea más laboriosa que la detección de
sentimientos. En lı́neas generales podemos decir que un ’Sentimiento’ es el efecto de una
’Emoción’ (Broad [5]). De esta forma ’Contento’ o ’Triste’ son ejemplos de emociones
y ’Positivo’ y ’Negativo’ son los sentimientos asociados correspondientes. Sabiendo esto
se ve más claro que la detección de sentimientos se centrarı́a más bien en conocer la
polaridad de la actitud de una persona hacia otra persona, evento, cosa, etc., mientras
que la detección de emociones trae consigo la tarea de definir un modelo de emociones
acorde con teorı́as psicológicas asociadas. Estos modelos se dividen en dos grandes grupos:
• Categóricos: En los que existe una lista finita de categorı́as de emociones discretas
unas de otras. Los modelos utilizados tienen un número de emociones descritas
notablemente inferior a los modelos dimensionales.
• Dimensionales: En los que se definen unas pocas dimensiones con sus parámetros
y cada emoción está asociada a unos valores concretos de estas. Estos modelos son
más complejos y por tanto admiten unas estructuras más elaboradas.
8
A lo largo de los años se han elaborado distintos modelos que pretenden explicar cómo
se clasifican las emociones de distinta manera y basándose en diferentes experimentos o
teorı́as psicológicas. De esta manera se han construido múltiples modelos que presentan
estructuras más o menos complejas como, por ejemplo, el cubo de las emociones de Lov-
heim [6] (modelo dimensional basado en las interacciones de nuestros neurotransmisores;
dopamina, noradrenalina y serotonina), modelo de Shaver [7] (modelo categórico que es-
tablece una jerarquı́a en forma de árbol donde encontramos varios niveles de emociones),
modelo de Ekman [8] (modelo categórico que defiende que el ser humano reacciona ante
los eventos mediante seis emociones básicas) o la rueda de las emociones de Plutchik
[9] (modelo dimensional que combina ocho emociones básicas y la forma en la que se
relacionan mediante la intensidad de cada una). Más modelos se han construido de forma
independiente o utilizando como punto de partida alguno de los ya creados y es evidente
pensar que en los trabajos realizados en los últimos años, se puedan adecuar estos mode-
los al experimento que se va a realizar. Por tanto queda claro que la elección del modelo
condiciona la elección de las técnicas a utilizar y por ende el desarrollo del prototipo.
Las redes sociales son estructuras formadas en Internet por personas u organizaciones
que se conectan a partir de intereses comunes. A través de ellas, se crean relaciones
entre individuos o empresas de forma rápida, sin jerarquı́a o lı́mites fı́sicos. En estas
estructuras se pueden representar como nodos a los individuos que la forman, y con
lı́neas, las relaciones formadas entre ellos creando ası́ una estructura de red.
Las redes sociales sirven como instrumentos que son utilizados por las personas para
expresarse ante eventos de la vida real. Estas expresiones pueden suceder de forma directa
o indirecta mediante textos, discursos, imágenes o incluso gestos. El estudio de estos
pensamientos para detectar las distintas actitudes o emociones es una tarea laboriosa
y es lo que acontece este trabajo. Es especialmente interesante analizar la red social
Twitter, que es quizás la plataforma más popular de micro-blogging con más de 500M
de tweets escritos cada dı́a.
Twitter es especial dado que restringe el número de caracteres máximo por tweet
(entrada básica de texto). Esto lleva al usuario a expresarse utilizando un mayor número
de coloquialismos, expresiones informales, abreviaturas o incluso emoticonos. Ya podemos
observar como cambiarı́a el análisis si lo hiciéramos con otra variante de documentos
textuales. Los usuarios utilizan esta plataforma para volcar sus opiniones y sentimientos
acerca prácticamente cualquier cosa, esto hace idóneo el análisis de esta red social dado
el gran volumen de información que proporciona y el amplio abanico de posibilidades de
trabajo en él.
9
2.4 Reconocimiento automático de emociones
Sea cual sea el tipo especı́fico de textos con el que vayamos a trabajar, el análisis a
realizar estará estrechamente guiado por la existencia o no de un etiquetado de estos con
respecto al sentimiento o emociones que cada texto tiene asociado. Este etiquetado puede
reducirse a la asignación de uno de los tres posibles valores:1 si el sentimiento es positivo,
0 si es neutral y -1 si es negativo, o ser complejo como para que existan variables con
distintas emociones (tristeza, enfado, felicidad...) y para cada una tener una probabilidad
de que el texto la contenga.
Una vez se decide el tipo de textos con el que se va a trabajar, existen varias posibi-
lidades de obtención de los mismos. En general podrı́amos decir que existen dos formas:
obtener unos datos que ya hayan sido extraı́dos y organizados por otra persona o realizar
la extracción por nuestra cuenta. Por su gran aportación a este campo vamos a explicar
las dos formas de obtención de datos ayudándonos de la red social Twitter.
10
En muchas ocasiones podemos encontrar que alguien haya elaborado ya un conjunto
de datos preparado para trabajar directamente con el. Ejemplo de trabajos que han
creado su propio corpus directamente de Twitter serı́an: Pak A, Paroubek P (2010)
[10] crean un corpus de tweets diferenciando tres grupos: textos conteniendo emociones
positivas, textos conteniendo emociones negativas y textos de carácter objetivo que no
expresan emociones; Dini L, Bittar A (2016) [11] que crean dos corpus bajo la asunción
de que cada tweet tiene una connotación emocional o Mohammad M, Bravo-Marquez
F (2017) [12] que crean cuatro datasets etiquetados con intensidades para las emociones
básicas de enfado, miedo, alegrı́a y tristeza.
• Eliminación de las palabras vacı́as (stop words): Estas palabras como pueden
ser “de”, “el” o “y” son palabras que aparecen con mayor frecuencia y no aportan
un significado semántico especı́fico.
11
• Stemming: Los algoritmos de stemming buscan cortar el final o el principio de una
palabra teniendo en cuenta una lista de prefijos y sufijos comunes que se pueden
encontrar en una palabra conjugada. En la figura 2.1 se muestran varios ejemplos
que lo ilustran. Este corte en las palabras no siempre se realiza de manera correcta
y es que este enfoque tiene limitaciones.
Emojis y emoticonos
Los emoticonos son pequeños dibujos creados con signos ortográficos que a menudo se
leı́an inclinando la cabeza como :) o :( y que evolucionan ya en el siglo XXI hacia los emo-
jis que son pequeñas figuras dibujadas con un valor simbólico. Estos dibujos han tomado
una gran relevancia en las redes sociales por su simplicidad y facilidad para transmitir
una idea, además tienen el valor de la universalidad, ya que se entienden por personas
de diferentes culturas y lenguas. Como hemos comentado, estos caracteres son casi ex-
clusivos de las redes sociales dada su naturaleza relajada. En un análisis de sentimientos
en las redes sociales se podrı́a tomar la decisión de eliminar directamente los emoticonos
12
o emojis para facilitar la tarea, sin embargo ejemplos de trabajos nos demuestran resul-
tados significativos como Shisa M.O, Ayvaz S (2017) [13] que incluyendo emojis en
su análisis de sentimientos en Twitter encuentran unos valores mayores para las pun-
tuaciones de los sentimientos constatando que hay una predisposición a utilizar emojis
para sentimientos positivos. También Satapathy et al (2017) [14] con este proceso de
normalización consigue mejorar su sistema de clasificación de sentimientos por un 4 %.
Normalización
Crudo Normalizado
buenass buenas
tq te quiero
cc con copia
:) sonrisa
:( tristeza
fb facebook
13
la palabra “felicidad” en un texto, la emoción asociada va a ser “felicidad”, y viceversa.
Existen multitud de impedimentos que hacen que sea necesario un gran trabajo en esta
fase del sistema para no caer en análisis erróneos.
Una vez hemos adecuado y limpiado los datos en crudo para darle un formato con el
que podamos empezar a trabajar, es el momento de analizar las palabras del texto. El
mapeo de estos datos textuales a vectores con valores numéricos reales con los que los
algoritmos puedan trabajar es lo que denominamos extracción de caracterı́sticas.
Una de las técnicas más simples para representar numéricamente textos es la Bolsa
de Palabras (Bag of Words, BOW). La Bolsa de Palabras consiste en generar un listado
completo de todas las palabras que aparecen en el corpus lingüı́stico, de forma que para
cada texto en particular, se crea un vector numérico asociado donde para cada palabra
del corpus se marca con un 1 si dicha palabra está presente en el texto y con 0 si no
lo está. Para realizar esta técnica se define el concepto de corpus lingüı́stico, que es el
conjunto total de textos con el que trabajaremos para desarrollar nuestro dispositivo.
Una vez generados los vectores para cada texto individual, lo más común es la técnica
de Frecuencia de Términos-Frecuencia Inversa de Documentos (Term Frequency-
Inverse Document Frequency, TF-IDF). Esta métrica asocia para cada término un valor
numérico que expresa como de relevante es dicha palabra para el documento con respecto
al conjunto de todos ellos.
La principal desventaja de la técnica BOW es que ignora el orden y, por tanto, el con-
texto en el que una palabra aparece en el documento y para el procesamiento de lenguaje
natural, mantener este contexto pudiera tener una gran importancia. Para solventar este
problema, se puede utilizar otro enfoque denominado Word Embedding. Esta técnica,
pretende crear una representación de las palabras donde las palabras con un significado
similar se asocian a vectores que resultan próximos en un espacio vectorial de elevado
número de dimensiones.
Word2Vec está desarrollado por Google [Word2Vec] y utiliza una red neuronal super-
ficial que dado un corpus, analiza las palabras y trata de usar cada una para predecir
14
que palabras serán vecinas, es decir, que palabras están asociadas a ella o son simila-
res. Existen dos variantes de arquitectura distintas: continuous bag-of-words (CBOW) y
continuous skip-gram. Dependiendo de la tarea que se quiere realizar, se tiene que tener
en cuenta la arquitectura a utilizar, ası́ como los parámetros que se deben tunear. Los
parámetros más importantes son el tamaño de los vectores de las palabras y la ventana,
que es la distancia máxima entre la palabra actual y la palabra predicha dentro de un
mismo tweet. Según las notas del autor [Google Code], CBOW produce resultados más
rápidos pero skip-gram se adapta mejor a las palabras no frecuentes.
Existen muchas técnicas o algoritmos que se pueden aplican en esta fase dependiendo
del objetivo que se persigue [15]. En este apartado hemos explicado algunas de las más
comunes, pero la finalidad de todas es adaptar la información para que pueda servir como
entrada para el modelo o modelos que vamos a crear en nuestro sistema.
2.4.4 Modelado
15
resto de los datos.
Para análisis supervisado, se utiliza un conjunto de datos etiquetado con las emociones
tanto en la tarea de entrenamiento como en la de prueba. Los ejemplos más comunes
podrı́an ser Naive Bayes, SVM o Árboles de decisión.
Ya podemos observar que serı́a interesante combinar las distintas técnicas de alguna
forma para obtener lo mejor de ambas. En este contexto surgen los métodos hı́bridos
que combinan distintas técnicas para alcanzar el máximo nivel de precisión posible. Estas
técnicas pueden no ser únicamente de ML, si no que pueden ser basadas en reglas, basadas
en palabras clave, basadas en léxicos, etc.
Una vez elegido el modelo, se deberá diseñar cuidadosamente el experimento para entrenar
y validar dicho modelo a partir de los datos disponibles. Dependiendo de la cantidad y
calidad de los datos de los que se disponga, se pueden utilizar varias técnicas de validación.
Si contáramos con una máquina con una mayor potencia computacional, no tendrı́amos
problema con respecto a la cantidad necesaria, ya que se podrı́a extraer directamente
de Twitter el tamaño deseado de conjunto de datos, sin embargo, este no es el caso.
En un experimento idóneo tendrı́amos suficientes datos como para separar tres conjuntos
diferenciados: T el conjunto de entrenamiento, V el conjunto de validación y P el conjunto
de prueba. Cada uno serı́a lo suficientemente grande y estarı́a seleccionado de forma
aleatoria.
16
del experimento podemos tener: Holdout estratificado, que consiste en dividir de forma
aleatoria los datos en 2/3 para entrenamiento y 1/3 para prueba. Además para asegurar
que las muestras sean representativas, se estratifica para que cada clase esté representada
con aproximadamente las mismas proporciones en los dos subconjuntos. En nuestro caso
esta estratificación la podrı́amos hacer si contáramos con un conjunto de datos etique-
tado. Este procedimiento se podrı́a repetir varias veces para reducir la variabilidad que
representa la partición (Holdout Repetido).
Aun con la repetición, este procedimiento no es óptimo ya que los diferentes conjun-
tos de prueba se solapan. Para evitar este problema podemos efectuar una Validación
cruzada (XV). Consiste en repartir los datos en k subconjuntos del mismo tamaño.
Cada subconjunto será utilizado como prueba y el resto para entrenamiento. De nuevo
podemos tanto estratificar los subconjuntos como repetir varias veces este proceso. Con
XV conseguimos un diseño muy poco variable pero a su vez mucho más costoso. Depen-
diendo del volumen de datos con el que trabajemos y la complejidad del modelo, será
necesario tomar una decisión que consiga un compromiso entre funcionamiento y tiempo
de ejecución.
Con respecto a la forma de evaluarla calidad del experimento, la forma clásica para
evaluar el funcionamiento de un modelo cuya tarea es la clasificación, es la tasa de error
sobre el conjunto de prueba. Esta se calcula como el porcentaje de predicciones correctas
sobre el total de predicciones realizadas. Esta medida de validación es buena, pero rea-
liza la suposición de que los costes de los errores son los mismos y la distribuciones de
clases están equilibradas, y dependiendo de la tarea especı́fica que se lleve a cabo, esto
podrı́a ser fatal. Supongamos que estamos realizando una tarea de predicción de tweets
pertenecientes a terroristas. Es obvio pensar que no es igual de importante predecir de
forma errónea un tweet como peligroso, como no predecir un tweet peligroso.
TP TP precision · recall
precision = ; recall = ; F1 = 2 · (2.4.1)
TP + FN TP + FN precision + recall
La validación, por tanto, es una tarea que proporciona criterios objetivos para com-
17
probar el funcionamiento de nuestros modelos. Esta tarea da pie a posibles refinamientos
que mejoren la calidad del experimento.
18
Capı́tulo 3. Desarrollo del
experimento
3.1 Introducción
Este capı́tulo pretende proporcionar una solución a la problemática planteada del análi-
sis de emociones y sentimientos. Se exponen los pasos conceptuales especı́ficos seguidos
junto con las herramientas utilizadas y los razonamientos que nos han llevado a elegir o
desestimar las técnicas.
Además se realiza una doble tarea de detallar los programas y archivos necesarios para
la realización del sistema, con las consiguientes explicaciones sobre su orden de ejecución
y funcionamiento. La parte más técnica de puesta en marcha se puede ver en el apéndice
C.
La figura 3.1 muestra la arquitectura del proceso de elaboración del sistema de clasifica-
ción de tweets, cuyas fases se detallan y explican en las siguientes secciones.
Si bien podemos encontrar multitud de conjuntos de datos ya elaborados que nos permitan
comenzar a elaborar nuestro sistema, se toma la decisión de realizar la extracción de los
19
Figura 3.1: Arquitectura del Sistema de clasificación de tweets
• Los conjuntos de datos que nos pudiéramos encontrar, también han sido extraı́dos
por otra persona de alguna manera, como por ejemplo siguiendo una temática
especı́fica o recogiendo todos los tweets publicados por un conjunto de personas
previamente seleccionado. Este rango de especificidad de los datos es una variable
que podrı́amos necesitar tener controlada por si queremos apuntar nuestro análisis
en una dirección especı́fica.
• Los conjuntos de datos, con ciertas excepciones, cuentan con un grado de an-
tigüedad. Esto no es necesariamente un problema, sin embargo dada la naturaleza
cambiante de las redes sociales, ya que constantemente se generan nuevas formas de
expresarse siguiendo las tendencias, nos convendrı́a contar con un conjunto de datos
actualizado. Además sabiendo que nos vamos a centrar en la red social Twitter, en
Septiembre de 2017 ya se empezó a testear el aumento de caracteres lı́mite de 140
a 280, por lo que puede ser que solo nos valgan conjuntos posteriores a esa fecha.
• Para completar el último punto, cuando se extraen manualmente los datos con los
que se van a trabajar, ganas el poder decidir que es lo que quiero y que es lo que
no. Las Redes Sociales son un reflejo de la realidad, y por tanto las tendencias se
actualizan constantemente.
Una vez hemos tomado la decisión de extraer los datos por nuestra cuenta y analizando
las posibilidades de como realizar esta tarea, se decide utilizar la API de Twitter. Las
API son la forma en la que los programas informáticas realizan entre si solicitudes de
20
información. La API de Twitter ofrece un amplio acceso a los datos públicos de la red
social.
El primer paso que tenemos que realizar para acceder a la API es registrar una apli-
cación, que en este caso va destinada a la extracción de un conjunto de tweets del que
se van a basar nuestros análisis. Este paso se puede realizar desde su página web de-
veloper.twitter.com/en/docs y tras rellenar la información necesaria te dará unas claves
de autenticación con las que poder acceder a los servicios de las API. Estas claves son:
consumer key, consumer secret, access token y access token secret.
Una vez hemos completado esta parte, la extracción de los datos la haremos mediante
Tweepy, que es una librerı́a de Python para acceder a la API de Twitter. El programa
twitter scrapper.py será el encargado de realizar la tarea de extracción de los datos. Lo
primero que tenemos que hacer es configurar nuestra cuenta para poder acceder a la API
correctamente, para ello:
2. Proporcionar nuestro token de acceso para poder trabajar con la API mediante
el método set access token, que recibirá nuestro token de acceso y su clave (ac-
cess token y access token secret).
3. Una vez tenemos la configuración hecha bajo el nombre de auth, crearemos una
instancia de la clase “API” a la que le pasaremos la configuración como parámetro
y con la que comenzaremos a trabajar.
Para comenzar la extracción de los tweets tendremos que crear un Cursor que itera a
través de timelines, listas de usuarios, mensajes... Este Cursor contiene muchos paráme-
tros a configurar. Como parámetro principal se le indica que lo que va a iterar es una
colección de tweets que coincidan con una búsqueda especı́fica.
La situación actual extraordinaria que estamos viviendo a Marzo, 2020 me lleva a que
los datos extraı́dos estén relacionados con el Covid-19. Esto se consigue pasando como
argumento el método api.search donde le indicamos que queremos tweets que contengan
la palabra Covid sin contar los retweets (q=“Covid -filter:retweets), que estén escritos
en español (lang=“es”) y que puedan tener hasta 280 caractéres correspondientes a la
extensión de los caracteres lı́mite previamente comentada (tweet mode=“extended”).
Nuestro iterador recoge objetos “Tweet” que contienen muchos atributos como pueden
ser el texto, su identificador, el identificador del usuario, la fecha en la que se escribió,
21
los hashtags incluidos etc. Nosotros queremos recoger simplemente el texto escrito, es
decir, el “Tweet” propiamente dicho. Para almacenar esta información se construye un
DataFrame ayudados por una de las librerı́as más comunes en Python, Pandas. A lo
largo del trabajo se utilizará en muchas fases dada su facilidad de uso, flexibilidad y
rapidez en las tareas de análisis de datos.
Uno de los problemas iniciales que nos encontramos es que Twitter limita las peti-
ciones por ventanas. Cada ventana consta de 15 minutos y en cada ventana se pueden
realizar 15 peticiones, por lo que para poder conseguir solucionar este problema podemos
configurar un parámetro de nuestra instancia de la clase API que es wait on rate limit,
que activándolo, permite esperar automáticamente en cada ventana para poder hacer las
peticiones.
Gracias a este parámetro podemos automatizar la extracción de los datos que nos ha
llevado entre dos y tres horas en completar la tarea. Es por esto que almacenaremos los
conjuntos de datos en un archivo externo que podremos cargar y descargar en cualquier
momento y el cual a partir de ahora nos referiremos como tweet15k.csv
Una vez extraı́do el conjunto de datos con el que vamos a trabajar, podemos ver antes
de comenzar a preprocesarlo la pinta que tiene.
Observamos elementos clásicos de los mensajes de las redes sociales, y más especı́fi-
camente de Twitter, que merecen un tratamiento especial, como menciones, hashtags,
22
palabras mal escritas o emojis. No debemos perder de vista que esta etapa está destinada
a conseguir que los datos estén correctamente preparados como para que los algoritmos
de extracción de caracterı́sticas puedan trabajar con ellos.
Esta fase del proceso está cubierta por el programa preprocessing data.py que contiene
una función preprocessing tweet es() que recibe una cadena de caracteres, es decir un
tweet individual, y aplica todas las técnicas que se describen a continuación en orden.
Para esta etapa es fundamental el uso de las expresiones regulares, que son las
que nos van a ayudar a identificar patrones que deseamos eliminar o modificar. Para
ello utilizaremos el módulo re de Python que está especı́ficamente destinado al trabajo
con expresiones regulares. La función re.sub() recibe dos parámetros principalmente: el
primero es el patrón que vamos a buscar y el segundo es por lo que la vamos a sustituir. En
caso de dejar este segundo parámetro vacı́o, estarı́amos simplemente eliminando aquellas
cadenas que coincidan con el patrón indicado. Los pasos seguidos son por tanto:
• Eliminación de URLs:
Es común que un tweet lleve consigo un enlace a una página externa. Esto no nos
sirve en nuestro análisis, y por tanto, lo eliminaremos. Son enlaces válidos aquellos
que comienzan por www., https:// o http:// y terminan con el primer espacio que
se encuentre.
text=re.sub('\n','',text)
• Eliminación de menciones:
text=re.sub('@\s','@',text)
text=re.sub('(@[^\s]+)|(w/)', '', text)
23
• Eliminación de Hashtags
Los hashtags son una cadena de caracteres formada por una almohadilla (#) pre-
cedida de caracteres que no sean un espacio. En las redes sociales se utilizan para
representar temas. De esta forma, los usuarios pueden indicar que están hablando
sobre algo incluyendo un hashtag relacionado.
Una de las posibilidades planteadas para la extracción, era haber hecho la búsqueda
por hashtags, que se podrı́a utilizar asociado a la lista de tendencias de temas en
Twitter. Esto se podrı́a plantear como una posible ampliación del trabajo.
Un hashtag si que incluye información valiosa, por lo que únicamente se elimina es
la almohadilla-
signos_puntuacion=string.punctuation+'¿¡'
text=[char for char in text if char not in signos_puntuacion]
text=''.join(text)
text = text.lower()
text=re.sub('covid19','',text)
text=re.sub('covid 19','',text)
text=re.sub('covid','',text)
text=re.sub('coronavirus','',text)
24
El proceso en general se aplica recorriendo el conjunto de datos y aplicando tweet a
tweet todas las técnicas. El orden está definido por razones evidentes como la que hemos
explicado refiriéndonos a los signos de puntuación.
Vamos a utilizar la liberı́a spacy, que es una biblioteca para procesamiento avanzado
de lenguaje natural. Incluye modelos preentrenados para predecir etiquetas PoS (Part of
Speech), dependencias sintácticas o entidades propias. Esta librerı́a proporciona modelos
para muchos lenguajes, de entre ellos, el castellano. El modelo que vamos a utilizar se
denomina es core news sm. Este modelo es una Red Neuronal Convolucional multitarea
entrenada con los corpus AnCora, que contiene 500k palabras procedentes de textos
periodı́sticos, y WikiNER, que utiliza la Wikipedia y DBpedia para detectar entidades
propias a nivel de palabra (Londres, Andrés Martı́nez, Imperio Romano...). En definitiva,
utilizaremos esta biblioteca para generar el lema de cada término individual resultante
del preprocesamiento inicial de los datos.
Términos Completo
En @elconfidencial: Islas contra Penı́nsula: la guerra del verano covid
Tweet Original
entre los principales destinos turı́sticos https://t.co/4XUQzBmsfX,
Tweet Preprocesado [“islas”,“penı́nsula”,“guerra”, “verano”,“principales”,“destinos”,“turı́sticos”]
Tweet Lematizado [“isla”,“penı́nsula”,“guerra”, “verano”,“principal”,“destino”,“turı́stico”]
En la tabla 3.2, se muestran los tiempos de ejecución para la fase del preprocesado
aplicada al conjunto de datos de 15000 tweets diferenciando entre aplicar lematización o
no.
25
3.5 Etiquetado de los tweets
Si bien ya hemos preprocesado los datos para darle un mejor formato, no los tenemos
etiquetados con respecto al sentimiento que pretenden transmitir. Esto es un problema, ya
que para la posterior fase en la que entrenaremos los modelos de clasificación, necesitamos
saber a que clase pertenece cada tweet, y por tanto, es necesaria una tarea de etiquetado
de los datos. Explorando las técnicas existentes, nos encontraremos múltiples aplicaciones
o paquetes que podrı́an servirnos, pero además del etiquetado, hacen todo el proceso de
análisis de un texto (extracción de caracterı́sticas y modelado) con un par de órdenes o
clicks y esa no es la finalidad del trabajo. Construiremos un sistema de etiquetado con el
que clasificar nuestros datos de una forma lo suficientemente precisa como para asumir
que esas etiquetas sean la realidad de los tweets.
Finalmente se muestra una relación del esfuerzo de ejecución que ha llevado esta fase
con el objetivo de resaltar la importancia de la misma.
Listado de léxicos
26
Terminos Tamaño
Positivos 1555
Negativos 2720
Total 4275
• Emoji Sentiment Ranking v1.0 [20]: Léxico de emojis elaborado a partir del
etiquetado por parte de 83 personas de 1.6 millones de tweets como positivo, neu-
tral o negativo en 14 lenguajes europeos. Un 4 % de los tweets contenı́an emojis
y finalmente, se genera el primer léxico de sentimientos de emojis compuesto por
los 751 emojis más frecuentes utilizados. Además sus creadores constatan que no
se observan diferencias significativas entre los rankings de los emojis entre los 13
lenguajes, por tanto, se propone este ranking como un recurso para el análisis de
sentimientos independiente del lenguaje europeo.
Para cada emoji obtenemos información variada de donde nos quedaremos: unicode
codepoint, que es el código identificativo del emoji, occurences, que es el número de
apariciones total del mismo, y pos, neg y neut, que contienen el número de veces
que han aparecido en tweets anotados como positivos, negativos o neutros.
27
inferiores se ha revisado una muestra aleatoria representativa de cada uno de los
niveles de forma que se garantice un error muestral menor al 5 % en la estimación de
proporción de elementos correctos. Los resultados de las pruebas que se efectuaron
son los siguientes
Cuadro 3.4: Estimación del porcentaje de lemas con la polaridad correcta (Prec.) y número
de lemas totales (Tam.) de cada una de las capas del lexicon ML-SentiCon
En la versión actual disponible, varı́an un poco los números, ya que no son 11918
si no 11542 los elementos incluidos. De ellos 5568 tienen polaridad positiva y
5974 negativa, por lo que observamos una proporción casi igual de un 49.3 % de
tasa positivo/negativo. Como nosotros vamos a trabajar a nivel de palabra y no
de palabra o expresión, tendremos que reducir el léxico a nuestras necesidades.
Además existen lemas repetidos, de los que nos quedaremos con el primero que
aparece en la lista, ya que corresponde a las capas más elevadas done las restricciones
son más duras. Tras realizar estas dos tareas, nos queda un léxico final con 8565
lemas, de ellos 4356 son positivos y 4404, obteniendo ası́ una tasa de 49.7 % de
positivo/negativo.
• iSOL [23]: Léxico generado a partir de una traducción automática del inglés al
español del léxico creado por Bing Liu [24], generando ası́, el recurso SOL (Spanish
Opinion Lexicon). Se realiza una correción manual de SOL dando lugar a iSOL.
La inflexión morfológica española puede generar hasta cuatro posibles palabras de
un adjetivo inglés, dos para el género (masculino o femenino) y dos para el número
(singular o plural). También se siguió la filosofı́a de Bing Liu y se introducen en la
28
lista palabras mal escritas o no pertenecientes al Diccionario de la Real Academia
Española (DRAE).
Finalmente iSOL está compuesto inicialmente por 8135 palabras, de las cuales 2509
son positivas y 5626. Realizando una labor de revisión de los datos, nos encontramos
cuatro casos de palabras repetidas: “partidarios” y “simplificada” aparecen con
signos opuestos por lo que no las vamos a considerar en nuestro léxico particular, y
“daños” y “engaños” aparecen repetidas con el mismo signo, por lo que se eliminan
las repetidas simplemente. De esta forma nuestro léxico asociado resultante consta
de 8129 palabras de las cuales 2507 son positivas y 5622 obteniendo ası́ una
proporción positivo/negativo del 30.8 %.
29
presenta los valores (0,1,0) que se corresponden con “neutro” en ambas palabras
repetidas; y uno de los casos de las palabras repetidas con misma polaridad (“daños”
y “engaños”). De esta forma nos quedamos con un léxico final formado por 4430
palabras.
Estos son los 5 léxicos con los que vamos a trabajar: cuatro asociados a términos en
español (castellano), y uno asociado a emojis (multilenguaje). Cada léxico ha sido creado
utilizando técnicas diferentes y con objetivos diferentes, por tanto, una buena forma de
30
proceder serı́a intentar combinar los resultados de utilizar cada uno por separado para
ası́ compensar los posibles fallos de un léxico con los aciertos del resto.
Sistema de etiquetado
De esta forma obtenemos cuatro valores por cada tweet con valores numéricos ente-
ros que se describen como: términos positivos, que contiene un número entero mayor
o igual que 0 correspondiente al número de términos en el tweet que aparecen en
el léxico etiquetados como “positivos”; términos negativos, que contiene un número
entero mayor o igual que 0 correspondiente al número de términos en el tweet que
aparecen en el léxico etiquetados como “negativo”; emojis positivos, que contiene
un número entero mayor o igual que 0 correspondiente al número de emojis en el
tweet que aparecen en el diccionario de emojis con una mayor proporción de uso
en textos “positivos”; y emojis negativos, que contiene un número entero mayor o
igual que 0 correspondiente al número de emojis en el tweet que aparecen en el
diccionario de emojis con una mayor proporción de uso en textos “negativos”.
31
etiquetaremos como “neutro” momentáneamente.
Algoritmo 1: Etiquetado del subsistema de etiquetado 1 (SPL+Emoji Sentiment
Ranking)
Entrada: Tweet preprocesado[i]
if (terminos positivos[i]+emojis positivos[i]) >
(terminos negativos[i]+emojis negativos[i]) then
etiqueta tweet[i]=“positivo” ;
else if (terminos positivos+emojis[i] positivos[i]) <
(terminos negativos[i]+emojis negativos[i]) then
etiqueta tweet[i]=“negativo” ;
else
etiqueta tweet[i]=“neutro” ;
Salida: Etiqueta del tweet[i] en el subsistema 1
Los resultados que arroja este subsistema con los 15000 tweets se muestran en la
tabla 3.8.
Tamaño
Clasificación Sin Lematización Con Lematización
Positivos 5102 6535
Neutro 5286 3630
Negativo 4612 4835
Cuadro 3.8: Clasificación de los tweets con el sistema de etiquetado que utiliza el léxico
Sentiment Polarity Lexicons (es).
La tabla 3.8, recoge los valores resultantes del sistema que utiliza el léxico SPL para
etiquetar, y se observa claramente, como los datos que han pasado por el proceso de
lematización están mejor etiquetados, ya que existe una reducción muy notable de
tweets que quedan etiquetados como neutros, que recordemos que puede significar
una igualdad de proporción de elementos de ambas polaridades o la ausencia de
términos o emojis correspondientes a los léxicos. Se mantiene una proporción razo-
nable de tweets etiquetados como “positivos” y como “negativos” siendo mayor la
primera, y el número de términos que aparecen al aplicar lematización con respecto
a no hacerlo prácticamente se duplica pasando de 22494 a 39175.
En los diagramas 3.5 y 3.6, se muestra un listado de los 10 términos que más se han
utilizado para clasificar como “positivo” o “negativo” utilizando este subsistema.
32
Figura 3.5: 10 términos positivos más utilizados
En este caso para cada tweet individual se tienen cuatro valores: max termino positivo,
que contiene el grado de polaridad entre 0 y 1 correspondiente al término del tweet
que mayor carga positiva tenga en base a los términos incluidos en el léxico ;
max término negativo, que contiene el grado de polaridad entre 0 y -1 correspon-
diente al término del tweet que mayor carga negativa tenga en base a los términos
incluidos en el léxico; max emoji positivo, que contiene un valor entre 0 y 1 corres-
pondiente a la proporción de textos positivos en los que aparece el emoji que mayor
carga positiva tenga en base al diccionario de emojis; y max emoji negativo, que
contiene un valor entre 0 y 1 correspondiente a la proporción de textos negativos
en los que aparece el emoji que mayor carga negativo tenga en base al diccionario
de emojis.
Aplicamos la misma fórmula que en el caso anterior, teniendo en cuenta que ahora
tenemos valores reales de 0 a 1 y de 0 a -1 en las variables asociadas a los términos,
y de 0 a 1 en las variables asociadas a los emojis, mientras que antes tenı́amos
valores enteros entre 0 y en adelante para las cuatro variables.
33
Figura 3.6: 10 términos negativos más utilizados
Para este sistema, observamos en la tabla 3.9, como claramente se utiliza un léxico
que tiende a clasificar los textos de forma positiva, ya que para el mismo conjun-
to de tweets, el sistema de etiquetado que acabamos de comentar, mantenı́a una
proporción mucho más balanceada. De nuevo el aplicar el proceso de lematización
consigue dejar de clasificar como “neutros” a 1500 tweets que en su mayorı́a, pasan
a ser etiquetados como “positivos”. También el número de términos utilizados para
etiquetar aumenta casi en un 50 %, pasando de 12896 a 17815. Es un número mu-
cho más reducido ya que únicamente se contabiliza el término máximo encontrado
por cada tweet.
En los diagramas 3.7 y 3.8, se muestran un listado de los 10 términos que más se han
utilizado para clasificar como “positivo” o “negativo” utilizando este subsistema.
34
Tamaño
Clasificación Sin Lematización Con Lematización
Positivos 7235 8568
Neutro 5078 3579
Negativo 2687 2853
Cuadro 3.9: Clasificación de los tweets con el sistema de etiquetado que utiliza el léxico
ML-SentiCon.
De esta forma, obtenemos cuatro valores por cada tweet con valores numéricos ente-
ros que se describen como: términos positivos, que contiene un número entero mayor
o igual que 0 correspondiente al número de términos en el tweet que aparecen en
el léxico etiquetados como “positivo”; términos negativos, que contiene un número
entero mayor o igual que 0 correspondiente al número de términos en el tweet que
aparecen en el léxico etiquetados como “negativo”; emojis positivos, que contiene
un número entero mayor o igual que 0 correspondiente al número de emojis en el
tweet que aparecen en el diccionario de emojis con una mayor proporción de uso
en textos “positivos”; y emojis negativos, que contiene un número entero mayor o
igual que 0 correspondiente al número de emojis en el tweet que aparecen en el
diccionario de emojis con una mayor proporción de uso en textos “negativos”.
35
Figura 3.7: 10 términos positivos más utilizados
36
Figura 3.8: 10 términos negativos más utilizados
Tamaño
Clasificación Sin Lematización Con Lematización
Positivos 5256 5312
Neutro 5801 5194
Negativo 3943 4494
Cuadro 3.10: Clasificación de los tweets con el sistema de etiquetado que utiliza el léxico
iSOL.
37
Figura 3.9: 10 términos positivos más utilizados
Los resultados que arroja el último de los subsistemas, con los 15000 tweets, se
muestran en la tabla 3.11.
Este último subsistema es el que menos tweets consigue clasificar como “positivo”
o “negativo”. Esto podrı́a deberse a que el léxico que se utiliza, es de un tamaño
reducido (de unas 4000 palabras). Sin embargo, el léxico SPL también tiene unas
caracterı́sticas similares, y consigue etiquetar un número mucho mayor de tweets.
38
Figura 3.10: 10 términos negativos más utilizados
Una conclusión clara que hemos sacado observando el funcionamiento de estos cuatro
sistemas de etiquetado individuales, es que el proceso de lematización es clave para poder
encontrar un mayor número de términos de nuestro conjunto de datos en los léxicos
utilizados. Esto se debe, a que los léxicos, han sido elaborados siendo conscientes de que
lo más interesante era extraer para cada palabra el lema, y este serı́a el que apareciera en
la lista. De esta forma, mediante el proceso de lematización, cualquier usuario conseguirı́a
unos mejores resultados utilizando su léxico que si no aplicara dicho proceso.
Etiquetado final
Hemos conseguido etiquetar mediante cuatro sistemas diferentes, un mismo tweet cua-
tro veces como “positivo”, “negativo” o “neutro”. Para obtener la etiqueta final asociada
39
Tamaño
Clasificación Sin Lematización Con Lematización
Positivos 4535 4843
Neutro 6834 6294
Negativo 3631 3863
Cuadro 3.11: Clasificación de los tweets con el sistema de etiquetado que utiliza el léxico
CRiSOL
a cada tweet, calcularemos la moda de las etiquetas resultantes y esta será la que se con-
siderará como definitiva, antes de pasar a las siguientes fases. Sin embargo, al calcular la
moda para cada uno de los tweets, pueden suceder dos posibilidades:
• Existe una única moda: En este caso será la clasificación final del tweet
• Existen dos modas: El número de sistemas utilizados es cuatro, por lo que dos
sistemas pueden etiquetar un tweet de una misma forma, y los dos restantes de otra
misma forma. Dentro de esta situación, nos encontraremos tres distintas formas de
actuar:
– Dos modas son “positivo” y dos modas son “neutro”: La clasificación del tweet
será como “positivo”.
– Dos modas son “negativo” y dos modas son “neutro”: La clasificación del tweet
será como “negativo”.
– Dos modas son “positivo” y dos modas son “negativo”: La clasificación del
tweet será como “neutro”. Se considera que no existe fuerza suficiente como
para poder clasificar correctamente ese tweet, y por tanto, no será utilizado
en el conjunto de datos final que se utilice para entrenar nuestro modelo de
clasificación como vamos a explicar a continuación.
40
Figura 3.11: 10 términos positivos más utilizados
Tamaño
Clasificación Sin Lematización Con Lematización
Positivos 5588 6493
Neutro 5565 4427
Negativo 3847 4080
Cuadro 3.12: Clasificación final de los tweets mediante la moda de las clasificaciones de
los sistemas individuales.
etiquetados por el sistema final como “positivo” o “negativo”. De esta forma consegui-
mos un conjunto final que consta de 10573 tweets, de los cuales 6493 son considerados
“positivos” y 4080 “negativos”.
En las tablas 3.14 y 3.15, se muestran los tiempos de ejecución del sistema de etique-
tado desglosado por subsistema para los datos lematizados y sin lematizar.
Antes de eliminar los tweets considerados como “neutros” o “nulos” con respecto tener un
grado de polaridad hacia un sentimiento positivo o negativo, vamos a indagar un poco en
41
Figura 3.12: 10 términos negativos más utilizados
Como vamos a trabajar con los tweets que han sido etiquetados como “positivo” o
“negativo”, se pretende buscar una explicación para los motivos que lleven a ciertos tweets
a ser considerados “neutros”. Evidentemente, por la naturaleza de los léxicos utilizados,
existen casos en los que pueden aparecer elementos de ambas polaridades que al compa-
rarse, no se pueda tener una certeza de que uno de ellos tenga más fuerza que el otro. Es
el caso de los tweets neutros propiamente dichos. Sin embargo el caso más interesante de
analizar, es cuando no encontramos ningún término o emoji que nos pueda proporcionar
un grado de polaridad para un tweet especı́fico. Estos son los tweets que denominaremos
“nulos”.
Lo más lógico, serı́a que esto se debiera a la longitud de los mismos, ya que cuantos
más caracteres o elementos contiene un tweet, más posibilidades existen de que alguno de
los elementos contenga cierta polaridad. En la tabla 3.17 observamos claramente como
las sospechas se confirman.
Existe una diferencia clara entre las longitudes mencionadas. La longitud media de
42
Figura 3.13: Arquitectura del sistema de etiquetado
Cálculo variables
Cargado Tratamiento
correspondientes a Etiquetado
del léxico de emojis
las palabras
SPL 0.01 seg 6.78 seg 378.32 seg 1.41 seg
ML-SentiCon 4.91 seg 7.97 seg 447.48 seg 2.16 seg
iSOL 0.58 seg 6.78 seg 366.34 seg 1.41 seg
CRiSOL 1.74 seg 7.97 seg 322.71 seg 2.01 seg
los tweets “nulos”, es aproximadamente, la mitad que la de los “no nulos”. Además,
comparando el conjunto completo con el conjunto eliminando los nulos, vemos que la
longitud media incluso aumenta de 26 a 27.
Igualmente, se puede dar el caso de que tweets con longitudes de 1 palabra tengan un
mayor contenido sentimental que uno con 200, por tanto es interesante también observar
los términos utilizados. Ya hemos comentado que los tweets se han extraı́do de Twit-
ter indicando que únicamente queremos los etiquetados como escritos en español, ahora
vamos a indagar un poco más en los términos utilizados en los mismos.
43
Cálculo variables
Cargado Tratamiento
correspondientes a Etiquetado
del léxico de emojis
las palabras
SPL 0.01 seg 6.73 seg 361.8 seg 1.42 seg
ML-SentiCon 5.08 seg 8.13 seg 416.67 seg 2.23 seg
iSOL 0.52 seg 6.22 seg 369.43 seg 1.47 seg
CRiSOL 1.99 seg 8.13 seg 299.43 seg 2.04 seg
El CREA (Corpus de Referencia del Español Actual) [28], creado por la Real Aca-
demia Española, presenta unos corpus con las palabras más utilizadas en los textos en
español, junto con las medidas de frecuencia de las mismas. El corpus escrito cuenta con
casi 140000 documentos de donde el 49 % procede de libros, otro 49 % de prensa y un
2 % de material misceláneo. Además el 50 % del material procede de España y la otra
mitad de América. Podemos acceder a las 1000, 5000 o 10000 formas más frecuentes, ası́
como la lista total que contiene 737799 formas. Vamos a analizar los términos de nuestro
corpus en función de los corpus del CREA de 10000 formas y de una reducción de la lista
total a las formas con una frecuencia mayor a 50, resultando en 77729 formas.
De nuevo vamos a comprobar la naturaleza de los tweets en base a los tres grupos que
se están analizando: “completos”, “nulos” y “no nulos”. La tabla 3.19 muestra los valores
asociados.
Si nos fijamos en los resultados referidos al corpus de 10000 formas, si que observamos
una diferencia clara entre los tweets nulos y no nulos, destacando que solo la mitad de
los términos en los tweets nulos tendrı́an una correspondencia con los términos utilizados
en el lenguaje español según nuestro corpus. En general los porcentajes de cobertura son
solo del 55-65 %, por tanto, tiene sentido utilizar el siguiente corpus más completo, donde
ya se igualan las diferencias y vemos que en general el 82 % de las palabras utilizadas en
nuestro corpus corresponden al lenguaje español.
Especial atención merece el tratamiento de los emojis, que ya hemos comentado que
tienen una gran importancia en los textos de las redes sociales. Contamos con un léxico
que ha recogido 721 emojis con la proporción de veces que han aparecido en textos
etiquetados como “positivos”, “neutros” o “negativos”.
Si hacemos un primer recuento de los emojis que aparecen en nuestro corpus, nos
encontramos con 7227, de los cuales, 4963 aparecen en el léxico. Esto se debe a que
existen múltiples emojis que se corresponden con letras, sı́mbolos o signos de puntuación
que no debieran contener sentimiento alguno. No obstante, por las caracterı́sticas de los
lenguajes y las frecuencias de caracteres en los mismos, pudiera darse el caso de que algún
44
Tamaño Sin Preproc Con Preproc
Completo 15000 26.06 13.08
No Nulos 13848 27.04 13.63
Nulos 1152 14.34 6.54
Siguiendo con el análisis, descubrimos que en 12279 de los 15000 tweets del corpus, no
aparece ningún emoji, o visto de la forma contraria, en el 18.14 % de los tweets recogidos
aparece al menos un emoji o emoticono. Basándonos en los trabajos [26], que trabaja con
dos conjuntos de 2.15 y 1.5 millones de tweets, donde en ambos existe un 15 % de tweets
que presentan emojis con una media de 2.4 emojis por tweet frente a 2.6 emojis de media
en nuestro corpus, y en [27], que trabaja con un dataset de 12 millones de tweet, con
una frecuencia de 19 % de tweets conteniendo al menos un emoji, podemos asumir que
estamos trabajando con una muestra lo suficiente representativa como para trabajar la
influencia de los emojis.
Una vez nos centramos en los tweets que contienen al menos un emoji, podemos
construir el gráfico 3.15, que muestra la distribución de los emojis en los tweets que
contienen al menos uno.
Existen 55 tweets que presentan un número de emojis mayor o igual a 10, lo cual
podrı́a parecer no tener sentido, pero observando alguno de ellos, se entiende lo que
ocurre, por lo que hemos comentado anteriormente de las letras o signos de puntuación
que se incluyen como emojis. La figura 3.16, contiene un ejemplo claro de un tweet que
contiene 39 emojis, siendo prácticamente todas letras, mientras quizás solo uno de ellos
sea realmente considerado como emoji, y sea el único presente en el léxico con el que
trabajamos. Este ejemplo es el tweet #1308 en nuestro conjunto de datos inicial.
45
Tamaño Sin Preproc Con Preproc
Completo 15000 390955 196271
No Nulos 13848 374433 188735
Nulos 1152 16522 7536
Cuadro 3.19: Análisis de correspondencia real de los términos del corpus con los del corpus
español de la RAE
En la figura 3.17, se ve muy claro como se reducen drásticamente los tweets con una gran
cantidad de emojis. Si contamos en conjunto los tweets donde aparecı́an más de 5 emojis,
pasan de ser de 228 a 97 si solo contabilizamos los emojis que aparecen en nuestro léxico.
De hecho, si nos fijamos únicamente en los emojis que aparecen en nuestro léxico,
las cifras cambian como se muestra en la tabla 3.20. Se reduce el número de tweets que
contienen emojis, ası́ como el número de emojis y la media de emojis por tweet.
Cuadro 3.20: Comparativa de las cifras de los emojis en el léxico utilizado y en global
En esta fase, vamos a considerar las dos principales técnicas comentadas anteriormente:
Bag of Words, con TF-IDF, y Word Embeddings, con Word2Vec. Para ello, nos ayuda-
remos de paquetes especı́ficos como son: gensim, que es una biblioteca preparada para
el procesamiento de lenguaje natural, y sklearn, que es probablemente la biblioteca más
potente para aprendizaje automático.
46
Figura 3.15: Frecuencia de emojis en los tweets que presentan mı́nimo uno
Para realizar BoW con TF-IDF, crearemos una instancia TfidfVectorizer que encon-
tramos en sklearn.feature extraction.text. Esta, se crea recibiendo los parámetros de con-
figuración iniciales, y posteriormente, mediante un método de su clase fit transform(),
recibe el conjunto de datos preprocesado para construir el array asociado. Este array
tiene como dimensiones el número de tweets que forma el conjunto de datos y el número
de términos máximo que se ha establecido previamente. En la figura 3.18, se observa un
ejemplo ilustrativo de como funciona esta técnica.
Con respecto a los parámetros para la construcción de BoW, algunos los fijaremos
desde el primer momento como podrı́a ser la eliminación de stopwords en español (stop-
words=“es”) o establecer que si una palabra aparece en más del 70 % de los tweets del
conjunto de datos, no se considerará como posible caracterı́stica (max df=0.7). Los dos
parámetros más importantes que determinar son: el tamaño de la bolsa de palabras
(max features), es decir el número de palabras que se van a incluir en ella, y el mı́nimo
número de veces que tiene que aparecer una palabra en el corpus para que pueda ser
47
Figura 3.17: Comparativa frequencia de emojis únicamente en el léxico
Min DF 1 2 3 4 5 10
Términos únicos 18758 7877 5445 4357 3709 2232
Cuadro 3.21: Comparativa del número de palabras únicas consideradas en el modelo BoW
conforme al mı́nimo de veces que estas tienen que aparecer en el corpus
Los resultados, muestran como es obvio que el parámetro min df tiene una gran in-
fluencia en el número de términos que se consideran, aunque quizás esto no se traduzca en
diferentes resultados más adelante. Existen aproximadamente 10000 palabras que apare-
cen solo una vez en todo el corpus, que sabiendo que se proviene de una extracción directa
de las redes sociales, pueden ser expresiones, coloquialismos o directamente palabras mal
escritas que no tendrı́an por qué ser importantes para el modelado de nuestro sistema.
48
Figura 3.18: Funcionamiento de Bag of Words
Para realizar Word Embedding con Word2Vec, podemos construir nuestro propio modelo,
llamando a Word2Vec que encontramos en gensim.models, al que le pasaremos el corpus
de datos preprocesado junto con una serie de parámetros que tenemos que definir. Los más
importantes para definir serı́an: el tamaño de los vectores de palabras (size), la ventana
(window), que es la distancia máxima entre la palabra actual y la palabra predicha dentro
del mismo tweet, el número mı́nimo de veces que tiene que aparecer un corpus para que
pueda ser considerada en la construcción de los vectores (min count) y en relación con
la velocidad para entrenar el modelo se puede definir el parámetro que define los hilos a
utilizar (workers).
Además, existen dos variantes de arquitectura de Word2Vec como son: CBOW (Con-
tinuous Bag of Words) o Skip Gram. CBOW, recibe como entrada una ventana de pa-
labras que rodean a la palabra a predecir y como salida se desea obtener la palabra que
mejor se ajusta a dicho contexto. En esta variante el orden de las palabras del contexto,
no influyen en la predicción. En la variante Skip Gram, se tiene como entrada la palabra
actual para predecir la ventana que lo rodea, es decir, el contexto de dicha palabra. Esta
arquitectura pondera las palabras situadas más cerca en el documento más fuertemente
que aquellas que no lo están. Podemos observar en la figura 3.19, este funcionamiento.
Según las notas del autor [Google Code], CBOW es más rápido pero Skip Gram con-
sigue un mejor trabajo para palabras infrecuentes, por tanto, deberı́amos probar ambas
arquitecturas para ver cual resulta mejor en nuestro experimento. Esto se consigue fácil-
mente con la variable “sg”, que por defecto realiza la variante CBOW, pero si la ponemos
con valor 1 utilizará la variante Skip Gram.
49
Figura 3.19: Arquitecturas de Word2Vec CBOW y Skip Gram
de la red utiliza la función softmax, y que las muestras de entrenamiento, son parejas
de palabras seleccionadas en base a su proximidad de ocurrencia. Existen varios pro-
blemas con W2V como son que para cada muestra de entrenamiento, solo los pesos de
la palabra objetivo obtienen una actualización significante. El resto de las palabras que
no son el objetivo, reciben actualización marginal o nula. Además, para cada muestra
de entrenamiento, la función softmax calcula todas las probabilidades finales, lo cual es
una operación muy costosa. Teniendo todo esto en cuenta, negative sampling, per-
mite modificar solo un pequeño porcentaje de los pesos. Esto se consigue seleccionando
aleatoriamente un conjunto k de palabras negativas, es decir palabras que no están en
el contexto, de las cuales solo se actualizarán los pesos junto con la palabra objetivo.
Lógicamente esta aproximación es más rápida ya que se ahorra gran cantidad de cálculo
computacional.
50
(min count=1), ya que no estamos trabajando con un conjunto de datos inmenso como
para suponer que todas las palabras van a aparecer más de una vez. Con respecto al
número de “trabajadores”, el número por defecto es 3, y al construir nuestro modelo,
el tiempo de ejecución es suficientemente rápido como para no preocuparnos por él. El
tamaño de la ventana y el tamaño de los vectores de palabras, serán elegidos en la
tarea de construcción de parámetros combinado con la elaboración de los modelos de
clasificación. Siguiendo las notas del autor, los valores más recomendados para el tamaño
de ventana serı́an 10 para skip-gram y 5 para CBOW, con respecto a la dimensionalidad,
se recomienda establecerla entre 100 y 1000. Además probaremos las dos técnicas de
entrenamiento seleccionadas para ver si claramente una funciona mejor que la otra.
Una vez hemos construido el modelo con los vectores de palabras, vamos a construir
los vectores asociados a cada tweet. Siguiendo con la técnica más habitual utilizada en
los distintos trabajos analizados, lo haremos calculando la media de los vectores de cada
palabra de un tweet individual. Hay que tener en cuenta que si solo entrenáramos nuestro
modelo con palabras que tengan que aparecer más de una vez en el corpus, o bien entre-
namos solo con el conjunto de entrenamiento, se van a producir casos en los cuales las
palabras pueden no estar incluidas en el modelo, y por tanto, no tener una representación
vectorial, por tanto no se podrı́an considerar.
3.7 Modelado
Una vez tenemos los vectores numéricos construidos en la fase de extracción de carac-
terı́sticas, nos disponemos a seleccionar una serie de algoritmos de clasificación supervisa-
dos cuyo funcionamiento comprobaremos, conjuntamente, con el de las técnicas de extrac-
ción de caracterı́sticas, ya que también vamos a tener que determinar ciertos parámetros
en los distintos algoritmos. Probaremos el funcionamiento de tres algoritmos supervisados
que son comúnmente utilizados en el análisis de sentimientos: SVM, Random Forest
y Regresión Logı́stica.
K (x1 , x2 )) = x>
1 x2 (3.7.1)
51
Figura 3.20: Funcionamiento de SVM en dimensión 2
Random Forest
Random Forest es un ensemble utilizado tanto para clasificación como para regresión. En
nuestro caso, lo utilizamos para clasificación entre dos clases posibles. Su funcionamiento
dentro de los ensembles es bastante intuitivo. Se construyen un número determinado de
árboles de decisión en la fase de entrenamiento, y se calcula la salida final del ensemble
como la moda de las salidas de cada uno de los árboles de decisión como se puede ver en
la figura 3.21. Random Forest, corrige la querencia a sobreajustar que tienen los árboles
de decisión por separado y son una de los algoritmos más utilizados en ML.
52
Figura 3.21: Funcionamiento de Random Forest
Regresión Logı́stica
pi
logit (pi ) = ln = β0 + β1 x1,i + · · · + βk xk,i (3.7.2)
1 − pi
53
término, y como resultado, será penalizado, y actualizado a un valor menor.
m
1 X 2
hθ X (i) − y (i)
J= (3.7.3)
2m i=1
m n
1 X 2 λ X 2
hθ X (i) − y (i) +
J= θ (3.7.4)
2m i=1 2m j=1 j
Tenemos que realizar selección de parámetros en dos fases diferentes. Primero se decide
la configuración de los parámetros de los modelos para la fase de extracción de carac-
terı́sticas, es decir, para BoW, con TF-IDF, y Word2Vec, en sus dos variantes CBOW y
Skip Gram. Después tenemos que comprobar la configuración de los parámetros de los
algoritmos de clasificación (SVM, Random Forest y Regresión Logı́stica).
Para realizar esta labor, construiremos dos experimentos distintos como vemos en la
figura 3.22. El primero, utilizará como extracción de caracterı́sticas BoW con TF-IDF
y como algoritmos de clasificación los tres mencionados; y el segundo utilizará como
extracción de caracterı́sticas Word2Vec, con las dos variantes mencionadas, y como algo-
ritmos de clasificación también los tres clasificadores que hemos comentado. Se busca la
combinación óptima de técnicas que proporcione el mejor resultado con el conjunto de
entrenamiento.
54
Figura 3.22: Construcción del clasificador óptimo
En las tablas 3.22, 3.23 y 3.24, se muestran los resultados de los estimadores que mejo-
res resultados dan en cada uno de los dos experimentos construidos; y en las tablas 3.25 y
3.26, tenemos una relación de los tiempos de ejecución. Como la búsqueda es exhaustiva,
el tiempo de ejecución aumenta exponencialmente con el número de parámetros incluidos
a seleccionar, por tanto, hay que tomar decisiones de antemano sobre la configuración
del estimador. Los tiempos para Word2Vec son similares independientemente de la ar-
quitectura que se utilice, por tanto se indican únicamente los tiempos que surgen de la
utilización de CBOW.
Claramente obtenemos unos mejores resultados utilizando BoW como opción para
extraer caracterı́sticas. Recordemos que la proporción de nuestros datos es de 61.4 % de
tweets “positivos”, de forma que si quisiéramos construir un sistema ficticio, que etiquetara
todos los tweets que recibiera de entrada como “positivo”, conseguirı́amos una tasa de
acierto de 61.4 %.
55
Clasificador
Extr.Caract: BoW SVM Random Forest Reg.Logı́stica
Tamaño MinDF C acc F1 N Est acc F1 C acc F1
1 1 0.77 0.77 1000 0.78 0.78 10 0.77 0.77
3 1 0.77 0.77 300 0.78 0.78 10 0.77 0.77
250
5 1 0.77 0.77 1000 0.78 0.78 10 0.77 0.77
10 1 0.77 0.77 300 0.78 0.78 10 0.77 0.77
1 1 0.81 0.81 1000 0.81 0.81 1 0.81 0.81
3 1 0.81 0.81 1000 0.81 0.81 1 0.81 0.81
500
5 1 0.81 0.81 500 0.81 0.81 1 0.81 0.81
10 1 0.81 0.81 300 0.81 0.81 10 0.81 0.81
1 1 0.84 0.84 1000 0.83 0.84 10 0.84 0.84
3 1 0.84 0.84 300 0.83 0.84 10 0.84 0.84
1000
5 1 0.84 0.84 1000 0.83 0.84 10 0.84 0.84
10 1 0.84 0.84 1000 0.83 0.84 1 0.83 0.84
Cuadro 3.22: Selección de parámetros con BoW (TF-IDF) como extracción de carac-
terı́sticas y SVM, Random Forest y Regresión Logı́stica como clasificadores
Clasificador
Extr.Caract:
SVM Random Forest Reg.Logı́stica
W2V (CBOW)
Tamaño Ventana C acc F1 N Est acc F1 C acc F1
5 10 0.67 0.75 300 0.7 0.76 10 0.67 0.74
200 10 10 0.67 0.75 200 0.7 0.76 10 0.68 0.75
15 10 0.68 0.75 300 0.7 0.76 10 0.68 0.75
5 10 0.66 0.75 300 0.7 0.76 10 0.67 0.75
400 10 10 0.67 0.75 100 0.7 0.76 10 0.67 0.75
15 10 0.67 0.75 200 0.7 0.76 10 0.68 0.75
5 1 0.66 0.75 300 0.69 0.76 10 0.67 0.74
600 10 1 0.67 0.75 200 0.7 0.76 10 0.67 0.75
15 1 0.66 0.75 300 0.69 0.76 10 0.67 0.75
5 1 0.66 0.75 300 0.7 0.75 10 0.67 0.74
800 10 1 0.67 0.75 200 0.69 0.76 10 0.67 0.75
15 1 0.66 0.75 200 0.69 0.76 10 0.68 0.74
Cuadro 3.23: Selección de parámetros con Word2Vec (CBOW) como extracción de carac-
terı́sticas y SVM, Random Forest y Regresión Logı́stica como clasificadores
56
Clasificador
Extr.Caract:
SVM Random Forest Reg.Logı́stica
W2V (Skip Gram)
acc acc acc acc acc acc
Tamaño Ventana C N Est C
(ns) (hs) (ns) (hs) (ns) (hs)
5 10 0.74 0.79 100 0.76 0.80 10 0.74 0.78
200 10 10 0.76 0.79 300 0.78 0.80 10 0.76 0.78
15 10 0.77 0.80 300 0.79 0.80 10 0.76 0.80
5 10 0.74 0.78 200 0.76 0.80 10 0.73 0.78
400 10 10 0.76 0.79 200 0.78 0.80 10 0.76 0.79
15 10 0.76 0.81 200 0.78 0.80 10 0.76 0.80
5 10 0.73 0.78 100 0.76 0.79 10 0.73 0.78
600 10 10 0.76 0.80 300 0.78 0.80 10 0.75 0.79
15 10 0.76 0.81 200 0.79 0.80 10 0.76 0.80
5 10 0.73 0.78 200 0.76 0.80 10 0.72 0.78
800 10 10 0.75 0.80 300 0.77 0.80 10 0.75 0.79
15 10 0.76 0.80 200 0.78 0.80 10 0.76 0.79
Cuadro 3.25: Tiempos de ejecución selección de parámetros con BoW (TF-IDF) como
extracción de caracterı́sticas y SVM, Random Forest y Regresión Logı́stica como clasifi-
cadores
57
Extr.Caract: Word2Vec Clasificador
Tamaño Ventana Tiempo C.Medias SVM RandomForest Reg.Log
5 1.66 seg 1.16 seg 192.74 seg 278.10 seg 9.31 seg
200 10 1.74 seg 1.1 seg 226.74 seg 285.29 seg 11.59 seg
15 2.19 seg 1.3 seg 220.95 seg 276.38 seg 10.52 seg
5 2.15 seg 1.2 seg 397.83 seg 402.02 seg 17.21 seg
400 10 2.44 seg 1.24 seg 403.3 seg 440.46 seg 23.1 seg
15 3.81 seg 1.71 seg 483.35 seg 471.37 seg 22.56 seg
5 3.78 seg 1.57 seg 678.83 seg 569.72 seg 26.3 seg
600 10 4.64 seg 1.46 seg 624.52 seg 528.68 seg 28.28 seg
15 4.1 seg 1.56 seg 586.65 seg 518.92 seg 28.42 seg
5 3.56 seg 1.46 seg 712.71 seg 549.26 seg 29.29 seg
800 10 3.4 seg 1.27 seg 703.26 seg 524.21 seg 32.87 seg
15 4.23 seg 1.5 seg 683.99 seg 516.83 seg 33.98 seg
utilizar CBOW. Sin embargo, con Skip Gram, vemos que para ventanas más grandes,
obtenemos unos mejores resultados, por tanto, seguiremos comprobando si obtenemos
una mejorı́a en nuestros resultados si seguimos ampliando estos valores.
También, una vez que queda claro que existe una arquitectura peor, vamos a compro-
bar como si existen diferencias significativas dependiendo de la forma de entrenamiento
de la red Word2Vec, es decir, comprobar si existe diferencia entre utilizar “negative sam-
pling” y “hierarchical softmax”.
Con respecto a los tiempos de ejecución, recordemos que son tiempos que surgen de
la evaluación exhaustiva de los clasificadores con distintos parámetros, buscando optimi-
zar los mismos. Esto quiere decir, que una vez seleccionemos los parámetros definitivos,
los tiempos de construcción en la tarea de modelado se reducirán. En general SVM y
58
Clasificador
Extr.Caract: BoW SVM Random Forest Reg.Logı́stica
Tamaño MinDF C acc F1 N Est acc F1 C acc F1
1 1 0.85 0.85 1000 0.85 0.84 10 0.85 0.85
1500
3 1 0.85 0.85 500 0.85 0.85 10 0.85 0.85
1 1 0.85 0.86 1000 0.85 0.85 10 0.87 0.86
2000
3 1 0.86 0.86 500 0.85 0.85 10 0.86 0.86
1 1 0.86 0.87 1000 0.85 0.85 10 0.87 0.87
2500
3 1 0.87 0.87 1000 0.85 0.85 10 0.87 0.87
Cuadro 3.27: Selección de parámetros con BoW (TF-IDF) como extracción de carac-
terı́sticas y SVM, Random Forest y Regresión Logı́stica como clasificadores
especialmente Random Forest, son con diferencia los clasificadores que mas esfuerzo han
requerido. Los tiempos de construcción tanto de BoW, como de el modelo W2V y el
clasificador de Regresión Logı́stica son despreciables en comparación.
En los nuevos resultados con BoW, se ha fijado para SVM el inverso del parámetro
de regularización en 1, ya que ha sido el valor que ha resultado mejor en todas las
comprobaciones sin ser un valor lı́mite; y para regresión logı́stica, comprobaremos aún
este parámetro con valores mayores de 10, pero los mejores resultados se obtienen con
C=10. Los resultados obtenidos se muestran en la tabla 3.27 y sus tiempos de ejecución
en 3.28
Con respecto a W2V, vemos que el tamaño del modelo no parece ser demasiado rele-
vante y sin embargo la ventana parece influir mucho obteniéndose mejores valores cuanto
más grande es. Con respecto a los algoritmos de clasificación, Random Forest no parece
demasiado claro que tenga un número de estimadores idóneo. Para SVM y Regresión
Logı́stica, le habı́amos dado una parrilla de valores para el inverso del parámetro de re-
gularización, donde el valor máximo era 10 y es el que mejores resultados ha producido
en cada caso. Con este análisis hecho, vamos a comprobar finalmente para diferentes
tamaños del modelo si ampliando incluso más la ventana y el inverso del parámetro de
regularización se obtienen mejores resultados. Los resultados los vemos en la tabla 3.29
y sus tiempos de ejecución en 3.30
59
Extr.Caract: BoW Clasificador
Tamaño MinDF Tiempo SVM Random Forest Reg.Logı́stica
1 0.36 seg 282.14 seg 2791.02 seg 0.65 seg
1500
3 0.37 seg 457.09 seg 2383.69 seg 0.64 seg
1 0.35 seg 620.3 seg 2987.36 seg 0.88 seg
2000
3 0.38 seg 358.75 seg 3033.83 seg 0.8 seg
1 0.45 seg 469.08 seg 3733.38 seg 0.96 seg
2500
3 0.4 seg 502.92 seg 3826.37 seg 1.04 seg
Cuadro 3.28: Tiempos de ejecución selección de parámetros con BoW (TF-IDF) como
extracción de caracterı́sticas y SVM, Random Forest y Regresión Logı́stica como clasifi-
cadores
Clasificadores
Extrac. Caract:
SVM Random Forest Reg.Logı́stica
W2V (SkipGram)
F1 F1 F1 F1 F1 F1
Tamaño Ventana C No Est C
(ns) (hs) (ns) (hs) (ns) (hs)
15 10000 0.80 0.80 400 0.78 0.8 10000 0.81 0.81
200 20 10000 0.80 0.80 200 0.79 0.8 1000000 0.80 0.8
25 10000 0.80 0.80 100 0.79 0.8 10000 0.81 0.81
15 10000 0.83 0.83 200 0.78 0.8 1000000 0.83 0.84
400 20 10000 0.83 0.83 200 0.78 0.8 100000 0.83 0.84
25 10000 0.83 0.83 400 0.79 0.8 100000 0.83 0.83
15 10000 0.84 0.84 100 0.78 0.8 1000000 0.84 0.85
600 20 10000 0.84 0.85 100 0.79 0.8 100000 0.83 0.85
25 10000 0.84 0.84 400 0.78 0.8 100000 0.84 0.85
15 10000 0.84 0.86 300 0.78 0.8 100000 0.85 0.86
800 20 10000 0.84 0.85 400 0.79 0.81 100000 0.85 0.85
25 10000 0.84 0.85 400 0.79 0.81 100000 0.85 0.86
Cuadro 3.29: Selección de parámetros con W2V (Skip Gram) como extracción de carac-
terı́sticas y SVM, Random Forest y Regresión Logı́stica como clasificadores
60
Extr.Caract: Word2Vec Clasificador
Tamaño Ventana Tiempo C.Medias SVM RandomForest Reg.Log
15 4.29 seg 0.61 seg 1687.23 seg 584.36 seg 248.91 seg
200 20 5.28 seg 0.63 seg 1722.89 seg 372.4 seg 199.79 seg
25 7.08 seg 0.65 seg 1992.12 seg 355.28 seg 221.2 seg
15 9.53 seg 0.93 seg 2239.21 seg 532.64 seg 596.5 seg
400 20 11.78 seg 0.78 seg 2447.72 seg 523.11 seg 708.13 seg
25 10.73 seg 0.79 seg 2504.94 seg 635.1 seg 805.73 seg
15 14.49 seg 0.94 seg 1967.98 seg 803.59 seg 1103.37 seg
600 20 17.2 seg 0.98 seg 2441.16 seg 725.65 seg 1062.76 seg
25 18.42 seg 0.98 seg 2847.48 seg 728.16 seg 1196.5 seg
15 15.87 seg 0.84 seg 2543.05 seg 795.12 seg 2437.87 seg
800 20 24.42 seg 0.84 seg 3579.02 seg 745.77 seg 1804.82 seg
25 25.81 seg 0.84 seg 3843.2 seg 779.2 seg 2700.26 seg
Cuadro 3.30: Tiempos de ejecución selección de parámetros con Word2Vec (Skip Gram)
como extracción de caracterı́sticas y SVM, Random Forest y Regresión Logı́stica como
clasificadores
Por otro lado, utilizando BoW, alcanzamos unos valores de 85-87 % con cualquiera
de los tres clasificadores tanto en la tasa de acierto como en la métrica F1 ponderada.
Primero comprobaremos si parece que estemos cometiendo sobreajuste utilizando W2V
para la extracción de caracterı́sticas con el conjunto de prueba reservado para comprobar
el rendimiento de nuestro sistema. Si este es el caso, nos decantaremos por BoW como
técnica para la extracción de caracterı́sticas, ya que no sospechamos que se produzca
sobreajuste y además proporciona unos valores mı́nimamente mejores para la métrica de
validación F1 ponderada con la que estamos trabajando. A continuación se describe el
clasificador final que se construirá.
Clasificador final
Como acabamos de comentar, utilizando BoW con tamaño 2500 en la fase de extracción
de caracterı́sticas, conseguimos un valor de la métrica F1 de 85-87 % con el conjunto
de entrenamiento en los tres algoritmos probados. Podemos probar el funcionamiento de
aplicar un clasificador final que se base en un sistema de votación de mayorı́a puro entre
los tres clasificadores probados, con el conjunto de validación que hemos separado desde
el principio.
61
• Regresión Logı́stica con parámetro de regularización (C=10.0).
• Sistema conjunto que aplica un sistema de votación por mayorı́a con los 3 clasifica-
dores
Además vamos a probar utilizando W2V, en su versión Skip Gram, con tamaño del
modelo 800 y ventana 15, y los tres clasificadores junto con un sistema de votación de
mayorı́a como el que acabamos de mencionar. En este caso los clasificadores especı́ficos
son:
• Sistema conjunto que aplica un sistema de votación por mayorı́a con los 3 clasifica-
dores
62
Capı́tulo 4. Resultados y Discusión
4.1 Resultados
Para comprobar el funcionamiento del sistema construido, vamos a diseñar dos expe-
rimentos distintos para los que observaremos diferentes métricas de las que sacar las
conclusiones sobre que modelos proporcionan los mejores resultados. Los diseños son:
Las métricas de validación utilizadas que ya han sido introducidas anteriormente son:
63
• Medida F1 Ponderada: Es la media ponderada de “precission” y “recall”, donde
ambas métricas contribuyen de igual forma. Esta métrica es la más deseable para
comparar modelos.
Bag of Words
La tabla 4.1 corresponde a los resultados obtenidos con el diseño HoldOut en las métricas
de validación planteadas.
Cuadro 4.1: Validación del clasificador final con BoW con diseño HoldOut estratificado
80/20
La tabla 4.2 contiene los resultados del diseño de validación cruzada. El tiempo de
ejecución que ha llevado este experimento ha sido de 6838 seg, del cual la construcción
de BoW es despreciable, ası́ como el tiempo de ajuste del regresor logı́stico.
Cuadro 4.2: Validación del clasificador final con BoW con diseño de validación cruzada
estratificada de 10 folds
En ambos diseños se observa claramente que utilizar Random Forest como clasificador
proporciona unos resultados ligeramente peores. Además, el sistema de voto por mayorı́a,
no tiene la mejorı́a esperada. Si bien en ambos casos presenta los mejores resultados, no
son significativamente mejores que utilizar SVM o Regresión Logı́stica por individual,
esto nos hace sospechar que ambas técnicas estén funcionando de forma similar y este
es el motivo que lleva a que los resultados sean prácticamente iguales. De todas formas,
si nos basamos únicamente en los mejores resultados, tendrı́amos que hablar de que los
proporciona el sistema de voto por mayorı́a.
64
Word2Vec - Skip Gram
Repetimos las mismas pruebas con diseño HoldOut con el conjunto de validación reser-
vado primero. Los resultados se muestran en la tabla 4.3
Cuadro 4.3: Validación del clasificador final con Word2Vec con diseño HoldOut estratifi-
cado 80/20
Cuadro 4.4: Validación del clasificador final con Word2Vec con diseño de validación cru-
zada estratificada de 10 folds
En este caso, ya hemos conseguido unas métricas del 86 % utilizando el sistema de voto
por mayorı́a. Sin embargo, los resultados son peores si los comparamos con sus homólogos
habiendo utilizado BoW para la extracción de caracterı́sticas.
4.2 Discusión
Una vez hemos concluido el trabajo, debemos mirar atrás para analizar los pasos y de-
cisiones tomadas a lo largo de la construcción de nuestro sistema de clasificación de
sentimientos en base a su polaridad negativa o positiva.
65
Primero, contábamos con 15000 tweets sin etiquetar extraı́dos de Twitter utilizando
su API. Después se les realiza una tarea de preprocesado incluyendo el proceso de le-
matización, de modo que cada tweet se convierte en una lista de elementos individuales
(palabras, lemas, emojis...). Una vez tenemos los datos de esta manera, se construye un
sistema de etiquetado que poder aplicar a los tweets, de manera que la clasificación que
esta de, se considere real como para seguir procediendo con las siguientes fases.
Una vez hemos clasificado nuestro conjunto de datos hemos obtenido: 6493 tweets
“positivos”, 4427 “neutros” y 4080 “negativos”. Como el sistema que se quiere construir
pretende detectar la polaridad de un texto, no vamos a considerar los tweets “neutros”
de aquı́ en adelante, y por tanto, el conjunto de datos final con el que se trabaja consta
de 10573 tweets.
Los resultados obtenidos se consideran muy aceptables teniendo en cuenta las limita-
ciones del trabajo: primero, por el hecho de que se trabaja con un conjunto de datos no
preparado, ya que ha sido extraı́do manualmente con lo que esto supone, y por tanto, ha
sido necesaria la elaboración de un sistema de etiquetado con el que establecemos una
“ground truth”, y segundo, porque el trabajo de modelado y selección de parámetros,
está siendo llevado a cabo con una máquina que no es especialmente potente en lo que a
cómputo se refiere.
66
Capı́tulo 5. Conclusiones y Trabajo
Futuro
5.1 Conclusiones
Durante el desarrollo del TFG, se ha pretendido explicar con detalle las distintas fases
de la manera más ilustrativa y didáctica posible, para conseguir que el lector que sea nuevo
en la materia, pueda comprender con más sencillez los procedimientos utilizados.
El sistema construido que mejor funciona es el que utiliza Bag of Words como
técnica de extracción, y clasifica en función de un sistema de voto por mayorı́a pura
donde intervienen tres de los clasificadores más utilizados en este campo: SVM, Random
Forest y Regresión Logı́stica. Para dicho sistema, se han alcanzado resultados de un
88 % en la medida F1 ponderada y en la tasa de acierto, que nos hacen reforzar la idea de
67
que se ha completado un buen trabajo. No obstante serı́a ideal para un trabajo futuro,
poder contar con conjuntos de datos ya etiquetados manualmente con los que poder
comprobar el funcionamiento real del prototipo desarrollado.
68
anteriormente mencionadas, para extenderlos luego. De esta manera podrı́amos confirmar
la calidad del sistema de etiquetado construido en primera instancia, ası́ como mejorar el
mismo gracias al etiquetado manual que se aplica.
69
70
Bibliografı́a
[1] Wang D, Szymanski B.K, Abdelzaher T, Heng Ji, Kaplan L (2018). The
age of social sensing. IEEE Computer Society.
[3] Lévy P (2013). The Semantic Sphere 1: Computation, Cognition and Information
Economy. Hoboken, NJ:Wiley.
[5] C.D.Broad (1954). Emotion and sentiment. Journal of Aesthetics and Art Criticism
13(2):203-214.
[6] Lövheim H. (2011). A new three-dimensional model for emotions and monoamine
neurotransmitters. Medical hypotheses. 78. 341-348.
[8] Ekman P (1992) An argument for basic emotions. Cognition and Emotion 6(3-4):169-
200.
[9] Plutchik R (1980). Emotion: a psychoevolutionary synthesis. Harper and Row, New
York.
[10] Pak A, Paroubek P (2010). Twitter as a Corpus for Sentiment Analysis and
Opinion Mining. LREC.
[11] Dini L, Bittar A (2016). Emotion Analysis on Twitter: The Hidden Challenge.
LREC.
[13] Shiha M.O, Ayvaz S (2017). The Effects of Emoji in Sentiment Analysis. Inter-
national Journal of Computer and Electrical Engineering vol. 9, no. 1, pp. 360-369.
71
[14] Satapathy R, Guerreiro C, Chaturvedi I, Cambria E (2017). Phonetic-
Based Microtext Normalization for Twitter Sentiment Analysis. 2017 IEEE Internatio-
nal Conference on Data Mining Workshops (ICDMW), 407-413.
[15] Wang B, Wang A, Chen F, Wang Y, Kuo C. (2019). Evaluating word embed-
ding models: Methods and experimental results. APSIPA Transactions on Signal and
Information Processing, 8, E19. doi:10.1017/ATSIP.2019.12.
[16] Jain V.K, Kumar S, Fernandes S.L (2017). Extraction of emotions from multi-
lingual text using intelligent text processing and computational linguistics. J. Comput.
Sci., 21, 316-326.
[17] Kang X, Ren F, Wu Y. (2018) Exploring latent semantic information for textual
emotion recognition in blog articles. in IEEE/CAA Journal of Automatica Sinica, vol.
5, no. 1, pp. 204-216.
[18] Yat Mei Lee S, Chen Y, Huang C. (2010). A text-driven rule-based system
for emotion cause detection. In Proceedings of the NAACL HLT 2010 Workshop on
Computational Approaches to Analysis and Generation of Emotion in Text (CAAGET
’10). Association for Computational Linguistics, USA, 45–53.
[19] Chen Y, Skiena S. (2014). Building Sentiment Lexicons for All Major Languages.
In ACL (2) (pp. 383-389).
[22] Cruz F.L, Troyano J.A, Pontes B, Ortega F.J. (2014) Building layered,
multilingual sentiment lexicons at synset and lemma levels, Expert Systems with Ap-
plications.
[23] Molina González M.D, Martı́nez Cámara E., Martı́n Valdivia M.T.
(2015). CRiSOL: Opinion Knowledge-base for Spanish. Procesamiento Del Lenguaje
Natural, 55, 143-150.
[24] Hu M., Liu B. (2004) Mining and summarizing customer reviews. Proceedings of
the ACM SIGKDD International Conference on Knowledge Discovery, Data Mining
(KDD-2004, full paper), Seattle, Washington, USA, Aug 22-25, 2004.
[25] Ghelani S. (2019) From Word Embeddings to Pretrained Language Models - A new
Age in NLP - Part 1, Towars Data Science.
[26] Preisendorfer M. (2018). Social Media Emoji Analysis, Correlations and Trust
Modeling. 10.13140/RG.2.2.25466.18888.
72
[28] REAL ACADEMIA ESPAÑOLA: Banco de datos (CORDE). Corpus
diacrónico del español. <http://www.rae.es> 12/06/2020.
73
74
Apéndice A. Selección de parámetros con Bag of Words
75
Clasificador
Extr.Caract: BoW SVM Random Forest Reg.Logı́stica
Tamaño MinDF C F1 N Est F1 C F1
1 0.1 0.47 500 0.47 0.1 0.47
5 3 0.1 0.47 1000 0.47 0.1 0.47
5 0.1 0.47 1000 0.47 0.1 0.47
1 100 0.59 500 0.58 100 0.58
25 3 100 0.59 500 0.59 100 0.58
5 100 0.59 500 0.58 100 0.58
1 1 0.65 1000 0.67 100 0.66
50 3 1 0.65 1000 0.66 100 0.66
5 1 0.65 500 0.67 100 0.66
1 1 0.71 500 0.73 100 0.72
3 1 0.71 1000 0.73 100 0.72
100
5 1 0.71 1000 0.73 100 0.72
10 1 0.71 500 0.73 100 0.72
1 1 0.77 1000 0.78 10 0.77
3 1 0.77 300 0.78 10 0.77
250
5 1 0.77 1000 0.78 10 0.77
10 1 0.77 300 0.78 10 0.77
1 1 0.81 1000 0.81 1 0.81
3 1 0.81 1000 0.81 1 0.81
500
5 1 0.81 500 0.81 1 0.81
10 1 0.81 300 0.81 10 0.81
1 1 0.84 300 0.84 10 0.84
3 1 0.84 1000 0.84 10 0.84
1000
5 1 0.84 500 0.84 10 0.84
10 1 0.84 500 0.84 10 0.84
1 1 0.85 1000 0.84 10 0.85
1500
3 1 0.85 500 0.85 10 0.85
1 1 0.86 1000 0.85 10 0.86
2000
3 1 0.86 500 0.85 10 0.86
1 1 0.87 1000 0.85 10 0.87
2500
3 1 0.87 1000 0.85 10 0.87
Cuadro A.1: Selección de parámetros con BoW (TF-IDF) como extracción de caracterı́sti-
cas
76
Apéndice B. Selección de parámetros con Word2Vec
(Skip-Gram)
77
Clasificador
Extr.Caract:
SVM Random Forest Reg.Logı́stica
W2V (Skip Gram)
Tamaño Ventana C F1 N Est F1 C F1
5 0.1 0.47 300 0.68 10 0.49
5 10 10 0.54 300 0.71 10 0.62
15 1 0.64 400 0.71 10 0.67
5 10 0.72 300 0.72 10 0.72
25 10 10 0.72 400 0.77 10 0.72
15 1 0.72 200 0.77 10 0.72
5 10 0.73 200 0.76 10 0.72
50 10 10 0.74 100 0.78 10 0.74
15 10 0.75 200 0.78 10 0.75
5 10 0.74 400 0.76 10 0.74
100 10 10 0.76 400 0.78 10 0.75
15 10 0.76 400 0.78 10 0.76
5 10 0.79 100 0.80 10 0.78
200 10 10 0.79 300 0.80 10 0.78
15 10 0.80 300 0.80 10 0.80
20 10000 0.80 200 0.80 1000000 0.80
25 10000 0.80 100 0.80 10000 0.81
5 10 0.78 200 0.80 10 0.78
400 10 10 0.79 200 0.80 10 0.79
15 10 0.81 200 0.80 10000 0.83
20 10000 0.83 200 0.80 100000 0.84
25 10000 0.83 400 0.80 100000 0.83
5 10 0.78 100 0.76 10 0.78
600 10 10 0.80 300 0.80 10 0.79
15 10000 0.84 200 0.80 100000 0.85
20 10000 0.85 100 0.80 100000 0.85
25 10000 0.84 400 0.80 100000 0.85
5 10 0.78 200 0.80 10 0.78
800 10 10 0.80 300 0.80 10 0.79
15 10000 0.86 200 0.80 100000 0.86
20 10000 0.85 400 0.81 100000 0.85
25 10000 0.85 400 0.81 100000 0.86
Cuadro B.1: Selección de parámetros con Word2Vec (SkipGram) como extracción de ca-
racterı́sticas
78
Apéndice C. Estructura de archivos del proyecto y
puesta en marcha del mismo
En este apéndice, se pretende explicar paso por paso las órdenes que habrı́a que ejecutar
para obtener los resultados, analı́ticas y gráficos mostrados en el trabajo de forma que
el lector pueda replicar el proceso o realizar los cambios pertinentes para utilizar este
trabajo como base para una posible ampliación.
Para una mejor explicación, vamos a suponer que se desea rehacer el proceso completo
en todas sus fases con nuevos datos extraı́dos.
Es necesario contar con Python versión 3 instalado, y si se está trabajando en una máquina
Windows, será necesario tenerlo como variable del sistema para poder ejecutar Python
en cualquier momento desde la CMD de Windows.
El proyecto entero está en mi repositorio en GitHub directo para ser clonado y poder
trabajar con él. Para poder acceder a el tendremos que tener instalado Git en nuestra
máquina y tendremos que estar logueados correctamente en el mismo.
Una vez tenemos estas dos cosas, en la carpeta deseada, tendremos que ejecutar el
comando para clonar el proyecto.
79
C.C.2 Estructura de directorios
project
data
analitics
*.png
modelos
*.pkl
tweet15k etiq neutros.csv
tweet15k etiq.csv
tweet15k nonulos.csv
tweet15k nulos.csv
tweet15k.csv
datos nuevos
analitics
*.png
modelos
*.pkl
tweetXXXX etiq neutros.csv
tweetXXXX etiq.csv
tweetXXXX nonulos.csv
tweetXXXX nulos.csv
tweetXXXX.csv
lexicos
crisol
emoji
mlsenticon
rae
spl
claves twitter.py
corpus analitics.py
labeling data.py
modelado.py
preprocessing data.py
twitter scrapper.py
80
C.C.3 Extracción de los datos de Twitter
Para extraer nuevos datos basta con ejecutar el archivo ./twitter scrapper.py con
una serie de anotaciones anteriores. Para realizar una extracción se debe haber creado
una cuenta de desarrollador de Twitter como hemos comentado ya. Con dicha cuenta,
extraeremos las claves necesarias para acceder a la API de Twitter y estas se deben
situar correctamente en un archivo que se llame claves twitter.py que irá situado en el
directorio principal como se indica en la estructura. Dicho archivo debe tener el formato
de la imagen C.2 para poder acceder correctamente a la API.
$ python twitter_scrapper.py
$ python twitter_scrapper.py 4000
Las técnicas de preprocesamiento de los tweets tanto para términos como para emojis,
se encuentran en el archivo ./preprocessing data.py, que será invocado por primera
vez en el siguiente paso que corresponde con el sistema de etiquetado de los tweets. Las
técnicas utilizadas han sido ya explicadas en la sección 2.4.2.
81
C.C.5 Etiquetado de los datos
Para el etiquetado de los datos, se utiliza el archivo labeling data.py. Deberemos indi-
carle como argumento el archivo que deseamos etiquetar, en este caso el que acabamos
de extraer. Esto se puede conseguir con el comando:
$ python labeling_data.py \\
datos_nuevos/tweetsXXXX.csv > datos_nuevos/resultados_etiquetado.txt
Las razones para hacer este volcado, pasan por pensar que si queremos utilizar un
número muy elevado de tweets, estarı́amos hablando de un tiempo de ejecución muy
elevado, y por tanto, solo se deberı́a ejecutar una vez.
82
C.C.6 Análisis del corpus
• freq emojis tweet.png y freq emojis tweet lexico.png: Dos gráficos de barras
que muestran la distribución de los tweets que contienen un número determinado
de emojis. El primer archivo cuenta todos los emojis y el segundo solo los emojis
que aparecen en el léxico de emojis utilizado.
• comparativa freq emojis tweet.png: Gráfico que compara los dos gráficos de
barras anteriores para ver como se reducen los tweets con un número elevado de
emojis.
$ python corpus_analitics.py \\
datos_nuevos/tweetsXXXX.csv > datos_nuevos/resultados_analisis_corpus.txt
83
de voto por mayorı́a implementado con estos tres algoritmos. El archivo que le tenemos
que pasar como argumento ya no es el conjunto de datos inicial, sino el conjunto de datos
ya etiquetado y sin los tweets “neutros” (./datos nuevos/tweetsXXXX etiq.csv).
$ python modelado.py \\
datos_nuevos/tweetsXXXX_etiq.csv > datos_nuevos/resultados_clasificación.txt
A continuación, se muestra el resumen del proceso explicado por el que se podrı́a replicar
el trabajo entero con un conjunto de datos nuevo que conste de 4000 tweets.
84