Mostrando entradas con la etiqueta estilometría. Mostrar todas las entradas
Mostrando entradas con la etiqueta estilometría. Mostrar todas las entradas

jueves, 23 de junio de 2016

¿Es Unidos Podemos más Unidos o más Podemos? Clasificación y aprendizaje automático de programas electorales

Llevo dos posts sobre estilometría de las elecciones generales españolas del 26 de junio de 2016. En el primero realicé varios clusters e intenté observar si ciertos partidos habían copiado el anterior programa electoral. En el segundo colacioné las dos versiones del programa de Unidos Podemos y encontré alguna anomalía.

En este post lo que me pregunto es: ¿Es el programa de Unidos Podemos más similar a los anteriores de Izquierda Unida o a los de Podemos? Para ello voy trabajar de una manera similar al post en el que intenté descubrir mediante aprendizaje automático qué partidos eran de izquierda  y cuáles de derecha. En este caso también utilizo aprendizaje automático supervisado (o clasificación). La máquina aprende cómo son los textos de IU y de Podemos a partir de los programas electorales de las anteriores elecciones generales, de las europeas y del texto marco para las autonómicas y municipales:

Posteriormente le damos a la máquina dos tareas diferentes. En primer lugar le damos un conjunto de textos para comprobar si consigue clasificar los textos correctamente, un test. En concreto le doy seis programas electorales de diferentes comunidades autónomas por cada partido:
Y por último le doy las dos versiones (¡ya que ahora sabemos que son algo diferentes, probemos ambas!) del programa electoral de Unidos Podemos para que tome la decisión de si le parece más similar a Podemos o a IU:

Como casi siempre, trabajo con el paquete de R stylo para estilometría, en concreto con la función classify(). Realizo la prueba desde las 1000 MFW hasta las 10000 MFW y utilizo la distancia textual Eders Delta.

Resultados de stylo


Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

1000 MFW , culled @ 0%,  11 of 12    (91.7%)



Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

2000 MFW , culled @ 0%,  11 of 12    (91.7%)



Podemos_2015_A_Asturias     -->     IU
Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

3000 MFW , culled @ 0%,  10 of 12    (83.3%)



Podemos_2015_A_Asturias     -->     IU
Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

4000 MFW , culled @ 0%,  10 of 12    (83.3%)



Podemos_2015_A_Asturias     -->     IU
Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

5000 MFW , culled @ 0%,  10 of 12    (83.3%)



Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

6000 MFW , culled @ 0%,  11 of 12    (91.7%)



Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

7000 MFW , culled @ 0%,  11 of 12    (91.7%)



Podemos_2015_andalucia     -->     IU
UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

8000 MFW , culled @ 0%,  11 of 12    (91.7%)



UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

9000 MFW , culled @ 0%,  12 of 12    (100%)



UniPod_2016_Generales_IU     -->     Podemos
UniPod_2016_Generales_Podemos     -->     Podemos

10000 MFW , culled @ 0%,  12 of 12    (100%)

General attributive success:  109 of 120 (90.8%)

Visualización de los resultados e interpretación
En general el programa consigue reconocer bastante bien si los textos autonómicos son de IU o de Podemos. A partir de 1000 MFW reconoce entre 10 y 11 textos de un total de 12 de manera correctamente: el Podemos de Andalucía y de Asturias (solo desde 3000 a 5000  MFW) le parece IU. A partir de las 9000 MFW clasifica todos los textos autonómicos correctamente. ¡Bien!

¿Y qué dice de Unidos Podemos?
 
Lo tiene claro: el programa de Unidos Podemos es clasificado como de Podemos y no de IU. Ese resultado ocurre en todos los rangos de MFW, y ocurre tanto con la versión del programa de IU como de Podemos. Es decir, aunque habíamos señalado que el estilo de los dos programas era algo diferente y aunque estamos analizando el estilo del texto, esas diferencias no son suficientemente fuertes como para que esas versiones diferencien pertenencia a partido.


Como en otras ocasiones, las conclusiones son en parte esperables (¡Podemos ES el hermano mayor en escaños de la coalición!). Pero están sostenidas por algo más que "pues a mí me parece...".

Seguir leyendo este post...

sábado, 18 de junio de 2016

¿Escribimos un nuevo programa o copiamos el anterior? Estilometría sobre elecciones generales 2016

Nuevas elecciones > incremento en el corpus de programas electorales > nuevo post sobre estilometría política. Las elecciones generales en España del 26 de junio de 2016 se caracterizan por ser en realidad la repetición de las anteriores. Ni la época, ni los candidatos, ni los partidos ni (en principio) las ideas han cambiado. Así que ¿habrán cambiado los textos? ¿Su estilo? Quitando claro la excepción de Unidos Podemos y sus versiones en Cataluña, Valencia y Galicia (cuyos textos no están representados aquí por diferentes razones).

En primer lugar he realizado un análisis de la distancia textual mediante Delta. Dependiendo de la cantidad de palabras a utilizar los resultados varían notablemente. Aquí un ejemplo de los resultados de los 4000 y 6000 MFW:

Como vemos en el primero, el PP forma su propia rama mientras que en el segundo caso aparece bastante mezclado con los programas del PSOE. Por eso he considerado en  realizar un Consensus tree que agrupe los diferentes resultados entre 1000 y 10 000 MFW en un solo análisis:
Como vemos, PNV y UPyD tienen sus propias ramas perfectamente diferenciadas. IU y Podemos muestran relaciones similares en sus programas de 2011 y 2015. Curiosamente su programa electoral unido de 2016 no aparece entre los textos. En el caso del PP y PSOE, sus programas de 2015 y 2016 aparecen emparejados, mientras que los otros textos aparecen en diferentes lugares. Finalmente hay un grupo de tres textos que en realidad se pueden considerar tres textos aislados: Unidos Podemos 2016, Ciudadanos 2016 y PP 2011.

Resulta sorprendente que el programa de Unidos Podemos no aparezca en la misma rama en la que encontramos los textos de IU y Podemos anteriormente. Por lo visto negociar un programa electoral no produce un término medio entre los programas anteriores de los partidos. Al menos en su estilo, que es de lo que la estilometría parte.

Aún más sorprendente resulta que el programa de Ciudadanos 2016 no esté estrechamente emparentado con su programa de 2015. ¿Qué puede explicar esta diferencia? Lo desconozco.

Porque en realidad uno esperaría que los partidos le hubiesen echado un poquito de cara y que en realidad hubiesen presentado el mismo programa que hace 6 meses, maquillándolo un poco y cambiando las fechas y fotos. De hecho podemos intentar medir qué partidos se han plagiado a sí mismos. Para ello troceamos cada texto en cadenas de 7 palabras (7-gramas), unidades del tipo "centros tecnológicos inspirados en los advanced manufacturing" o "como una inversión no como un gasto". Esperamos que estas unidades sean suficientemente largas como para considerar que no se repetirán aleatoriamente y que su coaparición en varios textos debería representar un relación de copia y pega entre textos. Con esa base, realizaremos un PCA cuyo resultado es un representación bidimensional de los textos:
El partido que se ha plagiado más a sí mismo es el PSOE (1945 7-gramas comunes en los programas de 2015 y 2016), quien queda apartado del resto en el eje horizontal (PC1). Los siguientes partidos que más han copiado-pegado su propio programa son en este orden PP (1082 7-gramas comunes), UPyD (¡943 7-gramas en los tres programas!  ¡se llevan copiando desde 2011 hasta el día de hoy!) y PNV (710 7-gramas comunes).

El resto de partidos (Ciudadanos, IU, Podemos y Unidos Podemos) no presentan repeticiones notables de cadenas de 7 palabras y por eso están tan cerca del valor 0 en ambos ejes. Solo algunos 7-gramas aparecen en programas de partidos muy diferentes, como por ejemplo: "a lo largo de toda la vida", "la participación de los ciudadanos en la", "por debajo del umbral de la pobreza", etcétera.

