En vivo 18.11 · Cohorte 318 nov, 19:00 MSK — taller práctico gratuito de agentes IA · Cohorte 3 en vivo inicia 23.11Taller 18 nov →Cohorte 3 (23.11)
LanzamientoAnálisis · En radarHabr AI→ original

Tesseract reentrenado lee texto mansi: los errores de caracteres bajan del 18,5 % al 0,85 %

El Instituto de Investigación de Tecnologías de la Información de Ugra reentrenó Tesseract 5 con el idioma mansi. El modelo ruso base confundía las letras con macrón y fallaba en el 18,5 % de los caracteres. En lugar de etiquetar escaneos a mano, el equipo generó 1,3 millones de líneas sintéticas y los errores bajaron al 0,85 %. El modelo está abierto en Hugging Face.

Procesado por IA desde Habr AI; editado por Hamidun News
Tesseract reentrenado lee texto mansi: los errores de caracteres bajan del 18,5 % al 0,85 %
Fuente: Habr AI. Collage: Hamidun News.
Escuchar artículo
Ficha técnica y cifras clave
ParámetroDatos
Fuente originalHabr AI ↗
Editor jefe
Dato clave #1La normalización Unicode NFC elimina los distintos códigos de una misma letra
Dato clave #21,3 millones de pares sintéticos con decenas de fuentes en lugar de escaneos
Dato clave #3Aprendizaje por transferencia desde rus.traineddata mediante tesstrain

Imagine que necesita digitalizar miles de páginas en un idioma sin OCR listo para usar ni escaneos etiquetados. Eso es justo lo que enfrentaron los investigadores del Instituto de Investigación de Tecnologías de la Información de Ugra al reunir un corpus del idioma mansi. Su solución resultó sorprendentemente sencilla y, a la vez, muy eficaz: la proporción de caracteres erróneos cayó del 18,5 % al 0,85 %, es decir, unas 20 veces.

Cuál era el problema

La escritura mansi se basa en el cirílico, pero incluye vocales largas con macrón (а̄, о̄, ӯ, э̄, ы̄) y la letra ӈ. El modelo ruso estándar de Tesseract no conoce estos símbolos. Pierde la raya sobre la letra o la convierte en basura. Y la duración de la vocal en mansi cambia el significado de la palabra, así que perder el macrón es perder información.

En la línea «Хӯл тэ̄нутыг ва̄рнэ ма̄гыс», el modelo ruso produjo «Хул тэнутыг варнэ магьгсь»: los macrones desaparecieron y la «ы» se convirtió en «ьг». El modelo reentrenado leyó toda la línea sin un solo error.

Hay además un segundo problema, menos visible. Una misma letra en Unicode puede escribirse de distintas maneras: como un único carácter precompuesto o como «у» más un macrón combinable. Para una persona son idénticas; para el modelo y para la comparación de cadenas son secuencias distintas. Basta abrir la consola de Python: la longitud de dos «ӯ» visualmente iguales será 1 y 2, y la comparación devolverá False.

Cómo se reunieron los datos sin escaneos

No existen escaneos mansi listos del volumen necesario, y etiquetarlos a mano llevaría años. Por eso el equipo generó los datos por sí mismo: toma texto mansi real, lo dibuja en una imagen con distintas fuentes, y la respuesta correcta se conoce de antemano.

El pipeline consta de cuatro pasos:

  • Todos los textos se normalizan a la forma Unicode NFC para que cada letra tenga exactamente una representación.
  • Las líneas se renderizan con varias decenas de tipografías, entre ellas FreeSerif, DejaVu Sans, Arial y Times New Roman, en tamaños de 12, 14, 24 y 26 pt y en tres estilos.
  • Cada carácter se marca con un recuadro. El cálculo automático a partir de las métricas de la fuente falla con los diacríticos, así que los autores introdujeron tres diccionarios de correcciones: para caracteres individuales, para el tamaño de la fuente y para una tipografía concreta. Los valores se ajustaron experimentalmente.
  • El texto largo se corta con la función split_by_width para que ningún carácter sobresalga del borde de la imagen.

Como resultado se obtuvieron 1,3 millones de pares «imagen .tif + archivo .gt.txt con la respuesta correcta».

Cómo se reentrenó Tesseract

