Hable una palabra de un idioma, a menudo puede adivinar qué idioma está viendo con solo detectar ciertos patrones de personajes. No hablo islandés, por ejemplo, pero instantáneamente reconozco el texto islandés cuando veo letras como “ð” o “þ”, ya que estos personajes son extremadamente raros en otros lugares. Del mismo modo, he notado que cuando veo mucho “IJK” en un texto, probablemente sea holandés.
Este artículo explora cómo podemos usar estadísticas simples para aprender estas huellas digitales visuales, las secuencias de caracteres que indican más fuertemente qué lenguaje está viendo, en 20 idiomas europeos diferentes.
Cómo aprender huellas digitales lingüísticas con estadísticas
Para aprender las “huellas digitales” visuales de un lenguaje, primero necesitamos una forma de medir cuán distintivo es un patrón de carácter dado. Un punto de partida natural podría ser observar los patrones de caracteres más comunes dentro de cada idioma. Sin embargo, este enfoque rápidamente se queda corto ya que un patrón de caracteres puede ser muy común en un idioma y también aparece con mucha frecuencia en otros. La frecuencia por sí sola no captura la singularidad. En cambio, queremos preguntar:
“¿Cuánto más probable es que este patrón aparezca en un idioma en comparación con todos los demás?”
¡Aquí es donde entran las estadísticas! Formalmente, deja que:
L Sea el conjunto de todos los 20 idiomas estudiados S sea el conjunto de todos los patrones de caracteres observados en esos idiomas
Para determinar cuán fuertemente un patrón de caracteres dado S∈S identifica un lenguaje l∈L, calculamos la relación de probabilidad:
\[LR_{s,l} = \frac{P(s|l)}{P(s|\neg l)}\]
Esto compara la probabilidad de ver los patrones de caracteres en el lenguaje L, versus en cualquier otro idioma. Cuanto más alta sea la relación, más vinculado es ese patrón con ese lenguaje.
Calcular la relación de probabilidad en la práctica
Para calcular la relación de probabilidad para cada patrón de caracteres en la práctica, necesitamos traducir las probabilidades condicionales en cantidades que realmente podemos medir. Así es como definimos
Los recuentos relevantes:
CL (s): El número de veces el patrón de caracteres S aparece en el lenguaje l c¬l (s): el número de veces el patrón de caracteres s aparece en todos los demás idiomas nl: el número total de apartaciones de patrones de caracteres en el lenguaje l n¬l: el número total de ocurrencias de patrones en todos los demás idiomas
Usando estos, las probabilidades condicionales se convierten en:
\[P(s|l) = \frac{c_l(s)}{N_l},~P(s|\neg l)=\frac{c_{\neg l}(s)}{N_{\neg l}}\]
Y la relación de probabilidad simplifica para:
\[LR_{s,l} = \frac{P(s|l)}{P(s|\neg l)} = \frac{c_l(s)\cdot N_{\neg l}}{c_{\neg l}(s)\cdot N_l}\]
Esto nos da una puntuación numérica que cuantifica cuánto más probable es que aparezca un patrón de caracteres en el lenguaje L frente a todos los demás.
Manejo de cero recuentos
Lamentablemente, hay un problema con nuestra fórmula de relación de probabilidad: ¿qué sucede cuando c¬l (s) = 0?
En otras palabras, ¿qué pasa si un determinado patrón de caracteres s aparece solo en el lenguaje l y en ningún otro? Esto lleva a una división por cero en el denominador, y una relación de probabilidad de infinito.
Técnicamente, esto significa que hemos encontrado un patrón perfectamente único para ese lenguaje. Pero en la práctica, no es muy útil. Un patrón de personajes solo podría aparecer una vez en un idioma y nunca en cualquier otro lugar y se le daría una puntuación infinita. No es muy útil como una fuerte “huella” del lenguaje.
Para evitar este problema, aplicamos una técnica llamada suavizado aditivo. Este método ajusta ligeramente los recuentos sin procesar para eliminar los ceros y reducir el impacto de eventos raros.
Específicamente, agregamos una pequeña α constante a cada recuento del numerador, y α | S | al denominador, con | S | siendo el número total de patrones de caracteres observados. Esto tiene el efecto de suponer que cada patrón de personajes tiene una pequeña posibilidad de ocurrir en cada idioma, incluso si aún no se ha visto.
Con suavizado, las probabilidades ajustadas se convierten en:
\[P'(s|l) = \frac{c_l(s) + \alpha}{N_l + \alpha|S|},~P'(s|\neg l)=\frac{c_{\neg l}(s) + \alpha}{N_{\neg l} + \alpha|S|}\]
Y la relación de probabilidad final a maximizar es:
\[LR_{s,l} = \frac{P'(s|l)}{P'(s|\neg l)} = \frac{(c_l(s) + \alpha)\cdot(N_{\neg l} + \alpha|S|)}{(N_l + \alpha|S|)\cdot(c_{\neg l}(s) + \alpha)}\]
Esto mantiene las cosas estables y asegura que un patrón raro no domine automáticamente solo porque es exclusivo.
El conjunto de datos
Ahora que hemos definido una métrica para identificar los patrones de caracteres más distintivos (nuestras “huellas digitales” lingüísticas), es hora de recopilar datos de lenguaje reales para analizar.
Para esto, utilicé la biblioteca de Python WordFreq, que compila listas de frecuencia de palabras para docenas de idiomas basados en fuentes a gran escala como Wikipedia, libros, subtítulos y texto web.
Una función particularmente útil para este análisis es TOP_N_LIST (), que devuelve una lista ordenada de las n Palabras de mayor frecuencia más alta en un idioma proporcionado. Por ejemplo, para obtener las 40 palabras más comunes en islandés, llamaríamos:
WordFreq.top_n_list (“is”, 40, ascii_only = falso)
El argumento ascii_only = falso asegura que los caracteres no ASCII, como el “ð” y “Þ” de Islandia, se conserven en la salida. Eso es esencial para este análisis, ya que buscamos específicamente patrones de personajes únicos, que incluyen personajes individuales.
Para construir el conjunto de datos, extraí las 5.000 palabras más frecuentes en cada uno de los siguientes 20 idiomas europeos:
Catalán, checo, danés, holandés, inglés, finlandés, francés, alemán, húngaro, islandés, italiano, letón, lituano, noruego, polaco, portugués, rumano, español, sueco y turco.
Esto produce un gran vocabulario multilingüe de 100,000 palabras en total, lo suficientemente rica como para extraer patrones estadísticos significativos en todos los idiomas.
Para extraer los patrones de caracteres utilizados en el análisis, se generaron todas las sustros posibles de longitud 1 a 5 a partir de cada palabra en el conjunto de datos. Por ejemplo, el lenguaje de la palabra contendría patrones como L, LA, Lan, Lang, Langua, A, An, Ang, etc. El resultado es un conjunto integral de más de 180,000 patrones de caracteres únicos observados en los 20 idiomas estudiados.
Resultados
Para cada idioma, se muestran los cinco patrones de personajes más distintivos, clasificados por la relación de probabilidad. La constante de suavizado se eligió para ser α = 0.5.
Debido a que las relaciones de probabilidad cruda pueden ser bastante grandes, he informado el logaritmo base-10 de la relación de probabilidad (LOG10 (LR)). Por ejemplo, una relación de probabilidad logarítmica de 3 significa que el patrón de caracteres es 103 = 1,000 veces más probabilidades de aparecer en ese idioma que en cualquier otro. Tenga en cuenta que debido al suavizado, estas proporciones de probabilidad son aproximados en lugar de exactos, y la extremidad de algunos puntajes puede amortigarse.
Cada celda muestra un patrón de caracteres de alto clasificación y su relación de probabilidad log.
3.03ènci
3.01 Ciones
2.95ència
2.92atge
2.77czechě
4.14ř
3.94ně
3.65ů
3.59ře
3.55Danishøj
2.82æng
2.77søg
2.73skab
2.67øge
2.67dutchijk
3.51lijk
3.45elijk
3.29ijke
3.04 Voor
3.04 en inglés
2.79Tly
2.64
2.54ying
2.54cted
2.52finnishää
3.74ään
3.33tää
3.27llä
3.13ssä
3.13frenchêt
2.83eux
2.78rése
2.73dép
2.68prése
2.64Germaneich
3.03tlic
2.98tlich
2.98Schl
2.98ichen
2.90hungarianő
3.80ű
3.17Gye
3.16szá
3.14ész
3.09icishlandð
4.32ið
3.74að
3.64Þ
3.63ði
3.60TIALIZIONE
3.41zion
3.29zion
3.07aggi
2.90zioni
2.87latvianā
4.50ī
4.20ē
4.10tā
3.66nā
3.64lituanoė
4.11ų
4.03ių
3.58į
3.57ės
3.56norwegiansjon
3.17Asj
2.93øy
2.88Asjon
2.88Asjo
2.88polishł °
4.13ś
3.79ć
3.77ż
3.69ał
3.59 puerto portugués
3.73çã
3.53ção
3.53ação
3.32açã
3.32romaniană
4.31ț
4.01ți
3.86ș
3.64tă
3.60spanishción
3.51acía
3.29ión
3.14sión
2.86ENTO
2.85swedishförs
2.89ställ
2.72stäl
2.72ång
2.68öra
2.68Turkishı
4.52ş
4.10 ech
3.83ın
3.80lı
3.60
Discusión
A continuación se presentan algunas interpretaciones interesantes de los resultados. Esto no está destinado a ser un análisis exhaustivo, solo algunas observaciones que encontré notables:
Muchos de los patrones de personajes con las proporciones de probabilidad más altas son personajes únicos exclusivos de su lenguaje, como los “ð” y “þ” islandeses mencionados anteriormente, “ă”, “ț” y “ș”, o “ş” y “ğ” de Rumano. Debido a que estos personajes están esencialmente ausentes de todos los demás idiomas en el conjunto de datos, habrían producido relaciones de probabilidad infinitas si no fuera por el suavizado aditivo. En algunos idiomas, especialmente holandés, muchos de los principales resultados son sustros entre sí. Por ejemplo, el patrón superior “IJK” también aparece dentro de los siguientes patrones de rango más alto: “Lijk”, “Elijk” e “Ijke”. Esto muestra cómo ciertas combinaciones de letras se reutilizan con frecuencia en palabras más largas, lo que las hace aún más distintivas para ese idioma. El inglés tiene algunos de los patrones de personajes menos distintivos de todos los idiomas analizados, con una relación de probabilidad de registro máxima de solo 2.79. Esto puede deberse a la presencia de palabras de préstamos en inglés en muchos otros listas de palabras principales de muchos idiomas, lo que diluye la singularidad de los patrones específicos del inglés. Hay varios casos en los que los patrones de personajes principales reflejan estructuras gramaticales compartidas en todos los idiomas. Por ejemplo, la “ción” española, la “italiana” -zione “y el” -sjon “noruego” funcionan como sufijos de nominalización, similares al inglés “-tion”: convertir los verbos o adjetivos en sustantivos. Estas finales se destacan fuertemente en cada idioma y resaltan cómo los diferentes idiomas pueden seguir patrones similares utilizando diferentes ortografía.
Conclusión
Este proyecto comenzó con una pregunta simple: ¿Qué hace que un idioma se vea a sí mismo? Al analizar las 5000 palabras más comunes en 20 idiomas europeos y comparar los patrones de caracteres que usan, descubrimos ‘huellas digitales’ únicas para cada idioma, desde letras acentuadas como “ş” y “Ø” hasta combinaciones de letras recurrentes como “IJK” o “Ción”. Si bien los resultados no son definitivos, ofrecen una forma divertida y estadísticamente fundamentada de explorar qué distingue a los idiomas visualmente, incluso sin comprender una sola palabra.
Vea mi repositorio de GitHub para la implementación del código completo de esta técnica.
¡Gracias por leer!
Referencias
Biblioteca de WordFreq Python:
Robyn Speer. (2022). RPEER/WordFreq: v3.0 (v3.0.2). Zenodo. https://doi.org/10.5281/zenodo.7199437