Es curioso observar que la repetición señala principalmente relaciones entre textos muy similares y no sencilla similitud del estilo. No vemos que los textos del PSOE y PP del 2011 estén a medio camino entre el valor 0 y los textos de 2015-2016. La idea intuitiva de que cadenas relativamente largas podrían señalar copia entre textos parece validarse.

Por supuesto hay dos manera de interpretar la repetición de cadenas largas en diferentes textos: como señal de desidia o como señal de coherencia. Uno puede valorar que el país no ha cambiado desde diciembre de 2015 y que por lo tanto no hay que cambiar los textos. Puede ser cierto, aunque en realidad lo que aquí se analiza no es el fondo del texto (las ideas) sino la superficie del texto (su estilo). Se puede expresar la misma idea de varias maneras y la estilometría no reconocerá su similitud.

Entiendo bastante bien que un partido como UPyD, que está para que lo rematen, quiera ahorrarse cualquier trabajo y reutilice el texto. Lo sorprendente es que en realidad los dos partidos que más han copiado sean a su vez los más grandes y con mayores medios. Si no les faltan medios, será  que les falta interés.

Seguir leyendo este post...

domingo, 13 de diciembre de 2015

Comparación léxica de los programas electorales del 20D 2015

Todas las pruebas que he hecho hasta ahora con estilometría sobre los programas electorales daban información general sobre los programas electorales, pero no aportaban información sobre el contenido o los conceptos clave de los textos. Por eso en este caso voy a utilizar la función oppose de stylo. El objetivo de esta función es contraponer dos grupos de textos y rescatar aquellos términos léxicos que en un grupo están sobrerrepresentados y en el otro infrarrepresentados. Esta función está basada en el concepto de Burrow's Zeta. Siguiendo los resultados de nuestro anterior experimento sobre derecha (PP, PSOE y Ciudadanos_2015) e izquierda (IU, Podemos, UPyD y Cs_2008), en la siguiente imagen aparecen a la derecha las palabras preferidas por los partidos de la derecha  y los de la izquierda:


Encontramos que términos directamente relacionados con los partidos aparecen entre las palabras más frecuentes (socialistas, izquierda, iu...). Es lógico que estas palabras aparezcan frecuentemente en los programas del partido y no en los del contrincante. También es interesante ver que los partido de izquierda  proponen, mientras que los de derecha impulsan y promueven. Pero lo cierto es que los resultados son bastante complicados de interpertar: parece que la derecha utiliza más verbos en primera persona mientras que los de la izquierda utilizan más sustantivos. No sé interpretar eso ni en clave política ni en clave estilística. Así que decidí quedarme solamente con aquellas palabras cuyo contenido semántico es más fácil de descifrar: los sustantivos. Y para intentar eleminar el ruido que aporta el plural y el singular, he reunido ambos tipos de formas en el lema. Para realizar este paso he utilizado la herramienta Freeling y posteriormente limpié ciertos errores que la heramienta había cometido al analizar lingüísticamente los encabezamientos. Para el futuro sería positivo tener los programas en XML-TEI. ¿Alguien se anima a pedir un proyecto para hacer esto y publicarlo en abierto y Creative Commons :) ?

Es decir, que de los textos originales hemos borrado todas las categorías gramaticales que no fuesen nombres (propios o comunes) y además hemos eliminado la diferencia entre singular y plural. Sobre esta lista de sustantivos realicé un árbol de consenso desde las 1000 hasta las 5000 palabras más frecuentes. El resultado:

Como vemos el resultado es bastante similar al que vimos con los trigramas, aunque no idéntico:
  • PP y PSOE siguen en una rama
  • UPyD_2011 y 2015 tiene su propia rama independiente
  • El resto de partidos están en otra rama, aunque en esta hay diferencias: IU está organizado en una rama propia; Podemos, Ciudadanos y UPyD_2008 comparten rama
Estos cambios respecto a los anteriores resultados parecen señalar que IU y Podemos comparten una manera de expresarse similar y a su vez PP, PSOE y Cs_2015; pero si vamos a los conceptos (representados con los sustantivos), Podemos se desliga de IU y se acerca más a UPyD y Ciudadanos; y a su vez Ciudadanos deja de estar relacionado con PP y PSOE, también en su versión 2015. Parece que los sustantivos han conseguido separar relativamente bien a los partidos nuevos.

Pero volvamos a la comparación de sustantivos y veamos los resultados:


En este caso las diferencias son mucho más fácilmente apreciables. Recordemos que los sustantivos de la columna de la derecha son los que PP, PSOE y Cs_2015 prefieren utilizar; mientras que los sustantivos en la columna izquierda son los preferidos por IU, Podemos, UPyD y Cs_2008. Vamos a ir comentando algunos grupos de palabras (¡y prometo que he intentado ser equilibrado en este comentario!):
  • La izquierda utiliza derogación, supresión, limitación, revisión, prohibición. Es decir, sustantivos que señalan un cambio en cuanto a lo que se ha hecho hasta ahora
  • La derecha usa reto, respuesta, desafío,  modernización, caminio, senda, horizonte; palabras que señalan un problema actual y su resolución en el futuro
  • Además, frente a la ruptura de la izquierad, la derecha utiliza más conceptos que representan llegar juntos a acuerdos: diálogo, consenso, flexibilidad, cohesión, interlocutor, interconexión
  • La izquierda utiliza sustantivos que señalan aspectos negativos de la economía como precariedad, privatización, recorte, explotación
  • La derecha usa conceptos positivos, muchas veces relacionados con la economía: éxito, talento, potencial, confianza, fruto, eficacia, productividad, ventaja, vanguardia, crecimiento, motor, bienestar
  • La izquierda utiliza conceptos positivos relacionados con la democracia (o la denuncia de su falta): referéndum, censo, privilegio,  fraude, circunscripción, debate, democratización, regeneración, constitucional, ciudadanía
  • La derecha utiliza conceptos geográficos amplios, desde las Comunidades Autónomas hasta el ámbito internacional: comunidad, autónoma, internacionalización, globalización
  • La izquierda utiliza más conceptos desde el ámbito municipal hasta las comunidades autónomas: circunscripción, ayuntamiento, pueblo, Navarra
  • La izquierda habla de la iglesia católica y de la religión: iglesia, confesión, religión, laicismo, católica
  • La izquierda menciona a sus grupos clásicos de votantes, como son sindicatos, estudiantes y trabajadores agrarios; también menciona aspectos relacionados con las viviendas: casa, alquiler, sindicato, beca, agricultura
  • La derecha menciona a los autónomos: emprendimieneto 
Vamos que resumiendo:
  • La izquierda (IU, Podemos, UPyD) se destaca por hablar de cambio, de situación económica injusta, de renovación democrática, de ámbitos regionales pequeños, de religión y de algunos aspectos concretos de sus votantes
  • La derecha (PP, PSOE y Cs) se destaca por hablar de los retos del futuro, de los aspectos positivos de la economía, de abordar problemas de manera dialogada, de aspectos regionales amplios y de autonómos
Ustedes me dirán que para saber esto se podían haber ido a la página de Wikipedia sobre derechas e izquierdas y yo no tendría ni que haber hecho este experimento ni haber escrito este post, porque lo que señalo es una obviedad detrás de la otra. Cierto... en parte. El hecho de que nos encontremos cosas obvias hace que atestigue que el eje derecha e izquierda sigue siendo válido: si no lo fuese, estaríamos ante un conjunto rándom de sustantivos. En segundo lugar, esto da legitimidad a utilizar Burrow's Zeta a programas electorales (cosa que hasta donde yo sé, no se hace por ahora).

