From b91e31e17350be3d496ff2883a756c3af9be16ab Mon Sep 17 00:00:00 2001 From: sergio Date: Wed, 4 Feb 2026 21:07:27 +0100 Subject: [PATCH] LaTex ecuations --- apply_content.py | 22 +++-- content_handlers.py | 59 +++++++---- docs/01_introduccion.md | 12 +-- docs/03_objetivos_metodologia.md | 2 +- docs/04_desarrollo_especifico.md | 6 +- docs/05_conclusiones_trabajo_futuro.md | 2 +- docs/07_anexo_a.md | 4 +- markdown_utils.py | 26 +++-- thesis_output/plantilla_individual.htm | 132 +++++++++++++++---------- 9 files changed, 157 insertions(+), 108 deletions(-) diff --git a/apply_content.py b/apply_content.py index 0a33254..99ec597 100644 --- a/apply_content.py +++ b/apply_content.py @@ -404,30 +404,36 @@ def main(): print(" ✓ Removed template table example") break - # Define chapters + # Define chapters with their number for bookmark creation chapters = [ - ('Introducción', 'intro', 'Contexto'), - ('Contexto', 'contexto', 'Objetivos'), - ('Objetivos', 'objetivos', 'Desarrollo'), - ('Desarrollo', 'desarrollo', 'Conclusiones'), - ('Conclusiones', 'conclusiones', 'Referencias'), + ('Introducción', 'intro', 'Contexto', 1), + ('Contexto', 'contexto', 'Objetivos', 2), + ('Objetivos', 'objetivos', 'Desarrollo', 3), + ('Desarrollo', 'desarrollo', 'Conclusiones', 4), + ('Conclusiones', 'conclusiones', 'Referencias', 5), ] print("Replacing chapter contents...") - for chapter_keyword, doc_key, next_keyword in chapters: + for chapter_keyword, doc_key, next_keyword, chapter_num in chapters: print(f" Processing: {chapter_keyword}") start_elem = find_section_element(soup, chapter_keyword) end_elem = find_section_element(soup, next_keyword) if start_elem and end_elem: + # Add bookmark anchor for chapter cross-references (e.g., _Ref_Sec2 for Chapter 2) + bookmark_id = f"_Ref_Sec{chapter_num}" + bookmark_anchor = soup.new_tag('a') + bookmark_anchor['name'] = bookmark_id + start_elem.insert(0, bookmark_anchor) + remove_elements_between(start_elem, end_elem) new_content_html, counters = extract_section_content(docs[doc_key], counters=counters) new_soup = BeautifulSoup(new_content_html, 'html.parser') insert_point = start_elem for new_elem in reversed(list(new_soup.children)): insert_point.insert_after(new_elem) - print(f" ✓ Replaced content") + print(f" ✓ Replaced content (bookmark: {bookmark_id})") else: if not start_elem: print(f" Warning: Could not find start element for {chapter_keyword}") diff --git a/content_handlers.py b/content_handlers.py index 71aaa4f..2665a43 100644 --- a/content_handlers.py +++ b/content_handlers.py @@ -403,7 +403,7 @@ def handle_bullet_list(lines, i): def handle_numbered_list(lines, i): - """Handle numbered list (1., 2., etc). + """Handle numbered list (1., 2., etc) with nested bullet sub-lists. Args: lines: List of markdown lines @@ -413,6 +413,8 @@ def handle_numbered_list(lines, i): Tuple of (html_blocks, new_index) """ html_blocks = [] + # Each item is a tuple: (main_text, nested_bullets) + # where nested_bullets is a list of bullet point strings numbered_items = [] while i < len(lines): @@ -423,8 +425,8 @@ def handle_numbered_list(lines, i): if i < len(lines) and re.match(r'^\d+\.\s', lines[i]): item_text = re.sub(r'^\d+\.\s*', '', lines[i]).strip() i += 1 - # Collect any nested/indented content - nested_lines = [] + # Collect any nested/indented content (bullet points) + nested_bullets = [] while i < len(lines): current = lines[i] # Stop conditions @@ -436,34 +438,53 @@ def handle_numbered_list(lines, i): break if current.startswith('**Tabla') or current.startswith('**Figura'): break - if current.strip() and not current.startswith(' ') and not current.startswith('\t') and not current.startswith('-'): - if nested_lines or not current.strip(): - break - if current.strip(): - cleaned = current.strip() - if cleaned.startswith('- '): - cleaned = cleaned[2:] - nested_lines.append(cleaned) + # Check for non-indented, non-bullet content (end of nested) + stripped = current.strip() + if stripped and not current.startswith(' ') and not current.startswith('\t') and not stripped.startswith('-'): + break + # Collect indented bullet points + if stripped.startswith('- '): + bullet_text = stripped[2:].strip() + nested_bullets.append(bullet_text) i += 1 - # Combine item with nested content - if nested_lines: - item_text = item_text + '
' + '
'.join(nested_lines) + item_text = convert_latex_formulas(item_text) - numbered_items.append(md_to_html_para(item_text)) + numbered_items.append((md_to_html_para(item_text), nested_bullets)) else: break - # Output with proper First/Middle/Last classes - for idx, item in enumerate(numbered_items): + # Output numbered items with nested bullet lists + for idx, (item_text, nested_bullets) in enumerate(numbered_items): num = idx + 1 if len(numbered_items) == 1: cls = 'MsoListParagraph' elif idx == 0: cls = 'MsoListParagraphCxSpFirst' - elif idx == len(numbered_items) - 1: + elif idx == len(numbered_items) - 1 and not nested_bullets: cls = 'MsoListParagraphCxSpLast' else: cls = 'MsoListParagraphCxSpMiddle' - html_blocks.append(f'

{num}.   {item}

') + + # Main numbered item + html_blocks.append(f'

{num}.   {item_text}

') + + # Nested bullet sub-list (indented further) + if nested_bullets: + for bullet_idx, bullet_text in enumerate(nested_bullets): + bullet_text = convert_latex_formulas(bullet_text) + bullet_html = md_to_html_para(bullet_text) + # Determine class for sub-list items + if bullet_idx == 0: + sub_cls = 'MsoListParagraphCxSpFirst' + elif bullet_idx == len(nested_bullets) - 1: + # If this is the last bullet of the last numbered item, use Last + if idx == len(numbered_items) - 1: + sub_cls = 'MsoListParagraphCxSpLast' + else: + sub_cls = 'MsoListParagraphCxSpLast' + else: + sub_cls = 'MsoListParagraphCxSpMiddle' + # Nested bullets at 54pt margin (36pt + 18pt) + html_blocks.append(f'

·     {bullet_html}