La tercera parte de la receta es el aprendizaje por transferencia. Dentro de Tesseract 5 funciona una CRNN: la parte convolucional encuentra trazos y rasgos, la LSTM lee las características de izquierda a derecha, y la función de pérdida CTC evita el etiquetado manual de los límites de las letras. Como punto de partida se tomó rus.traineddata de tessdata_best. El alfabeto mansi casi coincide con el ruso, por lo que el modelo debe aprender sobre todo las letras nuevas.

La herramienta tesstrain extrae por sí sola la parte LSTM con sus pesos, reúne la lista completa de caracteres de los datos de entrenamiento y amplía la capa de salida al alfabeto combinado. El parámetro clave resultó ser el número de iteraciones: si son pocas, las letras nuevas no se asimilan; si son muchas, el modelo se sobreajusta a los datos sintéticos. Ayudó la parada temprana según el conjunto de validación.

Resultado en métricas: el CER bajó del 18,5 % al 0,85 % y el WER del 42,1 % al 1 %. A la persona le queda revisar el resultado, no volver a teclear el texto.

Limitaciones y conclusión práctica

El modelo lee con seguridad texto tipográfico limpio en cuerpos de 12–26 pt. Rinde peor con letra muy pequeña o muy grande, con alfabeto latino y con ediciones antiguas de impresión desgastada. Los autores planean incorporar escaneos de archivo reales al entrenamiento. Cabe señalar también que la evaluación se hizo en las mismas condiciones sintéticas, por lo que en libros reales las cifras probablemente serán peores.

Para el profesional, lo útil es la propia receta. Si trabaja con un idioma o dominio con pocos datos etiquetados:

  • Primero normalice Unicode; es una medida barata y a menudo subestimada.
  • Genere datos sintéticos a partir de textos reales con variedad de fuentes.
  • Reentrene un modelo existente en lugar de entrenar desde cero.

Los autores creen que el mismo enfoque servirá para el jantí, el nenets y otros idiomas cirílicos con diacríticos. El modelo mns.traineddata está en Hugging Face (URIIT/mns-tesseract): basta colocar el archivo en la carpeta tessdata e indicar el idioma mns. También se puede probar en el navegador en Etnoportal.

Historia

Preguntas frecuentes sobre la noticia

¿Qué se sabe sobre Cuál era el problema?

La escritura mansi se basa en el cirílico, pero incluye vocales largas con macrón (а̄, о̄, ӯ, э̄, ы̄) y la letra ӈ. El modelo ruso estándar de Tesseract no conoce estos símbolos. Pierde la raya sobre la letra o la convierte en basura. Y la duración de la vocal en mansi cambia el significado de la palabra, así que perder el macrón es perder información. En la línea «Хӯл тэ̄нутыг ва̄рнэ ма̄гыс», el modelo ruso produjo «Хул тэнутыг варнэ магьгсь»: los macrones desaparecieron y la «ы» se convirtió en «ьг».

Cómo se reunieron los datos sin escaneos?

No existen escaneos mansi listos del volumen necesario, y etiquetarlos a mano llevaría años. Por eso el equipo generó los datos por sí mismo: toma texto mansi real, lo dibuja en una imagen con distintas fuentes, y la respuesta correcta se conoce de antemano. El pipeline consta de cuatro pasos: Todos los textos se normalizan a la forma Unicode NFC para que cada letra tenga exactamente una representación.

Cómo se reentrenó Tesseract?

La tercera parte de la receta es el aprendizaje por transferencia. Dentro de Tesseract 5 funciona una CRNN: la parte convolucional encuentra trazos y rasgos, la LSTM lee las características de izquierda a derecha, y la función de pérdida CTC evita el etiquetado manual de los límites de las letras. Como punto de partida se tomó rus.traineddata de tessdata_best. El alfabeto mansi casi coincide con el ruso, por lo que el modelo debe aprender sobre todo las letras nuevas.

ZK
Zhemal Khamidun — CPO de Alpina Digital, product manager de AlpinaGPT. Crea productos de IA desde 2019. Hamidun News es un proyecto personal que creció hasta ser un agregador en producción con más de 6.000 lectores.
✦ Unified AI Workspace · Nomad

Test Frontier LLMs & Autonomous Agents in One Workspace

Run Claude Opus 5.5, GPT-6, Gemini 3.1, and DeepSeek side-by-side in Nomad AI (nomadnet.ai) — unified model routing, deep research, and multimodal workflows under one subscription.

Try Nomad AI →Launch Nomad Agent
¿Qué te parece?
Cargando comentarios…