Pero no todo es del todo obvio: esperaba que los partidos de derecha hablasen más sobre inversión, beneficios, impuestos, pensiones... Y no parece. Tampoco me parece del todo obvio que la derecha se muestre tan dialogante y flexible si tenemos en mente como se han comportado con Cataluña, por mencionar un caso. Ni es obligatoriamente un clásico de la izquierda exigir más democracia, pero en la comparación queda bastante claro que la izquierda española lo reclama. El resultado tampoco muestra que ambas ramas se distingan principalmente por otros aspectos como feminismo, corrupción, ecología, cultura, educación, monarquía...

Desde luego este experimento no es definitivo: hay mucho que mejorar en el formato de entrada de los textos, la lematización y la interacción del formato de salida de Freeling y cómo lo interpreta el tokenizador de stylo. Como en los casos anteriores, espero que el experimento pueda aportar algo interesante, pueda aportar una nueva manera de mirar los programas electorales y quizás anime a hacer más experimentos sobre los textos.

Seguir leyendo este post...

sábado, 12 de diciembre de 2015

Machine learning con programas electorales: ¿qué partidos son de izquierda y derecha?

En el anterior post he probado unsupervised machine learning para organizar (cluster) los programas políticos. Para ello al programa solo le dábamos los textos, no le aportábamos más información sobre si algunos partidos eran de derechas o de izquierdas. Esa falta de información es lo que hace que el método sea unsupervised. En este post voy a hacer lo contrario.

Supervised machine learning

Supervised machine learning  se utiliza cuando tenemos un conjunto de elementos que estamos seguros que pertenecen a una clase concreta. El programa aprende (por eso se llama machine learning) qué características son propias a esas clases; posteriormente se le pide al programa que aplique ese conocimiento a otros nuevos elementos.

¿Muy abstracto? Vamos a por un ejemplo sobre autoría literaria: escogemos un grupo de textos de dos autores cuya autoría está clara. Hacemos que el programa aprenda qué rasgos distinguen los textos de un autor y los textos del otro. Una vez realizado, le entregamos al programa otro texto cuyo autor creemos que es uno de los dos analizados y vemos qué nos responde. 

Supervised Machine learning con programas políticos


Vamos a aplicar el mismo método a programas políticos; y en vez de buscar a un autor, vamos a preguntarnos por la orientación ideológica de cada programa. El eje tradicional de la política izquierda-derecha ha sido puesto en duda tanto por los votantes (PSOE, PP, la misma mierda es) como por los nuevos partidos como Ciudadanos, UPyD o Podemos. ¿Pero realmente ya no podemos ordenar a los partidos en ese eje?

Creo que tanto los partidos como los votantes están de acuerdo en que el PP es de derechas y que IU es de izquierdas, ¿cierto? A nadie se le caen los anillos por decir eso. Es decir, tenemos elementos cuya clase no está discutida. Pues esos partidos van a representar el conjunto de datos de los que nuestro programa va a aprender qué rasgos son típicos de izquierdas y de derechas.

Los rasgos sobre los que lo va a aprender son desde las 1000 hasta las 5000 palabras más frecuentes, de nuevo voy a implementarlo con stylo, mediante la función classify y he utilizado Support Vector Machines .

Comprobando el método


Antes de aplicar ese conocimiento a los otros partidos, vamos a hacer una prueba para ver si el programa hace el trabajo de manera aceptable. Vamos a darle los programas de UP y del PP 2015 (programas que no formaban el conjunto de datos de los que ha aprendido) para ver si los clasifica correctamente. El resultado es el siguiente:

1000 MFW , culled @ 0%,  2 of 2    (100%)
2000 MFW , culled @ 0%,  2 of 2    (100%)
3000 MFW , culled @ 0%,  2 of 2    (100%)
4000 MFW , culled @ 0%,  2 of 2    (100%)
5000 MFW , culled @ 0%,  2 of 2    (100%)

¿Qué significa esto? Pues que tanto en las 5 pruebas desde las 1000 hasta las 5000 palabras, tanto el programa de UP como el de PP han sido reconocidos correctamente como izquierda y derecha. Es decir, hay un acierto de 2 de 2, 100%.

(Sé que probarlo con dos programas de los mismos partidos no sería suficiente para demostrar que el experimento funciona de manera totalmente científica, pero creo que es una aproximación válida si queremos poder publicar algo antes de las elecciones.)

Resultados con 1000 palabras más frecuentes

Ahora que  ya tenemos algún dato de que el programa ha hecho  bien 2 tareas, vamos a ponerlo a prueba con los programas de los otros partidos. ¿A qué partido pondrá en la izquierda? ¿A cuál en la derecha? Los resultados son los siguientes, según las 1000 palabras más frecuentes:

CS_2008_Generales     -->     izquierda
CS_2015_Generales     -->     izquierda
Podemos_2015_Generales     -->     izquierda
PSOE_2004_Generales     -->     izquierda
PSOE_2008_Generales     -->     derecha
PSOE_2011_Generales     -->     derecha
PSOE_2015_Generales     -->     izquierda
UPyD_2008_Generales     -->     izquierda
UPyD_2011_Generales     -->     izquierda
UPyD_2015_Generales     -->     izquierda

1000 MFW , culled @ 0%,  2 of 2    (100%)

Por ahora el programa solo localiza los programas del PSOE_2008 y 2011 en la derecha. Hay que tener en cuenta que de los cuatro programas electorales del PSOE presentes en este análisis, los de 2008 y los 2011 son los que el PSOE escribió desde el gobierno, los de 2004 y los de 2015 desde la oposición. O sea, que con las 1000 palabras más frecuentes, el programa localiza al PSOE como derecha cuando gobierna. Al resto de partidos en la izquierda.

Resultados hasta 5000 palabras más frecuentes

Vamos a ver ahora qué pasa si hacemos los mismos análisis hasta las 5000 palabras más frecuentes:

CS_2008_Generales     -->     izquierda
CS_2015_Generales     -->     izquierda
Podemos_2015_Generales     -->     izquierda
PSOE_2004_Generales     -->     izquierda
PSOE_2008_Generales     -->     derecha
PSOE_2011_Generales     -->     derecha
PSOE_2015_Generales     -->     izquierda
UPyD_2008_Generales     -->     izquierda
UPyD_2011_Generales     -->     izquierda
UPyD_2015_Generales     -->     izquierda

2000 MFW , culled @ 0%,  2 of 2    (100%)



CS_2008_Generales     -->     izquierda
CS_2015_Generales     -->     izquierda
Podemos_2015_Generales     -->     izquierda
PSOE_2004_Generales     -->     izquierda
PSOE_2008_Generales     -->     derecha
PSOE_2011_Generales     -->     derecha
PSOE_2015_Generales     -->     izquierda
UPyD_2008_Generales     -->     izquierda
UPyD_2011_Generales     -->     izquierda
UPyD_2015_Generales     -->     izquierda

3000 MFW , culled @ 0%,  2 of 2    (100%)



CS_2008_Generales     -->     izquierda
CS_2015_Generales     -->     izquierda
Podemos_2015_Generales     -->     izquierda
PSOE_2004_Generales     -->     derecha
PSOE_2008_Generales     -->     derecha
PSOE_2011_Generales     -->     derecha
PSOE_2015_Generales     -->     izquierda
UPyD_2008_Generales     -->     izquierda
UPyD_2011_Generales     -->     izquierda
UPyD_2015_Generales     -->     izquierda

4000 MFW , culled @ 0%,  2 of 2    (100%)



CS_2008_Generales     -->     izquierda
CS_2015_Generales     -->     derecha
Podemos_2015_Generales     -->     izquierda
PSOE_2004_Generales     -->     derecha
PSOE_2008_Generales     -->     derecha
PSOE_2011_Generales     -->     derecha
PSOE_2015_Generales     -->     derecha
UPyD_2008_Generales     -->     izquierda
UPyD_2011_Generales     -->     izquierda
UPyD_2015_Generales     -->     izquierda

5000 MFW , culled @ 0%,  2 of 2    (100%)

General attributive success:  10 of 10 (100%)