') return html_blocks, i diff --git a/docs/01_introduccion.md b/docs/01_introduccion.md index 2092d72..04d0c7b 100644 --- a/docs/01_introduccion.md +++ b/docs/01_introduccion.md @@ -16,7 +16,7 @@ El OCR actúa como puente entre el mundo físico del documento impreso y el mund El procesamiento de documentos en español presenta particularidades que complican el reconocimiento automático de texto. Los caracteres especiales propios del idioma (la letra ñ, las vocales acentuadas á, é, í, ó, ú, la diéresis ü, y los signos de puntuación invertidos ¿, ¡) no están presentes en muchos conjuntos de entrenamiento internacionales, lo que puede degradar el rendimiento de modelos preentrenados predominantemente en inglés. -La Tabla 1 resume los principales desafíos lingüísticos del OCR en español: +La [Tabla 1](#tabla-1) resume los principales desafíos lingüísticos del OCR en español: **Tabla 1.** *Desafíos lingüísticos específicos del OCR en español.* @@ -37,7 +37,7 @@ Los modelos OCR basados en redes neuronales profundas, como los empleados en Pad La adaptación de modelos preentrenados a dominios específicos típicamente requiere fine-tuning con datos etiquetados del dominio objetivo y recursos computacionales significativos. Esta barrera técnica y económica excluye a muchos investigadores y organizaciones de beneficiarse plenamente de estas tecnologías. -La Tabla 2 ilustra los requisitos típicos para diferentes estrategias de mejora de OCR: +La [Tabla 2](#tabla-2) ilustra los requisitos típicos para diferentes estrategias de mejora de OCR: **Tabla 2.** *Comparación de estrategias de mejora de modelos OCR.* @@ -118,10 +118,10 @@ La relevancia de este problema radica en su aplicabilidad inmediata. Una metodol ## Estructura del trabajo -El documento sigue una estructura que refleja el proceso investigador. Tras esta introducción, el **Capítulo 2** sitúa el trabajo en su contexto técnico y revisa las tecnologías OCR basadas en aprendizaje profundo. Se describen las arquitecturas de detección, los modelos de reconocimiento y los trabajos previos en optimización de estos sistemas. +El documento sigue una estructura que refleja el proceso investigador. Tras esta introducción, el [Capítulo 2](#capitulo-2) sitúa el trabajo en su contexto técnico y revisa las tecnologías OCR basadas en aprendizaje profundo. Se describen las arquitecturas de detección, los modelos de reconocimiento y los trabajos previos en optimización de estos sistemas. -El **Capítulo 3** traduce las preguntas de investigación en objetivos concretos, siguiendo la metodología SMART. Además, describe con detalle el enfoque experimental: preparación del dataset, métricas de evaluación y configuración del proceso de optimización con Ray Tune y Optuna. +El [Capítulo 3](#capitulo-3) traduce las preguntas de investigación en objetivos concretos, siguiendo la metodología SMART. Además, describe con detalle el enfoque experimental: preparación del dataset, métricas de evaluación y configuración del proceso de optimización con Ray Tune y Optuna. -El núcleo del trabajo se desarrolla en el **Capítulo 4**, que presenta el estudio comparativo y la optimización de hiperparámetros en tres fases: planteamiento de la comparativa con evaluación de EasyOCR, PaddleOCR y DocTR; desarrollo de la optimización mediante 64 trials con Ray Tune; y análisis crítico de los resultados obtenidos. +El núcleo del trabajo se desarrolla en el [Capítulo 4](#capitulo-4), que presenta el estudio comparativo y la optimización de hiperparámetros en tres fases: planteamiento de la comparativa con evaluación de EasyOCR, PaddleOCR y DocTR; desarrollo de la optimización mediante 64 trials con Ray Tune; y análisis crítico de los resultados obtenidos. -Finalmente, el **Capítulo 5** sintetiza las contribuciones, evalúa el grado de cumplimiento de los objetivos y propone líneas de trabajo futuro. Los **Anexos** proporcionan acceso al repositorio de código fuente y datos, así como tablas detalladas de resultados experimentales. +Finalmente, el [Capítulo 5](#capitulo-5) sintetiza las contribuciones, evalúa el grado de cumplimiento de los objetivos y propone líneas de trabajo futuro. Los Anexos proporcionan acceso al repositorio de código fuente y datos, así como tablas detalladas de resultados experimentales. diff --git a/docs/03_objetivos_metodologia.md b/docs/03_objetivos_metodologia.md index 61f11a5..d5cfec1 100644 --- a/docs/03_objetivos_metodologia.md +++ b/docs/03_objetivos_metodologia.md @@ -171,7 +171,7 @@ El espacio de búsqueda se definió utilizando `tune.choice()` para parámetros #### Arquitectura de Ejecución -Se implementó una arquitectura basada en contenedores Docker para aislar los servicios OCR y facilitar la reproducibilidad (ver sección 4.2.3 para detalles de la arquitectura). +Se implementó una arquitectura basada en contenedores Docker para aislar los servicios OCR y facilitar la reproducibilidad (ver Desarrollo de la comparativa en el [Capítulo 4](#capitulo-4) para detalles de la arquitectura). #### Ejecución con Docker Compose diff --git a/docs/04_desarrollo_especifico.md b/docs/04_desarrollo_especifico.md index 08e8b61..6c2326c 100644 --- a/docs/04_desarrollo_especifico.md +++ b/docs/04_desarrollo_especifico.md @@ -1130,7 +1130,7 @@ Para documentos académicos en español similares a los evaluados: **Fuente:** [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/src/branch/main/src/results/raytune_paddle_results_20260119_122609.csv). -#### Cuándo Aplicar Esta Metodología +#### ¿Cuándo aplicar esta metodología? La optimización de hiperparámetros es recomendable cuando: @@ -1144,7 +1144,7 @@ La optimización de hiperparámetros es recomendable cuando: 5. **Sin datos de entrenamiento**: No se dispone de datasets etiquetados para fine-tuning. -#### Cuándo NO Aplicar Esta Metodología +#### ¿Cuándo no aplicar esta metodología? La optimización de hiperparámetros puede ser insuficiente cuando: @@ -1262,4 +1262,4 @@ PaddleOCR ofrece dos variantes de modelos: Mobile (optimizados para dispositivos Los modelos Server, a pesar de ofrecer potencialmente mayor precisión, resultan inviables en hardware con VRAM limitada (≤6 GB) debido a errores de memoria (Out of Memory). Los modelos Mobile, con un consumo de memoria 88 veces menor, funcionan de manera estable y ofrecen rendimiento suficiente para el caso de uso evaluado. -La validación con aceleración GPU demuestra que la configuración optimizada mediante Ray Tune mejora la precisión (CER: 8.85% → 7.72% en dataset completo, 0.79% en mejor trial individual) y, combinada con la aceleración de 82x proporcionada por GPU, resulta prácticamente aplicable en escenarios de producción real. Las conclusiones derivadas de esta validación se presentan en el Capítulo 5. +La validación con aceleración GPU demuestra que la configuración optimizada mediante Ray Tune mejora la precisión (CER: 8.85% → 7.72% en dataset completo, 0.79% en mejor trial individual) y, combinada con la aceleración de 82x proporcionada por GPU, resulta prácticamente aplicable en escenarios de producción real. Las conclusiones derivadas de esta validación se presentan en el [Capítulo 5](#capitulo-5). diff --git a/docs/05_conclusiones_trabajo_futuro.md b/docs/05_conclusiones_trabajo_futuro.md index 0d14f77..1904419 100644 --- a/docs/05_conclusiones_trabajo_futuro.md +++ b/docs/05_conclusiones_trabajo_futuro.md @@ -14,7 +14,7 @@ El objetivo principal del trabajo era alcanzar un CER inferior al 2% en document **Fuente:** [`docs/metrics/metrics_paddle.md`](https://seryus.ddns.net/unir/MastersThesis/src/branch/main/docs/metrics/metrics_paddle.md). -> **Nota:** El objetivo de CER < 2% se cumple en el mejor trial individual (0.79%, 5 páginas). La validación sobre el conjunto de datos completo (45 páginas) muestra un CER de 7.72%, evidenciando sobreajuste al subconjunto de optimización. Esta diferencia se analiza en detalle en el Capítulo 4. +> **Nota:** El objetivo de CER < 2% se cumple en el mejor trial individual (0.79%, 5 páginas). La validación sobre el conjunto de datos completo (45 páginas) muestra un CER de 7.72%, evidenciando sobreajuste al subconjunto de optimización. Esta diferencia se analiza en detalle en el [Capítulo 4](#capitulo-4). ### Cumplimiento de los Objetivos Específicos diff --git a/docs/07_anexo_a.md b/docs/07_anexo_a.md index 92c1bc0..19d6d4f 100644 --- a/docs/07_anexo_a.md +++ b/docs/07_anexo_a.md @@ -247,7 +247,7 @@ Se ejecutaron 64 trials por servicio utilizando Ray Tune con Optuna sobre las p **Fuente:** [`src/results/raytune_paddle_results_20260119_122609.csv`](https://seryus.ddns.net/unir/MastersThesis/src/branch/main/src/results/raytune_paddle_results_20260119_122609.csv). -> **Nota:** Ver [Figura 15](#figura-15) en el Capítulo 4 para la representación gráfica de esta distribución. +> **Nota:** Ver [Figura 15](#figura-15) en el [Capítulo 4](#capitulo-4) para la representación gráfica de esta distribución. ### Configuración Óptima PaddleOCR @@ -282,7 +282,7 @@ La siguiente configuración logró el mejor rendimiento en el ajuste de hiperpar **Fuente:** Datos de tiempo CPU de [`src/raytune_paddle_subproc_results_20251207_192320.csv`](https://seryus.ddns.net/unir/MastersThesis/src/branch/main/src/raytune_paddle_subproc_results_20251207_192320.csv) y tiempos de GPU en trials de ajuste. Elaboración propia. -> **Nota:** Ver [Figura 20](#figura-20) en el Capítulo 4 para la representación gráfica de esta comparación. +> **Nota:** Ver [Figura 20](#figura-20) en el [Capítulo 4](#capitulo-4) para la representación gráfica de esta comparación. ### Análisis de Errores por Servicio diff --git a/markdown_utils.py b/markdown_utils.py index 426cfc6..2166ca1 100644 --- a/markdown_utils.py +++ b/markdown_utils.py @@ -92,25 +92,23 @@ def md_to_html_para(text): def convert_latex_formulas(text): - """Convert LaTeX formulas to MathML for Word compatibility.""" - # Block formulas $$...$$ + """Convert LaTeX formulas to styled text for easy copy-paste into Word equation editor. + + Word's equation editor accepts LaTeX directly, so we preserve the LaTeX code + in a visually distinct format that users can copy and paste. + """ + # Block formulas $$...$$ - center and style as equation placeholder def convert_block(match): - latex = match.group(1) - try: - mathml = latex_to_mathml(latex, display="block") - return f'

{mathml}

' - except: - return match.group(0) # Keep original if conversion fails + latex = match.group(1).strip() + # Style as centered, monospace text that's easy to identify and copy + return f'

{latex}

' text = re.sub(r'\$\$([^$]+)\$\$', convert_block, text) - # Inline formulas $...$ + # Inline formulas $...$ - style as inline code def convert_inline(match): - latex = match.group(1) - try: - return latex_to_mathml(latex, display="inline") - except: - return match.group(0) + latex = match.group(1).strip() + return f'{latex}' text = re.sub(r'\$([^$]+)\$', convert_inline, text) return text diff --git a/thesis_output/plantilla_individual.htm b/thesis_output/plantilla_individual.htm index a8d6cc9..557afae 100644 --- a/thesis_output/plantilla_individual.htm +++ b/thesis_output/plantilla_individual.htm @@ -4152,7 +4152,7 @@ EN-US;mso-bidi-language:AR-SA'>
Resumen

El presente Trabajo Fin de Máster aborda la optimización de sistemas de Reconocimiento Óptico de Caracteres (OCR) basados en inteligencia artificial para documentos en español. El objetivo principal es identificar una configuración de hiperparámetros que maximice la precisión del reconocimiento de texto sin requerir fine-tuning de los modelos base.

La metodología combina un benchmark comparativo de tres soluciones de código abierto (EasyOCR, PaddleOCR y DocTR) con un ajuste sistemático de hiperparámetros mediante Ray Tune y Optuna, evaluando 64 configuraciones con aceleración GPU sobre un corpus de 45 páginas. Las métricas de evaluación utilizadas fueron CER y WER.

Los resultados muestran mejoras significativas en el mejor trial (CER 0.79%) y una mejora del 12.8% en CER en la validación sobre el dataset completo (de 8.85% a 7.72%). El parámetro textline_orientation destacó como factor crítico, mientras que text_det_thresh mostró correlación positiva moderada con el error.

-

Se concluye que la optimización de hiperparámetros es una alternativa viable al fine-tuning en documentos académicos en español, aunque la generalización depende del tamaño del subconjunto de ajuste. La infraestructura dockerizada facilita la reproducibilidad y la evaluación sistemática de configuraciones OCR.

+

Se concluye que la optimización de hiperparámetros es una alternativa viable al fine-tuning en documentos académicos en español, aunque la generalización depende del tamaño del subconjunto de ajuste. En conclusión, la infraestructura dockerizada facilita la reproducibilidad y la evaluación sistemática de configuraciones OCR.

Fuente: metrics_paddle.md, paddle_correlations.csv.

 

Palabras clave: OCR, PaddleOCR, Optimización de hiperparámetros, Ray Tune, Documentos académicos

@@ -4170,7 +4170,7 @@ EN-US;mso-bidi-language:AR-SA'>
Abstract

This Master's Thesis addresses the optimization of AI-based Optical Character Recognition (OCR) systems for Spanish academic documents. The main objective is to identify a hyperparameter configuration that maximizes recognition accuracy without fine-tuning the base models.

The methodology combines a comparative benchmark of three open-source OCR engines (EasyOCR, PaddleOCR, and DocTR) with a systematic hyperparameter search using Ray Tune and Optuna. Sixty-four configurations were evaluated with GPU acceleration on a 45-page corpus, using CER and WER as evaluation metrics.

Results show significant gains in the best trial (CER 0.79%) and a 12.8% CER improvement on the full dataset (from 8.85% to 7.72%). The textline_orientation parameter had the strongest impact, while text_det_thresh showed a moderate positive correlation with error.

-

The study concludes that hyperparameter optimization is a viable alternative to fine-tuning for Spanish academic documents, although generalization depends on the size of the tuning subset. The dockerized infrastructure supports reproducibility and systematic evaluation of OCR configurations.

+

The study concludes that hyperparameter optimization is a viable alternative to fine-tuning for Spanish academic documents, although generalization depends on the size of the tuning subset. In conclusion, the dockerized infrastructure supports reproducibility and systematic evaluation of OCR configurations.

Sources: metrics_paddle.md, paddle_correlations.csv.

 

Keywords: OCR, PaddleOCR, Hyperparameter optimization, Ray Tune, Academic documents

@@ -4531,7 +4531,7 @@ mso-hansi-theme-font:major-latin;mso-bidi-font-family:Arial;color:#0098CD; mso-ansi-language:ES;mso-fareast-language:EN-US;mso-bidi-language:AR-SA'>
-

1.   Introducción

¿Es posible mejorar significativamente un sistema OCR sin reentrenarlo? Esta pregunta, aparentemente simple, encierra un desafío práctico que afecta a investigadores, instituciones educativas y empresas que necesitan digitalizar documentos pero carecen de los recursos para realizar fine-tuning de modelos neuronales.

Motivación

@@ -4541,7 +4541,7 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>El OCR actúa como puente entre el mundo físico del documento impreso y el mundo digital del texto procesable. Su precisión determina directamente la calidad de los procesos downstream. Un error de reconocimiento en un nombre propio puede invalidar una búsqueda; un dígito mal reconocido en una factura puede causar discrepancias contables. Una palabra mal interpretada en un contrato puede alterar su significado legal.

Desafíos específicos del español

El procesamiento de documentos en español presenta particularidades que complican el reconocimiento automático de texto. Los caracteres especiales propios del idioma (la letra ñ, las vocales acentuadas á, é, í, ó, ú, la diéresis ü, y los signos de puntuación invertidos ¿, ¡) no están presentes en muchos conjuntos de entrenamiento internacionales, lo que puede degradar el rendimiento de modelos preentrenados predominantemente en inglés.

-

La Tabla 1 resume los principales desafíos lingüísticos del OCR en español:

+

La Tabla 1 resume los principales desafíos lingüísticos del OCR en español:

Tabla 1. Desafíos lingüísticos específicos del OCR en español.

Desafío

Descripción

Impacto en OCR

Caracteres especiales

ñ, á, é, í, ó, ú, ü, ¿, ¡

Confusión con caracteres similares (n/ñ, a/á)

Palabras largas

Español permite compuestos largos

Mayor probabilidad de error por carácter

Abreviaturas

Dr., Sra., Ud., etc.

Puntos internos confunden segmentación

Nombres propios

Tildes en apellidos (García, Martínez)

Bases de datos sin soporte Unicode

Fuente: Elaboración propia.

@@ -4550,7 +4550,7 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>La brecha entre investigación y práctica

Los modelos OCR basados en redes neuronales profundas, como los empleados en PaddleOCR, EasyOCR o DocTR, ofrecen un rendimiento competitivo en benchmarks estándar. No obstante, estos resultados en condiciones controladas no siempre se trasladan a documentos del mundo real.

La adaptación de modelos preentrenados a dominios específicos típicamente requiere fine-tuning con datos etiquetados del dominio objetivo y recursos computacionales significativos. Esta barrera técnica y económica excluye a muchos investigadores y organizaciones de beneficiarse plenamente de estas tecnologías.

-

La Tabla 2 ilustra los requisitos típicos para diferentes estrategias de mejora de OCR:

+

La Tabla 2 ilustra los requisitos típicos para diferentes estrategias de mejora de OCR:

Tabla 2. Comparación de estrategias de mejora de modelos OCR.

Estrategia

Datos requeridos

Hardware

Tiempo

Expertise

Fine-tuning completo

Miles de imágenes etiquetadas

GPU de alta memoria

Días o semanas

Alto

Fine-tuning parcial

Cientos o miles de imágenes etiquetadas

GPU dedicada

Horas o días

Medio-Alto

Transfer learning

Centenas de imágenes etiquetadas

GPU dedicada

Horas

Medio

Optimización de hiperparámetros

Subconjunto de validación

CPU o GPU (CUDA 12.2+ en Docker DocTR)

Horas

Bajo-Medio

Fuente: docs/07_anexo_a.md, sección A.9.

@@ -4558,7 +4558,7 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>La oportunidad: optimización sin fine-tuning

La presente investigación surge de una necesidad práctica: optimizar un sistema OCR para documentos académicos en español sin disponer de infraestructura de entrenamiento dedicada para fine-tuning. Esta restricción, lejos de ser una limitación excepcional, representa la realidad de muchos entornos académicos y empresariales donde el acceso a cómputo avanzado es limitado.

La hipótesis central de este trabajo es que los modelos OCR preentrenados contienen capacidades latentes que pueden activarse mediante la configuración adecuada de sus hiperparámetros de inferencia. Parámetros como los umbrales de detección de texto, las opciones de preprocesamiento de imagen, y los filtros de confianza de reconocimiento pueden tener un impacto significativo en el rendimiento final. Su optimización sistemática puede aproximarse a los beneficios del fine-tuning sin sus costes asociados.

-

Esta oportunidad se ve reforzada por la disponibilidad de frameworks modernos de optimización de hiperparámetros como Ray Tune (Liaw et al., 2018) y algoritmos de búsqueda eficientes como Optuna (Akiba et al., 2019), que permiten explorar espacios de configuración de manera sistemática y eficiente.

+

Esta oportunidad se ve reforzada por la disponibilidad de frameworks modernos de optimización de hiperparámetros como Ray Tune y algoritmos de búsqueda eficientes como Optuna, que permiten explorar espacios de configuración de manera sistemática y eficiente.

Planteamiento del trabajo

Formulación del problema

Las observaciones anteriores conducen a formular el problema central de este trabajo:

@@ -4587,10 +4587,10 @@ mso-bidi-font-family:"Calibri Light";mso-bidi-theme-font:major-latin'>Pequeñas y medianas empresas: Organizaciones que automatizan flujos documentales (facturas, contratos, correspondencia) sin presupuesto para soluciones enterprise o infraestructura GPU.

Desarrolladores de software: Quienes integran OCR en aplicaciones con restricciones de recursos, como dispositivos móviles o servidores compartidos, y necesitan maximizar el rendimiento sin costes adicionales de hardware.

Estructura del trabajo

-

El documento sigue una estructura que refleja el proceso investigador. Tras esta introducción, el Capítulo 2 sitúa el trabajo en su contexto técnico y revisa las tecnologías OCR basadas en aprendizaje profundo. Se describen las arquitecturas de detección, los modelos de reconocimiento y los trabajos previos en optimización de estos sistemas.

-

El Capítulo 3 traduce las preguntas de investigación en objetivos concretos, siguiendo la metodología SMART. Además, describe con detalle el enfoque experimental: preparación del dataset, métricas de evaluación y configuración del proceso de optimización con Ray Tune y Optuna.

-

El núcleo del trabajo se desarrolla en el Capítulo 4, que presenta el estudio comparativo y la optimización de hiperparámetros en tres fases: planteamiento de la comparativa con evaluación de EasyOCR, PaddleOCR y DocTR; desarrollo de la optimización mediante 64 trials con Ray Tune; y análisis crítico de los resultados obtenidos.

-

Finalmente, el Capítulo 5 sintetiza las contribuciones, evalúa el grado de cumplimiento de los objetivos y propone líneas de trabajo futuro. Los Anexos proporcionan acceso al repositorio de código fuente y datos, así como tablas detalladas de resultados experimentales.

REF _Ref_Sec2 \h Capítulo 2 sitúa el trabajo en su contexto técnico y revisa las tecnologías OCR basadas en aprendizaje profundo. Se describen las arquitecturas de detección, los modelos de reconocimiento y los trabajos previos en optimización de estos sistemas.

+

El Capítulo 3 traduce las preguntas de investigación en objetivos concretos, siguiendo la metodología SMART. Además, describe con detalle el enfoque experimental: preparación del dataset, métricas de evaluación y configuración del proceso de optimización con Ray Tune y Optuna.

+

El núcleo del trabajo se desarrolla en el Capítulo 4, que presenta el estudio comparativo y la optimización de hiperparámetros en tres fases: planteamiento de la comparativa con evaluación de EasyOCR, PaddleOCR y DocTR; desarrollo de la optimización mediante 64 trials con Ray Tune; y análisis crítico de los resultados obtenidos.

+

Finalmente, el Capítulo 5 sintetiza las contribuciones, evalúa el grado de cumplimiento de los objetivos y propone líneas de trabajo futuro. Los Anexos proporcionan acceso al repositorio de código fuente y datos, así como tablas detalladas de resultados experimentales.

2.   Contexto @@ -4661,7 +4661,8 @@ _Toc14106979">La arquitectura CRNN consta de tres componentes:

1.   Capas convolucionales: Extraen características visuales de la imagen de entrada

2.   Capas recurrentes: Modelan las dependencias secuenciales entre características

-

3.   Capa de transcripción: Convierte las predicciones de la RNN en secuencias de caracteres mediante CTC
SVTR (Scene-Text Visual Transformer Recognition): Desarrollado por Du et al. (2022), SVTR aplica la arquitectura Transformer al reconocimiento de texto, utilizando parches de imagen como tokens de entrada. Esta aproximación elimina la necesidad de RNN y permite capturar dependencias globales de manera más eficiente.

+

3.   Capa de transcripción: Convierte las predicciones de la RNN en secuencias de caracteres mediante CTC

+

SVTR (Scene-Text Visual Transformer Recognition): Desarrollado por Du et al. (2022), SVTR aplica la arquitectura Transformer al reconocimiento de texto, utilizando parches de imagen como tokens de entrada. Esta aproximación elimina la necesidad de RNN y permite capturar dependencias globales de manera más eficiente.

Arquitecturas con Atención: Los modelos encoder-decoder con mecanismos de atención (Bahdanau et al., 2015) permiten al decodificador "enfocarse" en diferentes partes de la imagen mientras genera cada carácter. Esto es especialmente útil para texto largo o con layouts complejos.

TrOCR (Transformer-based OCR): Propuesto por Li et al. (2023), TrOCR utiliza un Vision Transformer (ViT) como encoder y un Transformer de lenguaje como decoder, logrando resultados estado del arte en múltiples benchmarks.

Tabla 5. Comparativa de arquitecturas de reconocimiento de texto.

@@ -4672,11 +4673,11 @@ _Toc14106979">La evaluación rigurosa de sistemas OCR requiere métricas estandarizadas que permitan comparaciones objetivas. Las métricas fundamentales se basan en la distancia de edición de Levenshtein.

Distancia de Levenshtein

La distancia de Levenshtein (Levenshtein, 1966) entre dos cadenas es el número mínimo de operaciones de edición (inserción, eliminación, sustitución) necesarias para transformar una cadena en otra. Formalmente, para dos cadenas a y b:

-

d(a,b)=min(inserciones+eliminaciones+sustituciones)

+

d(a,b) = \min(\text{inserciones} + \text{eliminaciones} + \text{sustituciones})

Esta métrica es fundamental para calcular tanto CER como WER.

Character Error Rate (CER)

El CER mide el error a nivel de carácter y se calcula como:

-

CER=S+D+IN

+

CER = \frac{S + D + I}{N}

Donde:

·     S = número de sustituciones de caracteres

·     D = número de eliminaciones de caracteres

@@ -4685,7 +4686,7 @@ _Toc14106979">Un CER bajo indica que el sistema comete pocos errores a nivel de carácter. Para aplicaciones críticas se requiere un nivel de error muy reducido, mientras que en tareas de búsqueda o archivo pueden aceptarse errores mayores.

Word Error Rate (WER)

El WER mide el error a nivel de palabra, utilizando la misma fórmula pero considerando palabras como unidades:

-

WER=Sw+Dw+IwNw

+

WER = \frac{S_w + D_w + I_w}{N_w}

El WER es generalmente mayor que el CER, ya que un solo error de carácter puede invalidar una palabra completa. Esta diferencia es relevante cuando se comparan sistemas que preservan caracteres pero pierden palabras completas.

Otras Métricas Complementarias

Precisión y Recall a nivel de palabra: Útiles cuando se evalúa la capacidad del sistema para detectar palabras específicas.

@@ -4715,7 +4716,7 @@ _Toc14106979">Soluciones OCR de Código Abierto

En los últimos años han surgido varias soluciones OCR de código abierto que democratizan el acceso a esta tecnología. A continuación se analizan en detalle las tres principales alternativas evaluadas en este trabajo.

EasyOCR

-

EasyOCR es una biblioteca de OCR desarrollada por JaidedAI (2020) con el objetivo de proporcionar una solución de fácil uso que soporte múltiples idiomas. Actualmente soporta más de 80 idiomas, incluyendo español.

+

EasyOCR es una librería de OCR desarrollada por JaidedAI (2020) con el objetivo de proporcionar una solución de fácil uso que soporte múltiples idiomas. Actualmente soporta más de 80 idiomas, incluyendo español.

Arquitectura técnica:

·     Detector: CRAFT (Character Region Awareness for Text Detection)

·     Reconocedor: CRNN con backbone ResNet/VGG + BiLSTM + CTC

@@ -4735,9 +4736,19 @@ _Toc14106979">PaddleOCR es el sistema OCR desarrollado por Baidu como parte del ecosistema PaddlePaddle (2024). Representa una de las soluciones más completas y activamente mantenidas en el ecosistema de código abierto. Su evolución incluye PP-OCR (Du et al., 2020) y PP-OCRv4 (Du et al., 2023); la versión PP-OCRv5, utilizada en este trabajo, incorpora avances recientes en precisión y eficiencia.

Arquitectura técnica:

El pipeline de PaddleOCR consta de tres módulos principales:

-

1.   Detector de texto (DB - Differentiable Binarization):
Backbone: ResNet18/ResNet50
Neck: FPN (Feature Pyramid Network)
Head: Segmentación con binarización diferenciable
Salida: Polígonos que encierran regiones de texto

-

2.   Clasificador de orientación:
Determina si el texto está rotado 0° o 180°
Permite corrección automática de texto invertido
Opcional pero recomendado para documentos escaneados

-

3.   Reconocedor de texto (SVTR):
Encoder: Vision Transformer modificado
Decoder: CTC o Attention-based
Vocabulario: Configurable por idioma

+

1.   Detector de texto (DB - Differentiable Binarization):

+

·     Backbone: ResNet18/ResNet50

+

·     Neck: FPN (Feature Pyramid Network)

+

·     Head: Segmentación con binarización diferenciable

+

·     Salida: Polígonos que encierran regiones de texto

+

2.   Clasificador de orientación:

+

·     Determina si el texto está rotado 0° o 180°

+

·     Permite corrección automática de texto invertido

+

·     Opcional pero recomendado para documentos escaneados

+

3.   Reconocedor de texto (SVTR):

+

·     Encoder: Vision Transformer modificado

+

·     Decoder: CTC o Attention-based

+

·     Vocabulario: Configurable por idioma

Hiperparámetros configurables:

PaddleOCR expone numerosos hiperparámetros que permiten ajustar el comportamiento del sistema. Los más relevantes para este trabajo son:

Tabla 6. Hiperparámetros de detección de PaddleOCR.

@@ -4796,18 +4807,16 @@ _Toc14106979">·     Parámetros de regularización (dropout, weight decay)

·     Umbrales de decisión en tiempo de inferencia (relevante para este trabajo)

El problema de HPO puede formalizarse como:

-

λ*=argminλΛ(Mλ,Dval)

+

\lambda^* = \operatorname{argmin}_{\lambda \in \Lambda} \mathcal{L}(M_\lambda, D_{val})

Donde:

-

·     λ es un vector de hiperparámetros

-

·     Λ es el espacio de búsqueda

-

·     Mλ es el modelo configurado con λ

-

·      es la función de pérdida

-

·     Dval es el conjunto de validación

+

·     \lambda es un vector de hiperparámetros

+

·     \Lambda es el espacio de búsqueda

+

·     M_\lambda es el modelo configurado con \lambda

+

·     \mathcal{L} es la función de pérdida

+

·     D_{val} es el conjunto de validación

Métodos de Optimización

Grid Search (Búsqueda en rejilla):

- -El método más simple consiste en evaluar todas las combinaciones posibles de valores discretizados de los hiperparámetros. Para k hiperparámetros con n valores cada uno, requiere nk evaluaciones. - +

El método más simple consiste en evaluar todas las combinaciones posibles de valores discretizados de los hiperparámetros. Para k hiperparámetros con n valores cada uno, requiere n^k evaluaciones.

Ventajas:

·     Exhaustivo y reproducible

·     Fácil de paralelizar

@@ -4825,20 +4834,18 @@ El método más simple consiste en evaluar todas las combinaciones posibles de v

1.   Ajustar el modelo sustituto a las observaciones actuales

2.   Optimizar la función de adquisición para seleccionar el siguiente punto

3.   Evaluar la función objetivo en el punto seleccionado

-

4.   Actualizar las observaciones y repetir
Los modelos sustitutos más comunes son:
Procesos Gaussianos (GP): Proporcionan incertidumbre bien calibrada pero escalan pobremente
Random Forests: Manejan bien espacios de alta dimensión y variables categóricas
Tree-structured Parzen Estimator (TPE): Modela densidades en lugar de la función objetivo

+

4.   Actualizar las observaciones y repetir

+

Los modelos sustitutos más comunes son:

+

·     Procesos Gaussianos (GP): Proporcionan incertidumbre bien calibrada pero escalan pobremente

+

·     Random Forests: Manejan bien espacios de alta dimensión y variables categóricas

+

·     Tree-structured Parzen Estimator (TPE): Modela densidades en lugar de la función objetivo

Tree-structured Parzen Estimator (TPE)

- -TPE, propuesto por Bergstra et al. (2011) e implementado en Optuna, es particularmente efectivo para HPO. En lugar de modelar p(y|λ) directamente, TPE modela: - -

p(λ|y)={l(λ)si y<y*g(λ)si yy*

- -Donde y* es un umbral (típicamente el percentil 15-25 de las observaciones), l(λ) es la densidad de hiperparámetros con buen rendimiento, y g(λ) es la densidad de hiperparámetros con mal rendimiento. - +

TPE, propuesto por Bergstra et al. (2011) e implementado en Optuna, es particularmente efectivo para HPO. En lugar de modelar p(y|\lambda) directamente, TPE modela:

+

p(\lambda|y) = \begin{cases} l(\lambda) & \text{si } y < y^ \\ g(\lambda) & \text{si } y \geq y^ \end{cases}

+

Donde y^* es un umbral (típicamente el percentil 15-25 de las observaciones), l(\lambda) es la densidad de hiperparámetros con buen rendimiento, y g(\lambda) es la densidad de hiperparámetros con mal rendimiento.

La función de adquisición Expected Improvement se aproxima como:

-

EI(λ)l(λ)g(λ)

- -Configuraciones con alta probabilidad bajo l y baja probabilidad bajo g tienen mayor Expected Improvement. - +

EI(\lambda) \propto \frac{l(\lambda)}{g(\lambda)}

+

Configuraciones con alta probabilidad bajo l y baja probabilidad bajo g tienen mayor Expected Improvement.

Ventajas de TPE:

·     Maneja naturalmente espacios condicionales (hiperparámetros que dependen de otros)

·     Eficiente para espacios de alta dimensión

@@ -4863,6 +4870,7 @@ Configuraciones con alta probabilidad bajo 2.   Paralelizar la evaluación de trials

3.   Beneficiarse de la infraestructura de Ray para distribución

4.   Acceder a las visualizaciones de Optuna

+

Optuna se ha consolidado como una opción práctica y eficiente para optimización de hiperparámetros en problemas reales (Akiba et al., 2019).

Figura 2. Ciclo de optimización con Ray Tune y Optuna

Ciclo de optimización con Ray Tune y Optuna

Fuente: Elaboración propia.

@@ -4875,6 +4883,8 @@ Configuraciones con alta probabilidad bajo Breuel (2013) exploró la selección automática de arquitecturas de red para reconocimiento de texto manuscrito, optimizando número de capas, unidades y tipo de activación.

Optimización de post-procesamiento:

Schulz & Kuhn (2017) optimizaron parámetros de modelos de lenguaje para corrección de errores OCR, incluyendo pesos de interpolación entre modelos de caracteres y palabras.

+

Además, la variabilidad del rendimiento puede analizarse mediante correlaciones lineales (Pearson, 1895), complementadas por criterios de magnitud del efecto (Cohen, 1988).

+

Finalmente, líneas de AutoML como la búsqueda de arquitecturas (NAS) representan alternativas más costosas pero potencialmente automatizables para optimizar modelos (Zoph & Le, 2017).

Vacío en la literatura:

A pesar de estos trabajos, existe un vacío significativo respecto a la optimización sistemática de hiperparámetros de inferencia en pipelines OCR modernos como PaddleOCR. La mayoría de trabajos se centran en:

·     Entrenamiento de modelos (fine-tuning)

@@ -4912,7 +4922,7 @@ Configuraciones con alta probabilidad bajo Conclusiones

La revisión del estado del arte revela un panorama en el que las herramientas técnicas están maduras, pero su aplicación óptima para dominios específicos permanece poco explorada. Los sistemas OCR modernos, como PaddleOCR, EasyOCR y DocTR, ofrecen arquitecturas sofisticadas basadas en aprendizaje profundo que alcanzan resultados impresionantes en benchmarks estándar. Sin embargo, estos resultados no siempre se trasladan a documentos del mundo real, especialmente en idiomas con menos recursos como el español.

La evolución desde los sistemas de plantillas de los años 50 hasta los Transformers actuales ha sido espectacular, pero ha generado sistemas con decenas de hiperparámetros configurables cuyos valores por defecto representan compromisos generales, no configuraciones óptimas para dominios específicos. La literatura abunda en trabajos sobre entrenamiento y fine-tuning de modelos OCR, pero dedica poca atención a la optimización sistemática de los parámetros de inferencia, como umbrales de detección, opciones de preprocesamiento y filtros de confianza, que pueden marcar la diferencia entre un sistema usable y uno que requiere corrección manual extensiva.

-

Este vacío, combinado con las particularidades del español (acentos, eñes, signos invertidos) y la escasez de recursos específicos para este idioma, define el espacio de contribución del presente trabajo. Frameworks como Ray Tune y Optuna proporcionan las herramientas para abordar esta optimización de manera sistemática; PaddleOCR, con su pipeline altamente configurable, ofrece el sustrato técnico adecuado. El siguiente capítulo traduce esta oportunidad en objetivos concretos y una metodología experimental rigurosa.

3.   Objetivos @@ -4952,8 +4962,15 @@ concretos y metodología de trabajoSe utilizaron documentos PDF académicos de UNIR (Universidad Internacional de La Rioja), específicamente las instrucciones para la elaboración del TFE del Máster en Inteligencia Artificial.

Proceso de Conversión

El script prepare_dataset.ipynb implementa:

-

1.   Conversión PDF a imágenes:
Biblioteca: PyMuPDF (fitz)
Resolución: 300 DPI
Formato de salida: PNG

-

2.   Extracción de texto de referencia:
Método: page.get_text("dict") de PyMuPDF
Preservación de estructura de líneas
Tratamiento de texto vertical/marginal
Normalización de espacios y saltos de línea

+

1.   Conversión PDF a imágenes:

+

·     Biblioteca: PyMuPDF (fitz)

+

·     Resolución: 300 DPI

+

·     Formato de salida: PNG

+

2.   Extracción de texto de referencia:

+

·     Método: page.get_text("dict") de PyMuPDF

+

·     Preservación de estructura de líneas

+

·     Tratamiento de texto vertical/marginal

+

·     Normalización de espacios y saltos de línea

Estructura del Dataset

Figura 4. Estructura del dataset de evaluación

Estructura del dataset de evaluación

@@ -4986,7 +5003,7 @@ concretos y metodología de trabajo
El espacio de búsqueda se definió utilizando tune.choice() para parámetros booleanos y tune.uniform() para parámetros continuos, con OptunaSearch como algoritmo de optimización configurado para minimizar CER en 64 trials. La implementación completa está disponible en src/raytune/raytune_ocr.py (ver Anexo A). Ray Tune se apoya en el ecosistema Ray para escalar la búsqueda (Moritz et al., 2018).

Fase 4: Ejecución de Optimización

Arquitectura de Ejecución

-

Se implementó una arquitectura basada en contenedores Docker para aislar los servicios OCR y facilitar la reproducibilidad (ver sección 4.2.3 para detalles de la arquitectura).

+

Se implementó una arquitectura basada en contenedores Docker para aislar los servicios OCR y facilitar la reproducibilidad (ver Desarrollo de la comparativa en el Capítulo 4 para detalles de la arquitectura).

Ejecución con Docker Compose

Los servicios se orquestan mediante Docker Compose:

·     src/docker-compose.tuning.paddle.yml

@@ -5044,7 +5061,8 @@ docker compose -f docker-compose.tuning.doctr.yml down

2.   Sin límites de tiempo: AWS y Colab imponen timeouts de sesión que interrumpen experimentos largos

3.   Acceso instantáneo: Sin tiempo de aprovisionamiento de instancias cloud

4.   Almacenamiento local: Dataset y resultados en disco sin costos de transferencia

-

5.   Iteración rápida: Reinicio inmediato de contenedores Docker para depuración
Para un proyecto de investigación con múltiples iteraciones de ajuste de hiperparámetros, la ejecución local reduce costos frente a servicios cloud. Este análisis se detalla en docs/metrics/metrics.md.)

+

5.   Iteración rápida: Reinicio inmediato de contenedores Docker para depuración

+

Para un proyecto de investigación con múltiples iteraciones de ajuste de hiperparámetros, la ejecución local reduce costos frente a servicios cloud. Este análisis se detalla en docs/metrics/metrics.md.)

Limitaciones Metodológicas

1.   Tamaño del dataset: El dataset contiene 45 páginas de documentos académicos UNIR. Resultados pueden no generalizar a otros formatos.

2.   Subconjunto de optimización: El ajuste de hiperparámetros se realizó sobre 5 páginas (páginas 5-10), y su impacto se analiza en detalle en el capítulo de desarrollo específico.

@@ -5054,7 +5072,7 @@ docker compose -f docker-compose.tuning.doctr.yml down

Los objetivos y la metodología definidos en este capítulo establecen el marco para la experimentación. El objetivo general, alcanzar un CER inferior al 2% mediante optimización de hiperparámetros, se descompone en cinco objetivos específicos que abarcan desde la comparativa inicial de soluciones hasta la validación final de la configuración optimizada.

La metodología experimental en cinco fases garantiza un proceso sistemático y reproducible: preparación de un dataset de 45 páginas, benchmark comparativo de tres motores OCR, definición del espacio de búsqueda, ejecución de 64 trials con Ray Tune y Optuna, y validación de la configuración resultante. Las limitaciones metodológicas, como el tamaño del dataset, el subconjunto de optimización reducido y el texto de referencia automático, se reconocen explícitamente para contextualizar la interpretación de resultados.

El capítulo siguiente pone en práctica esta metodología, presentando el desarrollo experimental completo con sus resultados y análisis.

SEQ Tabla \* ARABIC 36. Correlación de parámetros con CER.

Parámetro

Correlación con CER

Interpretación

use_doc_unwarping

+0.879

Correlación alta positiva

use_doc_orientation_classify

-0.712

Correlación alta negativa

textline_orientation

-0.535

Correlación moderada negativa

text_det_thresh

+0.428

Correlación moderada positiva

text_det_box_thresh

+0.311

Correlación moderada positiva

text_rec_score_thresh

-0.268

Correlación moderada negativa

text_det_unclip_ratio

NaN

Varianza cero (valor fijo)

Fuente: src/results/correlations/paddle_correlations.csv.

@@ -5489,7 +5507,8 @@ Configuración óptima:

El clasificador de orientación de línea resuelve un problema fundamental en documentos con secciones y cambios de formato: determinar el orden correcto de lectura. Sin este clasificador:

1.   Las líneas del índice pueden mezclarse con el cuerpo del texto

2.   Los encabezados pueden insertarse en posiciones incorrectas

-

3.   Las listas numeradas pueden leerse en orden incorrecto
Para documentos académicos que típicamente incluyen índice, listas y encabezados multinivel, este clasificador es esencial.

+

3.   Las listas numeradas pueden leerse en orden incorrecto

+

Para documentos académicos que típicamente incluyen índice, listas y encabezados multinivel, este clasificador es esencial.

Recomendación: Siempre activar textline_orientation=True para documentos estructurados.

Análisis del Parámetro text_det_thresh

Comportamiento observado:

@@ -5540,14 +5559,14 @@ Configuración óptima:

Parámetro

Valor

Prioridad

Justificación

textline_orientation

True

Obligatorio

Crítico para documentos con secciones

use_doc_orientation_classify

True

Recomendado

Mejora orientación de documento

text_det_thresh

0.05 (rango: 0.04-0.10)

Recomendado

Detección sensible beneficia resultados

text_det_box_thresh

0.49 (rango: 0.4-0.6)

Recomendado

Balance de confianza

text_rec_score_thresh

0.57 (rango: 0.5-0.7)

Opcional

Filtra reconocimientos poco confiables

use_doc_unwarping

False

No recomendado

Innecesario para PDFs digitales

Fuente: src/results/raytune_paddle_results_20260119_122609.csv.

 

-

Cuándo Aplicar Esta Metodología

+

¿Cuándo aplicar esta metodología?

La optimización de hiperparámetros es recomendable cuando:

1.   GPU disponible: Acelera significativamente la exploración del espacio de hiperparámetros (82x más rápido que CPU).

2.   Modelo preentrenado adecuado: El modelo ya soporta el idioma objetivo (como PaddleOCR para español).

3.   Dominio específico: Se busca optimizar para un tipo de documento particular.

4.   Mejora incremental: El rendimiento baseline es aceptable pero mejorable.

5.   Sin datos de entrenamiento: No se dispone de datasets etiquetados para fine-tuning.

-

Cuándo NO Aplicar Esta Metodología

+

¿Cuándo no aplicar esta metodología?

La optimización de hiperparámetros puede ser insuficiente cuando:

1.   Idioma no soportado: El modelo no incluye el idioma en su vocabulario.

2.   Escritura manuscrita: Requiere fine-tuning o modelos especializados.

@@ -5602,7 +5621,7 @@ Configuración óptima:

Fuente: docs/metrics/metrics.md.

 

Los modelos Server, a pesar de ofrecer potencialmente mayor precisión, resultan inviables en hardware con VRAM limitada (≤6 GB) debido a errores de memoria (Out of Memory). Los modelos Mobile, con un consumo de memoria 88 veces menor, funcionan de manera estable y ofrecen rendimiento suficiente para el caso de uso evaluado.

-

La validación con aceleración GPU demuestra que la configuración optimizada mediante Ray Tune mejora la precisión (CER: 8.85% → 7.72% en dataset completo, 0.79% en mejor trial individual) y, combinada con la aceleración de 82x proporcionada por GPU, resulta prácticamente aplicable en escenarios de producción real. Las conclusiones derivadas de esta validación se presentan en el Capítulo 5.

REF _Ref_Sec5 \h Capítulo 5.

5.   Conclusiones y trabajo futuro

Conclusiones

@@ -5613,7 +5632,7 @@ y trabajo futuro

Fuente: docs/metrics/metrics_paddle.md.

 

-

Nota: El objetivo de CER < 2% se cumple en el mejor trial individual (0.79%, 5 páginas). La validación sobre el conjunto de datos completo (45 páginas) muestra un CER de 7.72%, evidenciando sobreajuste al subconjunto de optimización. Esta diferencia se analiza en detalle en el Capítulo 4.

+

Nota: El objetivo de CER < 2% se cumple en el mejor trial individual (0.79%, 5 páginas). La validación sobre el conjunto de datos completo (45 páginas) muestra un CER de 7.72%, evidenciando sobreajuste al subconjunto de optimización. Esta diferencia se analiza en detalle en el Capítulo 4.

Cumplimiento de los Objetivos Específicos

La evaluación comparativa de soluciones OCR (OE1) reveló diferencias significativas entre las tres alternativas analizadas. De las tres soluciones de código abierto evaluadas, EasyOCR, PaddleOCR (PP-OCRv5) y DocTR, PaddleOCR demostró el mejor rendimiento base para documentos en español. Además, su arquitectura modular y la amplia configurabilidad de su pipeline lo convierten en el candidato idóneo para optimización mediante ajuste de hiperparámetros.

@@ -5824,7 +5843,7 @@ analyze_results(results, prefix='raytune_paddle', config_keys=PADDLE_OCR_CONFIG_

Fuente: src/results/raytune_paddle_results_20260119_122609.csv.

 

-

Nota: Ver Figura 15 en el Capítulo 4 para la representación gráfica de esta distribución.

+

Nota: Ver Figura 15 en el Capítulo 4 para la representación gráfica de esta distribución.

Configuración Óptima PaddleOCR

La siguiente configuración logró el mejor rendimiento en el ajuste de hiperparámetros:

@@ -5850,7 +5869,7 @@ analyze_results(results, prefix='raytune_paddle', config_keys=PADDLE_OCR_CONFIG_

Fuente: Datos de tiempo CPU de src/raytune_paddle_subproc_results_20251207_192320.csv y tiempos de GPU en trials de ajuste. Elaboración propia.

 

-

Nota: Ver Figura 20 en el Capítulo 4 para la representación gráfica de esta comparación.

+

Nota: Ver Figura 20 en el Capítulo 4 para la representación gráfica de esta comparación.

Análisis de Errores por Servicio

Tabla A8. Tipos de errores identificados por servicio OCR.

@@ -5875,7 +5894,12 @@ analyze_results(results, prefix='raytune_paddle', config_keys=PADDLE_OCR_CONFIG_

·     PaddleOCR: soporte de inferencia con CUDA 12.

·     PaddleOCR: soporte de Python 3.12 en dependencias.

A.10 Licencia

-

El código se distribuye bajo licencia MIT.

+

El código se distribuye bajo licencia MIT.

+

A.11 Índice de acrónimos

+

Tabla A10. Acrónimos utilizados en el trabajo.

+

Acrónimo

Significado

OCR

Reconocimiento Óptico de Caracteres

CER

Character Error Rate (tasa de error de caracteres)

WER

Word Error Rate (tasa de error de palabras)

GPU

Graphics Processing Unit

CPU

Central Processing Unit

API

Application Programming Interface

+

Fuente: Elaboración propia.

+