22/10/14

La Ley de Zipf en textos automáticos






En la década de 1940, en plena guerra mundial, el lingüista de la universidad de Harvard, George Kingsley Zipf, enunció una ley empírica que ponía de manifiesto una sorprendente regularidad en la distribución de las palabras en un texto de cualquier lengua. No existe aún explicación del porqué de esta regularidad.
La que, desde entonces, se conoce como Ley de Zipf dice que, para un texto suficientemente largo, la frecuencia de aparición “f” de una palabra dada es inversamente proporcional a su rango, ”r”, entendiendo por rango la posición de la palabra en el orden de mayor a menor (la clasificación en la “liga de apariciones”, por así decirlo). Matemáticamente:


Donde a es una constante que depende del texto utilizado. Se trata de una ley aproximada que no pretende calcular con exactitud el número de veces que se repetirá una palabra en el texto pero que sí tiene una alta correlación para considerarla como algo más que una anécdota de cálculo. Además, esta inversa proporcionalidad entre frecuencia y extensión recuerda a otras muchas relaciones similares en otras áreas del conocimiento, siendo la más notable la relación entre la frecuencia y la longitud de las onda de la luz o las del sonido.
Posteriores desarrollos han hecho que la ley de Zipf se escriba mejor como:


Siendo b una constante cercana al valor 1.
Esta ley concuerda bien con la realidad. Tomado cualquier texto, vemos que unas pocas palabras se repiten muchas veces (especialmente artículos, adverbios, preposiciones y conjunciones) y muchas de ellas son hápax legómenon en ese texto, es decir, sólo aparecen una sola vez.
Aunque, normalmente, la ley de Zipf se cumple mejor con textos de más de 5000 palabras vamos a probar su cumplimiento con el inicio del capítulo III del El Quijote que aparece en este enlace que es más corto pero suficientemente aproximado para explicar el caso y no dedicar mucho tiempo a estructurar los datos.
Para estudiar los textos usamos un programa especializado en analizar textos y calcular frecuencias, concordancias, etc. Este es TEXTSTAT (existen otros mucho más complejos y completos pero TextStat permite obtener lo que deseamos) que, amén de hacer el análisis, exporta los resultados a un fichero Excel con lo que es más sencillo el tratamiento posterior (y lograr que los gráficos encajen en el reducido espacio del blog).

El programa nos indica que ese texto tiene 2985 palabras, de las que 967 son diferentes. Si graficamos las frecuencias con que esas 967 palabras aparecen, la curva es una exponencial muy acusada que denota lo ya explicado: unas pocas palabras se repiten muchísimo mientras que la mayoría aparecen en pocas ocasiones y, como antes dijimos, no es de extrañar que las que se repiten mucho sean artículos, preposiciones, adverbios y conjunciones. En nuestro caso, la palabra que Cervantes utiliza más es “que” (en 150 ocasiones) seguida de “de” (148), “a” (90) y “la” (86). El primer sustantivo es “historia” con 22 apariciones en la posición 22. Así, para las 500 palabras de ese texto más frecuentes, tenemos:
 



 

Dadas las escalas, y para poder ver con más detalle el cumplimiento de la ley de Zipf, es mejor representar el gráfico en escala logarítmica, en cuyo caso los datos deben seguir una recta (regresión potencial dentro de la escala logarítmica).
 

Se observa que la recta es bastante aproximada a los datos reales y esta recta se aproxima más y más a los mismos a medida que aumenta el número de palabras calculadas. Podemos afirmar que El Quijote cumple razonablemente bien con la Ley de Zipf.
Veamos otro ejemplo, el cuento de García Márquez, “El ahogado más hermoso del mundo”. Se observa que aquí la Ley de Zipf se cumple peor pero, de todos modos el ajuste es todavía cercano en ciertas zonas. El texto tiene 2546, de las que 931 son distintas. La palabra más usada es “de” (123 veces), seguida de “que” (104), “y” (76), “a” (70) y “los” (70).







Sería posible mejorar la correlación usando, de acuerdo a la segunda fórmula antes mostrada, una exponencial con otro valor de "b".

Pero, ¿se cumpliría la Ley de Zipf cuando el texto hubiera sido generado automáticamente en vez de haber sido escrito por una persona? ¿o al menos se cumpliría de manera similar a lo que sucede en los escritos naturales? ¿Un texto robotizado o producido por un generador de textos, por un algoritmo, tiene las mismas características intrínsecas que uno escrito por una persona?
Para conocer esto, he generado un texto con un programita de generación de texto automático realizado para un máster en la Universidad de Cádiz. Hemos generado un texto de 1941 palabras de las que 351 son distintas. Esta es una limitación del concepto del programa ya que este utiliza plantillas determinadas y, por tanto, es mucho menos rico que un texto escrito por un ser humano. Para una comparación más homogénea habría quizá que ampliar el generador con bastantes más plantillas ("templates”) para que la variedad lingüística fuese mayor.
En este caso, la palabra que más se repite es “en” (126 repeticiones), seguida de “y” (93), “el” (86), “la” (83) y “se” (73). A este respecto, no hay diferencias significativas entre un lenguaje natural y uno artificial. Donde sí hay diferencias notables es en la cola de la lista. En un texto automático son muchas menos las hápax legómenon que en uno natural, hecho lógico si pensamos que el parser está obligado a elegir palabras de un corpus más reducido y, sobre todo, que las plantillas “le fuerzan a ser menos creativo” ya que no puede utilizar los sinónimos o textos que una mente puede imaginar en un momento dado.
Los gráficos son:






 

La correlación es menor que con el texto natural del Quijote de manera bastante evidente ya que no sólo se desvía en los extremos sino también en la zona central pero no es una correlación excesivamente peor que la encontrada en el cuento de García Márquez. De hecho, teniendo en cuenta las limitaciones antes comentadas por utilizar plantillas, parece que este texto automático cumple "mejor" la Ley de Zipf que algunos textos humanos.
No es extraño, de cualquier modo, que los textos automáticos también se acerquen a la Ley de Zipf porque no son textos "creados" por una mente alienígena o por un programa de inteligencia artificial totalmente ajeno sino que son combinaciones léxicas o gramaticales de nuestros propios idiomas.