Como vemos, algunos programas han ido pasando de la izquierda a la derecha según ampliábamos la cantidad de palabras por analizar. Vemos algo que ya habíamos visto en el post anterior: en primer lugar, el PSOE pasa a ser considerado siempre de derechas, da igual si en la oposición o en el gobierno. En segundo lugar, Ciudadanos_2015 pasa también a ser parte de la derecha.

Interpretación

En primer lugar hay que señalar que el método ha sabido no solo detectar correctamente la tendencia política de los programas actuales del PP y de UP, sino que también ha sabido ordenar correctamente a Podemos, cuya orientación política es clara. En segundo lugar, el método llega a conclusiones similares a opiniones muy extendidas y que encajan con opiniones extendidas:
  • UPyD es de izquierda
  • Ciudadanos era de izquierda, hoy en día es de derechas
  • El PSOE ha abandonado la izquierda; es obvio cuando está en el gobierno, hay que ir más al fondo del programa cuando están en la oposición
En tercer lugar, el método consigue llegar a diferenciaciones más sutiles según recoge más palabras. Parece que según más cantidad de programa electoral tiene en cuenta, mejor sabe calar a los partidos.

Seguir leyendo este post...

viernes, 11 de diciembre de 2015

Estilometría políticas: elecciones generales 2004-2015

Como os podíais imaginar no iba a dejar pasar estas elecciones sin hacer algunas pruebas estilométricas sobre los programas electorales. ¡Vamos allá!

¿Qué es esto de la estilometría?

Como he comentado en otros posts en elecciones anteriores, la estilometría es el estudio de la frecuencia de palabras en textos con el objetivo de encontrar similitudes entre ellos. Principalmente se ha utilizado para investigar autoría literaria, aunque también se ha aplicado para estudiar las diferencias de estilos entre hombres y mujeres, la época que fue escrito o el género literario. La idea general es que los textos que pertenecen a un clase común (textos de tal autor, textos de tal género) comparten ciertas características léxicas que pueden observarse estadísticamente. Estas similitudes son encontradas y visualizadas mediante diferentes métodos de unsupervised machine learning.

¿Por qué estilometría en programas políticos?

Los programas políticos son textos fácilmente comparables ya que comparten características concretas con valores muy claros: un programa político es de un partido, de un año y para un  ámbito (generales, europeas...). Después de unas pocas pruebas se observa que los textos aparecen organizados por partidos políticos, pero que también se observa información sobre tendencia política, temporal e incluso de líder político.

Método


En este caso he utilizado trigramas, es decir unidades del tipo "las comunidades autónomas", "común para españa", "acceso a la", "a través de"... Es decir, fragmentos de tres (tri+) palabras (+gramas). La idea detrás de utilizar trigramas en vez de palabras únicas (o unigramas), es que con los trigramas se recogen además de aspectos léxicos, ciertos aspectos sintácticos.

Lo he implementado con stylo (of course) y he utilizado una medida de distancia muy utilizada en las Humanidades Digitales llamada Delta, propuesta por Burrow pero en la versión de Maciej Eder ya que hay estudios que señalan  que esta funciona mejor para lenguas flexionantes como el español. Los datos los visualizo a través de un dendograma, es decir, una estructura que imita un estructura de árbol. La distancia en el eje horizontal señala la similitud del estilo entre los textos. Veamos los resultados utilizando los 1000 trigramas más frecuentes

Resultados: dendogramas


Antes de pasar hablar de los resultados, asegurémonos de todos estamos interpretando la imagen de la misma manera; vamos a observar solo los resultados del PP y del PSOE. Como vemos, los textos del PSOE aparecen organizado; el PSOE_2011 y el PSOE_2008 serían textos muy similares entre sí; el siguiente más similar a estos dos es el PSOE_2015; y el siguiente más similar a estos tres es el PSOE_2004. Hasta aquí de acuerdo, ¿verdad? Si seguimos la dirección de la rama hacia la izquierda veremos que los textos más similares a los del PSOE son los del PP_2015 y PP_2008. El siguiente más similar a estos 6 es el PP_2004; el siguiente más similar a estos 7 es el PP_2011.


Si echamos un vistazo al árbol en su conjunto, veremos que hay dos grandes ramas: una con el PP y el PSOE; la otra con el resto de partidos (UPyD y Ciudadanos más juntitos; IU y Podemos arrimados). Por ahora no hay resultados demasiado extraños como que Ciudadanos, IU y PP forman una rama, ¿verdad?

Pero ¿qué pasa esi en vez de utilizar los 1000 trigramas más frecuentes utilizados los 5000? Pues:

Como vemos la imagen ha cambiado bastante; UPyD_2015 y 2011 ahora forman su propia rama exiliada; los textos del PP ahora forman un grupo más homogéneo y ¡Ciudadanos_2015 se mete entre el PSOE (y el PP)!

¿Qué resultados elegimos: el de los 1000 trigramas o el de los 5000?

Más resultados: árbol de consenso


Una manera de resolver este problema es combinar los resultados en un árbol de consenso que refleje diferentes dendogramas. La siguiente imagen es un árbol de consenso que recoge 5 dendogramas diferentes, desde los 1000 hasta los 5000 trigramas más frecuentes:


Aquí el punto de mayor división no está a la izquierda como hasta ahora habíamos visto. En el árbol de consenso se encuentra en el centro. Y del centro de este arbolito salen tres ramas:
  1. UPyD_2011 y 2015
  2. PP, PSOE y CS_2015
  3. IU-UP, Podemos, Cs_2008 y UPyD_2008
Dentro de esas grandes ramas, observamos que el método tiende a agrupar de manera bastante correcta los textos de los partidos. Y dentro de las ramas por partidos (en las divisiones más sutiles) observamos que el método tiende a agrupar los textos por cercanía cronológica. En fin, que el método, sin saber nada de política, ni de español, ni de historia, ha sabido distinguir bastante bien tendencias políticas, partidos y años. ¿Qué más pedirle?

Interpretación


Vale José, el método es la pera, pero ¿qué aporta esto de manera práctica? Pues creo que otra mirada sobre los programas y los partidos. Está habiendo mucha discusión sobre el grado de renovación del PSOE, si Ciudadanos es de centro derecha o de centro izquierda, si Podemos se está moderando... Creo que estos resultados pueden aportar algo más de luz desde un sitio que ni los partidos ni los medios controlan. Personalmente estos resultados me hacen pensar varias cosas:
  • Hay una rama izquierda-centro izquierda donde está IU, Podemos y donde estaban Cuidadanos y UPyD
  • Hay una rama tradicional donde se encuentran el PSOE, el PP y Ciudadanos
Por partidos, observo:
  • PP: el partido con menos variación. Conservadores en el estilo y en la política
  • PSOE: a diferencia de los análisis realizados en las europeas, es un partido más cercano al PP que la izquierda; la marcha de Zapatero y la llegada de Sánchez no ha traído ningún cambio notable
  • IU-UP: Garzón parece haber modificado el discurso de su partido y de hecho ahora aparece más relacionado con nuestro siguiente partido
  • Podemos: es difícil saber si se ha moderado, pero desde luego el texto más similar al de Podemos es el de IU
  • Ciudadanos: un caso interesante ya que en 2011 no se presentó. Ciudadanos ha pasado del centro izquierda en el que estaba en 2008 al centro derecha en 2015. Nada sorprendente, según la percepción de los electores y su reciente afiliación europea al Partido Liberal
  • UPyD: en 2008 UPyD tenía un discurso de centro izquierda muy similar a Ciudadanos. Posteriormente encontró una manera radicalmente diferente de expresarse que ha mantenido en estas elecciones. Un caso muy interesante para mayor estudio, lástima que le queden dos telediarios
Hasta aquí mis análisis y mis interpretaciones. Si la idea os atrae pero mi manera no os convence, descarga stylo, los programas electorales y déjame un comentario para que comparemos resultados ;)

Actualización

Los mismos datos hasta ahora comentados los he convertido en una tabla de relaciones de tipo grafo y lo he visualizao a través de Gephi. Es decir, la siguiente imagen se basa en los mismos datos que el anterior árbol de consenso; la diferencia es que en el árbol de consenso aparecían solamente señalada la relación de un texto con otro(s) texto(s) más cercano. En el árbol de consenso no veíamos por ejempo si algún programa electoral de IU tenía alguna relación (por ínfima que fuese) con el PSOE. La siguiete imagen sí reproduce esas relaciones de caracter terciario:


 Anexo: enlaces a los programas electorales:

  • https://www.ciudadanos-cs.org/nuestras-ideas
  • http://unpaiscontigo.es/wp-content/uploads/2015/12/Programa-Elecciones-Generales-Podemos-2015.pdf
  • www.psoe.es/media-content/2015/11/PSOE_Programa_Electoral_2015.pdf
  • http://www.pp.es/sites/default/files/documentos/programa_electoral_20d.pdf
  • http://www.unidadpopularvalladolid.org/component/jdownloads/send/6-programa/66-porgrama-unidad-popular
  • http://www.eaj-pnv.eus/adjuntos/pnvDocumentos/17970_archivo.pdf
  • upyd2015.es/wp-content/uploads/2015/12/Programa_UPYD_Elecciones_Generales_2015.pdf

Seguir leyendo este post...

sábado, 23 de mayo de 2015

Más estilometría sobre programas autonómicos españoles 2015

Después de que la semana pasada publicase algunos resultados sobre comparaciones textuales estilométricas sobre los programas electorales de la Comunidad de Madrid, decidí seguir por el mismo camino. En vez de 10 programas de una sola comunidad, decidí ampliar a 50 de 7 comunidades autónomas más los programas marcos. No he podido conseguir todos los programas: algunos son imposibles de encontrar, algunos no he podido descargarlos (por ejemplo Ciudadanos en Asturias). Las comunidades autónomas son:
  • Andalucía
  • Aragón
  • Asturias
  • Castilla la Mancha
  • Navarra
  • Madrid
  • Valencia
En este caso he realizado de nuevo un consensus tree y con esos mismos datos una visualización de tipo network analysis.

El resultado del consensus tree es:
Observamos:
  • Con excepción de un par de textos (PP y PSOE), los partidos quedan separados en dos grandes ramas
  • Dentro de esas ramas, los partidos tienden a agruparse de manera bastante clara en subramas, aunque no hay correspondencia perfecta
Si interpretamos algunos aspectos (habría muchísimo más que decir) estos datos, podremos decir que:
  • Hay dos ramas principales de la política: una que agrupa la mayor parte de programas electorales de centro-derecha y derecha (principalmente PP, UPyD y Cs); la otra agrupa a los partido de centro-izquierda e izquierda (principalmente IU, PSOE y Podemos)
  • Los partidos que solo están representados por un programa programa (Foro, Compromís, UPN, Bildu, Partido Andalucista) quedan bien representandos ideológicamente.
  • Los programas marcos muestran resultados extraños. Quizás esto se deba a que no son las formaciones autonómicas quienes los realizan, sino sus direcciones nacionales
  • Con más datos, UPyD deja de tener resultados tan anómalos: aparecen emparentados con Cs y de manera más lejana con el resto de partidos de la derecha
Si observamos el network analysis vemos resultados algo similares

Si interpretamos los resultados generales, observamos:
  • De nuevo vemos que se refleja la clásica división derecha-izquierda (más esperable que la obtenida en la CA de Madrid)
  • Aunque ambas representaciones están basadas en los mismos datos, aquí se visualiza mejor la cercanía y relación entre PSOE y PP. De hecho en esta visualización Cs y PSOE aparecen casi en el mismo eje horizontal
  • UPyD vuelve a mostrar resultados algo sorprendentes: en esta imagen aparece más cercano a partidos de izquierda, principalmente IU
  • Foro y UPN aparecen perfectamente integrados entre los textos del PP
  • Bildu y Compromis aparecen integrados entre los programas de IU
  • Podemos forma un grupo bastante homogeneo de textos (ya se observaba en el consensus tree)
Algunos datos generales que me han llamado la atención:
  • PSOE - Castilla la Mancha aparece como programa netamente de derechas
  • El marco del PP aparece entre los programas del PSOE
  • Cs Madrid es el programa más a la derecha de ese partido, integrado entre los programas del PP
  • PSOE Valencia y IU Aragón son los dos textos que más relaciones comparten con otros (qué significa esto es algo a lo que no puedo responder)
  • Los programas de Podemos Valencia y PSOE Valencia están fuertemente relacionados
  • El programa de Cs Castilla la Mancha tiene mayor relación con los textos de UPyD que con los de Cs
  • UPyD Asturias aparece sorprendentemente cerca a Foro

Seguir leyendo este post...

domingo, 17 de mayo de 2015

Estilometría: comparación de los programas electorales de CA Madrid 2015

En una semana habrá elecciones municipales y autonómicas, entre ellas en la Comunidad de Madrid. De la misma manera que realicé varios análisis estilométricos con los programas políticos de Andalucía, he recogido algunos programas políticos autonómicos de los partidos que se presentan en estas elecciones autonómicas madrileñas y he realizado algunas pruebas de comparación cuantitativa de textos entre ellos. En concreto de los partidos madrileños (con los candidatos a las elecciones de la semana que viene entre paréntesis):
  • Ciudadanos (Cs) (Ignacio Aguado)
  • IU (Luis García Montero)
  • Podemos (José Manuel López)
  • PP (Cristina Cifuentes)
  • PSOE (Ángel Gabilondo)
  • UPyD (Ramón Marcos)
Además, para el análisis resulte más consistente, he recogido los programas electorales de aquellos partidos que se presentaron en 2011. Me hubiese gustado utilizar también el de 2007, pero me ha resultado imposible encontrar los programas políticos (y eso que en ese año solo había tres partidos con representación en la Comunidad de Madrid...). Hay que recordar que durante el post hablaré de partidos, aunque en realidad hay que entender que me refiero a los textos de los programas electorales de esas formaciones en dos citas electorales. Agradezco a Miguel Ortega la ayuda para conseguir algunos programas políticos. Y reconozco la inspiración de los artículos de Regional Manifestos Project en eldiario.es.

Para quien necesite una introducción a esto de la estilometría y los tratamientos cuantitativos de textos, sugiero la guía a Humanidades Digitales, la específica sobre literatura, Macroanalysis de Jockers (2013) o Graphs, maps, trees de Moretti (2005). La política no es mi campo de conocimiento, sino la filología. Estaría encantado de colaborar con politólogos o periodistas para profundizar de manera conjunta en este ámbito.

Para este análisis he vuelto a trabajar con la estupenda herramienta stylo para realizar el análisis. En este caso he preferido utilizar todas las unidades que stylo permite analizar (las 5000 más frecuentes), para no tener que tomar ninguna decisión.

Cluster analysis

En primer lugar he realizado un cluster analysis, es decir, le pedimos al programa que vaya agrupando todos los textos según las 5000 palabras (tokens en realidad, aunque para que sea más comprensible utilizaré en el post palabras) más frecuentes:

(Nota sobre los colores: no los elijo yo, es aleatorio; sé que ver el PSOE como amarillo o Podemos de azul no es lo más intuitivo, qué se le va a hacer...)

Resultados:
  • Los programas electorales aparecen dividas en dos grandes ramas: en una PP y Cs; en la otra el resto de partidos.
  • Podríamos interpretar, claro, ambas ramas como derecha e izquierda
  • Los partidos quedan identificados casi perfectamente; solo un único caso cambia: el IU de 2011 es más similar a Podemos que a IU de 2015. En mi opinión, revelador.
  • Los partidos parecen graduados ideológicamente; los más a la izquierda son IU y Podemos, después vendría PSOE, posteriormente UPyD. Cs representa una derecha menos radical que el PP.

Consensus tree

Además del cluster analysis, he realizado también un consensus tree de los cluster analysis desde las 100 palabras más frecuentes hasta las 5000, incrementando cada vez 100 palabras. Es decir, un montón de cluster analysis hechos a la vez (por eso se llama consensus), mostrados en representación arbórea (por eso se llama tree). Este análisis es más robusto que el anterior:

El resultado son tres ramas principales, ocupadas por:
  1. PP y Cs
  2. UPyD
  3. PSOE, IU y Podemos
Es decir, que el consensus tree aparta a UPyD del resto de partidos de la izquierda. Las otras relaciones se mantiene: gradación ideológica, acierto de partidos, excepción de IU2011 y Podemos.

Si interpretamos estos resultados de manera ideológica, señalaríamos que:
  • PP y Cs son de derecha
  • IU, Podemos y PSOE de izquierda
  • UPyD se desmarca de ambos, probablemente localizándose en el centro

Principal Component Analysis

Pero esto no es lo único que podemos hacer con la estilometría y stylo, uno de los tipos de análisis más utilizados es el llamado Principal Component Analysis o PCA. Para quien quiera saber más, recomiendo el libro de Jackson, A user's guide to principal components (2003). De manera muy reducida y simplista, este análisis entiende cada palabra como una dimensión diferente; cada texto recibe un valor para cada dimensión, por lo que cada texto termina definido por valores de 5000 dimensiones (que son las palabras con las que nosotros hemos decidido trabajar, eligiendo las más frecuentes). Para posibilitar una visualización, el análisis rota esas dimensiones en dos principal components que terminan representados en clásicas coordenadas cartesianas. Lo interesante de este resultado es que se consigue visualizar una cantidad enorme de información; la desventaja es que esa rotación pierde información. Vamos a ver un ejemplo:

 
Como vemos, los programas electorales son puntos en coordenadas cartesianas. Es importante tener en cuenta que el eje de x (el horizontal) tiene un valor de 28,2%, frente a la y (o vertical) que tiene un 18,6%. ¿Qué quiere decir eso en cristiano? Que las diferencias que vemos en la horizontal son más importantes que las que vemos en la vertical.

¿Y qué vemos en este PCA?
  • PP y Cs se localizan muy cercanos, de nuevo
  • PSOE, IU y Podemos son muy cercanos
  • UPyD está aislado
Es decir, observamos resultados muy similares a los que el consensus tree nos señalaba. Aunque UPyD y PP-Cs aparecen alineados en la vertical (los tres partidos están entre valores de -1 y -0,5 de la x), en la horizontal sus valores son radicalmente diferentes: PP-Cs están entre -1 y -2, UPyD está entre 1 y 2.

Otro aspecto que hay que tener en cuenta es que aunque PP y PSOE parecen muy separados, en el valor x tienen valores casi idénticos, principalmente en el año 2011: ambos están en -1. En los programas electorales de este año la diferencia ha aumentado: el PP se ha ido al extremo, mientras que el PSOE se ha acercado a IU y Podemos.

En general este análisis resulta muy interesante ya que parece mostrar que el principal component 1 diferencia a los partidos en cuatro grupos:
  1. PP 2015
  2. PP 2011, Cs y PSOE
  3. IU y Podemos
  4. UPyD
Mientras que el  principal component 2 separa los partidos en dos grupos:
  1. UPyD, Cs y PP
  2. PSOE, IU y Podemos
Si interpretamos el PC1, diría que nos muestra la diferencia izquierda-derecha, aunque UPyD en ese caso aparece como extrema izquierda, algo que es difícil de tragar. Pero el PC2 parece indicar claramente centralismo vs. no-centralismo. Esperaría esos resultados en los programas autonómicos de Cataluña o País Vasco (entre otras comunidades), no en el de la Comunidad de Madrid.

Network analysis

Por último, realicé un Network analysis utilizando los datos del consensus tree. De esta manera conseguimos la robustez del consensus tree, pero nos permite visualizar las relaciones entre cualquiera de los textos entre ellos. Cada texto es un nodo y los nodos tienen relaciones entre ellos; cuanto más ancha sea la línea que los une, más intensa es la relación.
En este caso, claro, los colores no son aleatorios, Gephi me ha permitido elegirlos. Probablemente esta visualización es una de las más completas e intuitivas de todas las vistas hasta ahora.

Algunos datos generales de la visualización:
  • Las relaciones internas entre los programas de un partido son las más fuertes (con una excepción)
  • Los partidos parecen diferenciarse en un eje ideológico derecha-izquierda
  • Si eso fuese así, UPyD quedaría como un partido de extrema izquierda
Analizando las relaciones por partidos, observamos:
  • PP: No cambia apenas entre 2011 y 2015; sus mayores relaciones son con el PSOE2011 y con Cs
  • PSOE: En el 2011 aparecía localizado como partido de la derecha, mientras que el texto de 2015 mantiene relaciones intensas con Podemos y también (aunque menos) con IU
  • Cs: Sus principales relaciones son en primer lugar con el PSOE y en segundo lugar con el PP
  • IU: Es el único partido cuyas relaciones internas no son las más intensas: IU2011 tiene mayor relación con Podemos que con IU2015. Mantiene importantes relaciones con PSOE y UPyD
  • Podemos: parece el heredero de IU2011; tiene importantes relaciones con el PSOE, ligeras con UPyD y Cs y nulas con PP
  • UPyD: Está en las antípodas del PP. Tiene cierta relación con Podemos pero principalmente con IU2011

Conclusiones

Después de tantos dibujitos con colores y de tantos números, vamos a intentar sacar algunas cosas en claro. De nuevo, en las conclusiones hablo de partidos, y en realidad debería hablar de textos. Permitidme la metonimia:
  1. La estilometría tiene mucho que decir y que analizar sobre los programas políticos
  2. Los diferentes análisis realizados (cluster analysis, consensus tree, PCA y Network analysis) muestran resultados bastante similares, aunque con algunos matices
  3. Aunque es fácilmente observable cierta relación entre espacio ideológico (derecha vs. izquierda) en las representaciones, no parece que sea solo eso lo que vemos, a menos que se acepte que UPyD Madrid es de extrema izquierda (cosa que ni UPyD aceptaría, ni tampoco la extrema izquierda)
  4. La principal diferencia entre partidos sigue siendo derecha-izquierda (frente a otros posibles ejes como nuevo-viejo o gobierno-oposición)
  5. El eje centralista-no centralista también divide los partidos en la política madrileña
  6. Cs de Madrid y PP constituyen la derecha política, siendo Cs más moderado que el PP. El PP se ha ido más a la derecha que en las anteriores elecciones
  7. Podemos, IU y PSOE hoy en día se agrupan en la izquierda
  8. El PSOE de Madrid era muy cercano al PP en 2011, pero en estas elecciones se ha acercado a Podemos e IU
  9. La principal relación de IU Madrid 2011 no es con IU Madrid 2015, sino con Podemos. ¿Podemos entender Podemos como un heredero textual de IU?
  10. UPyD Madrid es un partido raro. No parece tan relacionado con Cs como podría pensarse. En cierta manera está relacionado con la izquierda, en cierta manera con la derecha, en cierta manera está aislado. Es una lástima que sea dudoso que se mantengan mucho tiempo. Es posible que estos resultados extraños se deban a un error sistemático en los textos
  11. Los resultados difieren algo de los que publiqué sobre las elecciones andaluces (de nuevo, UPyD) y difieren también de las pruebas que he hecho y que aún no he publicado con los programas a las elecciones europeas y nacionales de las últimas décadas
  12. Es decir, hay que seguir trabajando e investigando para tener resultados más sólidos. Con este post me gustaría invitar a politólogos y periodistas a colaborar

Seguir leyendo este post...

viernes, 20 de marzo de 2015

Estilometría sobre los programas políticos andaluces 2015

¿PSOE, PP, la misma mierda es? ¿Podemos se acerca al PSOE o a IU? ¿Ciudadanos y UPyD son lo mismo aunque no lo sepan? ¿Esos partidos son de derechas, de centro o de izquierdas? ¿El eje nuevo-viejo tiene más importancia que derecha-izquierda? Los intereses partidistas, las diferencias de discursos y el márketing político aportan respuestas alambicadas a preguntas sencillas.

Por eso, para intentar buscar respuestas sencillas y lo menos contaminadas, he hecho unas pruebas de comparación del estilo de los programas electorales. En concreto un análisis de clusters sobre las 2000 palabras más frecuentes (una cantidad de léxico utilizada en numerosos estudios estilométricos literarios) con stylo. El resultado es el siguiente:

 El resultado son dos claras ramas de la política:
  • En la primera UPyD, Cs y PP
  • En la segunda, Podemos, IU, PSOE y el Partido Andalucista
¿Cómo podemos interpretar estos datos?
  • Los partidos políticos andaluces se organizan en dos grupos: derecha e izquierda
  • Dentro de la derecha, UPyD y Cs serían más similares entre ellos
  • Podemos e IU serían los partidos más similares de la izquierda, estos mantienen una relación cercana con el PSOE y por último estos tres juntos se parecen al PA
Claro que si usamos las 2000 palabras más frecuentes nos podemos estar dejando controlar por los conceptos utilizados por unos partidos y no por otros. ¿Qué obtenemos si utilizamos solamente las 200 palabras más frecuentes (entre las que casi solo encontraremos determinantes, preposiciones, conjunciones, verbos auxiliares, etcétera)? Palabras como y, de, con, el, la, es, que... Es decir, ¿qué pasa si comparamos aquellas palabras cuyo uso es más difícilmente controlable? Los resultados: 
 Pues los resultados no cambian radicalmente:
  • El uso de esas palabras gramaticales también diferencia un grupo de derechas y otro de izquierdas
  • Aumenta la diferencia entre el PP con relación a UPyD y Cs
  • UPyD y Cs siguen siendo muy similares
  • Podemos e IU siguen siendo similares
  • El PSOE y el PA pasan a formar un grupo unidos
Como conclusión final, basándonos en los programas electorales andaluces para 2015 y en un análisis de clusters, se puede constatar que:
  • El eje izquierda-derecha continúa siendo la principal diferencia política, por mucho que muchos partidos traten de deshacerse de él
  • El eje nuevo-viejo no acaba de demostrarse en los análisis textuales
(Actualización: al revisar el post me di cuenta que la segunda imagen no era sobre las 200 palabras más frecuentes sino sobre los 200 bigramas de palabras más frecuentes. Ahora mismo se puede ver la nueva imagen, en la que han cambiado las relaciones entre IU-Podemos y PA-PSOE. Siento el error.)

Seguir leyendo este post...

miércoles, 17 de septiembre de 2014

Categorías gramaticales y estilometría: conjunciones decimonónicas vs. puntuación modernista

En el anterior post hice una primera aproximación sobre algunos métodos estilométricos, como el clustering, aplicados a las novelas españolas de la Edad de Plata. Para ese análisis utilicé las formas simples de las palabras. Pero ¿y si en vez de analizar dijo, decía, dicho (etc.) solo analizamos el verbo decir? O sea ¿y analizamos un texto lematizado? O más abstracto aún: ¿y si solo usamos sobre categorías gramaticales? En este post os quiero comentar los resultados de un pequeño experimento estilométrico con categorías gramaticales en textos entre los siglos XIX y XX. Había varios aspectos de las pruebas que os voy a comentar en este post que aún tengo que comprobar.

Para saber con qué estamos trabajando, vamos a basarnos en un texto concreto: Niebla de Unamuno. Debemos partir de una versión en texto plano .txt:
Niebla en formato plano

Para procesar el texto he utilizado TreeTagger, de la Universidad de Múnich y lo he utilizado directamente desde el entorno de R mediante la librería koRpus. Confieso que poner a trabajar las diferentes herramientas no fue sencillo, ni para mí ni para los docentes del European Summer School in Digital Humanities. Si quisiésemos lematizar Niebla, el resultado debería ser un archivo txt similar a este:

Niebla lematizada
Por lo general la estilometría prefiere no trabajar con lemas ya que se considera que muchos datos se pierden: se pierde la diferencia entre las novelas escritas en pasado o aquellas escritas en presente, por ejemplo. Algunos autores han señalado que podría ser más interesante dar un paso más allá de la lematización y conseguir las categorías gramaticales (Part of Speech, POS) de todas las palabras del texto. Es lo que vamos a hacer para nuestro experimento; esto sigue siendo Niebla habiendo hecho un análisis gramatical de cada palabra:

Niebla según categorías gramaticales del TreeTagger
Como vemos en la documentación de las categorías gramaticales para el español del TreeTagger, no solo se nos aporta si es un verbo o un sustantivo, también se nos da si el verbo está en forma finita (VLfin) o si es un nombre propio o común. Por ejemplo don Miguel de Unamuno sería en la anterior imagen «NC NP PREP NC». En total TreeTagger devuelve más de 70 categorías gramaticales diferentes.

Como queremos trabajar algo más manejable, decido simplificar el análisis a solo 10 grandes categorías gramaticales. En este análisis don Miguel de Unamuno sería «N N R N». El resultado es el siguiente:

No, no es Mátrix, es Niebla, en 10 cómodas categorías gramaticales.
Lo que observamos en la anterior imagen es la estructura léxico-gramatical de Niebla. Este proceso lo realizamos con varias decenas de textos publicados entre finales del siglo XIX y principios del siglo XX. Las listas obtenidas de categorías gramaticales las analizamos mediante Principal Components Analysis, con lo que obtenemos una visualización en dos dimensiones teniendo en cuenta aquellos valores que más tienden a diferenciar textos. ¿El resultado?

En esta nueva imagen vemos que los textos de Valle, por ejemplo, quedan en la parte superior y que los textos de Valera aparecen en el extremo inferior. Es decir, hay un valor que diferencia por completo a estos dos autores. A su vez, Unamuno aparece en el extremo derecho y Blasco Ibáñez a la izquierda. Pero ¿qué significan estas agrupaciones? ¿Según qué criterios se están organizando? Para saberlo, utilizamos la opción loading en stylo.

Sé que no lo parece, pero esta imagen es muy interesante. Es la misma imagen anterior, ahora los textos están en gris, y con las categorías gramaticales como vectores. Observamos que nombres, artículos, preposiciones y adjetivos aparecen muy cercanos entre ellos en la izquierda: es decir, las categorías gramaticales que forman principalmente sintagmas nominales aparecen agrupados.

Ese «polo nominal» aparece enfrentado en la dimensión horizontal por otro polo formado por verbos y pronombres (y en parte también por signos de puntuación, adverbios y conjunciones): una especie de «polo verbal». El Principal Components Analysis que esa diferencia entre polo nominal y polo verbal resulta importantísima, ya que el valor de ese PC es un excepcionalmente alto 50,3%.

Es decir, la imagen nos está indicando que se puede hacer una diferencia sólida entre textos que prefieren sintagmas verbales, y aquellos que prefieren sintagmas nominales. Unamuno, por ejemplo, resultaría extraordinariamente verbal; Blasco Ibáñez, por contra, resultaría bastante nominal.

Estos resultados son interesantes, sí, pero no sorprendentes: es bastante esperable que haya autores que utilicen más verbos (y estos suelen llevar pronombres relacionados) y otros que utilicen más sustantivos (con sus adjetivos y determinantes). Lo inesperado es el eje vertical.

Porque el análisis muestra que la otra dimensión de mayor importancia es la diferencia entre conjunciones (y adverbios) frente a signos de puntuación. ¿Cómo? ¿Qué significa eso? Yo lo interpreto en el sentido que algunos autores preferirían relacionar las oraciones entre sí mediante símbolos de puntuación, como Valle o Baroja; frente a otros, que preferirían utilizar conjunciones: como Valera u Ortega.

Sinceramente, no esperaba esta diferenciación ya que tendería a pensar que los signos de puntuación y las conjunciones no se excluyen. Al tener estos resultados delante hay que recordar que los signos de puntuación no son una categoría gramatical de por sí como adjetivos, adverbios, sustantivos o verbos. La lingüística computacional tiende a darle rango de categoría gramatical y por eso lo incluyo en el análisis, pero es cuestionable desde el punto de vista teórico. Además los signos de puntuación es un aspecto sensible a la intervención del editor, por lo que lo óptimo sería utilizar textos que han sido editados de manera homogénea.

Señaladas estas precauciones, creo que es un aspecto interesante que hay que seguir estudiando, también en relación a otras variables. Porque resulta aún más llamativo cuando introducimos en el análisis la variable cronológica. En la siguiente imagen los textos decimonónicos aparecen en rojo, frente a los verdes del siglo XX.


De manera casi total (un texto de Bazán, Fernández Flórez y Ortega son las excepciones), los títulos en rojo aparecen en la mitad inferior de la imagen: es decir, el siglo XIX prefería las conjunciones; frente a esto los títulos verdes aparecen en la parte superior: es decir, el siglo XX prefiere los signos de puntuación.

En el paso del siglo XIX al XX la literatura no solo realizó cambios estéticos o temáticos, parece que también cambió conjunciones por signos de puntuación.

Seguir leyendo este post...

martes, 9 de septiembre de 2014

Estilometría: stylo y novelas en español

Como comenté en mi último post, tuve el privilegio de estar en la European Summer School in Digital Humanities 2014 donde pude aprender sobre estilometría. Los profesores Jan Rybicki y Maciej Eder fueron los encargados de enseñarnos sobre estilometría y la librería de R llamada stylo que ha diseñado el grupo Computational Stylistics Group:

stylo, sonriente nada más despertarse

La estilometría es una metodología estadística para analizar textos a través de sus palabras más frecuentes (Most Frequent Words o MFW). Fue Wincenty Lutosławski quien acuñó esta palabra; en los últimos años John Burrow ha sido uno de los principales investigadores, cuya influencia puede observarse en varios grupos de investigación en Centro Europa.

La estilometría se ha utilizado principalmente para estudiar atribuciones de autorías. Cada autor tiene tendencias al escribir: unos tienden a utilizar más estructuras determinante+adjetivo+sustantivo, algunos prefieren sumar oraciones con y u o, otros prefieren la confrontación mediante peros y aunques... Decenas de esos rasgos medidos estadísticamente medidos y enfrentados crearían la llamada huella dactilar textual de un autor: un patrón que podría reconocer la autoría de cualquier autor. Al menos esa es la idea.

La realidad, como casi siempre, es más compleja. Pero lo emocionante que os quiero enseñar que esta metodología funciona sorprendentemente bien. Para empezar a trabajar necesitaremos un grupo de textos que formen un corpus más o menos equilibrado. Para esta prueba he decidido trabajar con un grupo de textos entre la segunda mitad del siglo XIX y las primeras décadas del siglo XX. Por ejemplo La batalla de Arapiles, de Galdós, publicada por Clásicos Hispánicos. Algunos criterios que se deben tener al trabajar con estilometría es que el corpus:
  • debe tener varios textos del mismo autor
  • los textos pueden tener un formato plano, pero asegúrate que la codificación y el tipo de final de línea es homogéneo
  • los resultados son mejores si el género literario es homogéneo
Bajo estos criterios, vamos a trabajar con algunas novelas de autores como Baroja, Bazán, Blasco Ibáñez, Clarín, Galdós, Miró, Sénder, Unamuno, Valle... Cada una de las novelas la guardamos en un archivo de texto diferente. Queremos que el stylo ordene los textos según su semejanza. Intuitivamente tenderíamos a pensar que dos novelas de Galdós son más semejantes entre sí  que una novela de Galdós y una de Clarín; y que las novelas de Galdós y Clarín (ambos parte del realismo) son más semejantes entre sí que, digamos, una novela de Galdós y una de Valle, ¿cierto?

Para ello vamos a realizar un cluster analysis, (algoritmo de agrupamiento) que stylo consigue realizar de manera múltiple en iteraciones: primero trabaja con las 100 palabras más frecuentes y crea un cluster, después coge las siguientes 100 palabras y hace otro cluster; así hasta que llega a las 5000 palabras más frecuentes. Todos esos clusters son tenidos en cuenta para crear un resultados más robustos en forma de Consensus Tree. Para ello utilizamos la Distance Delta en la variedad de Eder. ¿El resultado? La siguiente imagen:

Quizás estés pensando ¿qué son estas raíces de colores y qué significa? Estamos ante una visualización bidimensional de los clusters (o grupos) de las novelas. La relación jerárquica de las ramas significa la distancia entre los textos. Vamos a ver un segmento de este consensus tree:
Rama con textos de Clarín, Valera y Blasco Ibáñez
En esta rama de Clarín, Valera y Blascos Ibález vemos que los dos textos de La Regenta penden de un mismo nodo, por lo que los dos textos son muy similares entre sí. De la misma manera penden los dos textos de Valera. Los textos de Blasco Ibáñez tienen una estructura más compleja: Arroz y tartana es similar a la segunda parte de La araña negra; esos dos son parecidos a La catedral (aunque no tan parecidos); estos tres textos a su vez serían similares a La barraca. El análisis de clusters señala que los textos de Clarín y Valera son más similares entre sí y que estos, a su vez, tienen cierto parecido (aunque menor) con los de Blasco Ibáñez. Ahora que ya sabemos entender las ramas, volvamos a la imagen completa:
El programa nos facilita la visualización por colores, con lo que nos es muy fácil reconocer los autores de los textos. Como vemos el análisis de clusters ha conseguido reconocer la huella del autor: los textos de Galdós no se mezclan con los de Bazán: ambos aparecen en una misma rama, pero el programa consigue distinguirlos por autores. De esta manera todos los textos han sido ordenados correctamente por autor. Es decir, la huella digital textual no es solo una bonita metáfora: se puede demostrar empíricamente. ¡Hurra!

Solo hay un problema:



¿Todos los textos han sido organizados por autor? ¡No todos! Sénder y su primera novela Imán está separado de sus otras dos novelas, que aparecen emparentadas con Baroja. Es decir, que de 32 novelas, 31 han sido organizadas por autor correctamente. Vale, el sistema no es perfecto, pero no me dirán que resulta fascinante que una máquina que no sabe absolutamente nada de literatura consiga organizar miles de palabras mágicamente por autor.

Pero lo cierto es que la máquina ha hecho más que eso. Si nos fijamos, observamos que también se ha organizado cronológicamente: casi todos los autores del siglo XIX están en la rama inferior; los que empiezana  publicar en el siglo XX en la rama superior. La máquina no solo ha conseguido distinguir la autoría: también la periodización literaria.

Ahora bien ¿qué significan las ramas intermedias? Uno esperaría haber encontrado a Valle, Unamuno y Baroja en una rama a la que llamaríamos «Rama del 98» y confirmaría la clásica agrupación de autores; pero no, el programa ha agrupado a Valle con Miró y a Baroja con Sénder. ¿Qué significan estos datos? ¿Es que Valle y Miró escribían novelas líricas mientras que Baroja y Sénder escribían novelas de aventuras? ¿Es otra cosa? ¿Esa diferencia es más importante? ¿Por qué Fernández Flórez aparece rodeado de autores muy anteriores a él? ¿Qué es lo que reúne a Clarín, Valera y Blasco Ibáñez, que los diferencia de Bazán y Galdós?

¿Son estos resultados ruido? ¿O están apuntando nuevas agrupaciones literarias?

Seguir leyendo este post...

LinkWithin

Related Posts with Thumbnails