Extracción de Metadatos y Resumen de Normativas en Documentos Oficiales usando Qwen3.5-2B

Arquitectura de Procesamiento para Documentos Normativos

La gestión de normativas gubernamentales escaneadas presenta limitaciones severas con el OCR tradicional, el cual carece de comprensión contextual y semántica. El modelo de lenguaje visual Qwen3.5-2B resuelve esta fricción tecnológica permitiendo la extracción de datos directa desde imágenes complejas. Este enfoque transforma documentos estáticos, sellos oficiales y formatos no estructurados en registros indexables mediante bases de datos relacionales o motores vectoriales.

Implementación del Pipeline de Extracción

Para garantizar la escalabilidad en entornos de producción, la interacción con el modelo debe realizarse a través de su API compatible con OpenAI, automatizando el flujo de trabajo. El siguiente script en Python gestiona la lectura de imágenes oficiales, su codificación para inferencia multimodal y la aplicación de restricciones estrictas para la salida de datos.


import base64
import json
from openai import OpenAI
from pydantic import BaseModel, ValidationError

class MetadatosDocumento(BaseModel):
    emisor: str
    titulo_normativa: str
    identificador: str
    fecha_emision: str
    destinatarios: list[str]

def procesar_documento_oficial(ruta_imagen: str) -> dict:
    cliente_api = OpenAI(
        api_key="QWEN_API_KEY",
        base_url="https://api.qwen-vl.inference.com/v1" 
    )
    
    with open(ruta_imagen, "rb") as archivo_img:
        img_codificada = base64.b64encode(archivo_img.read()).decode('utf-8')

    prompt_sistema = """
    Analiza la imagen del documento oficial. Extrae los metadatos y genera 
    un objeto JSON que cumpla estrictamente con el esquema solicitado.
    Si un campo no es visible, retorna 'No especificado'.
    """

    respuesta = cliente_api.chat.completions.create(
        model="qwen3.5-2b-vl",
        messages=[
            {"role": "system", "content": prompt_sistema},
            {"role": "user", "content": [
                {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_codificada}"}}
            ]}
        ],
        temperature=0.1,
        response_format={"type": "json_object"}
    )
    
    contenido_raw = respuesta.choices[0].message.content
    return json.loads(contenido_raw)

# Ejecución y validación del esquema
try:
    datos_extraidos = procesar_documento_oficial("decreto_municipal_2024.jpg")
    documento_validado = MetadatosDocumento(**datos_extraidos)
    print(documento_validado.model_dump_json(indent=2))
except ValidationError as e:
    print(f"Error en la estructura del JSON retornado: {e}")

La salida generada por esta integración transforma el texto visual en un payload estructurado listo para ser almacenado:


{
  "emisor": "Secretaría de Administración Pública",
  "titulo_normativa": "Directrices para la Optimización de Recursos Estatales",
  "identificador": "SAP-RES-2024-089",
  "fecha_emision": "2024-04-10",
  "destinatarios": [
    "Ministerio de Finanzas",
    "Dirección General de Proyectos"
  ]
}

Síntesis de Directivas y Análisis de Impacto

Más allá de los metadatos básicos, la arquitectura multimodal puede interpretar el cuerpo del texto para aislar disposiciones críticas. Modificando el prompt de usuario, es posible instruir al modelo para que evalúe el impacto de las políticas y cite las secciones originarias dentro del documento.


def extraer_puntos_clave_normativa(ruta_imagen: str) -> list:
    # ... inicialización de cliente y codificación de imagen ...
    
    prompt_analisis = """
    Evalúa el cuerpo normativo de la imagen proporcionada. Devuelve un arreglo JSON de objetos.
    Cada objeto debe contener:
    - "directiva": Resumen técnico de la política (máximo 25 palabras).
    - "referencia_cruzada": Ubicación exacta en el texto (Ej. Artículo X, Párrafo Y).
    - "nivel_de_innovacion": Clasificación estricta entre 'Alta', 'Media' o 'Baja'.
    """
    
    # Llamada a la API con temperature=0.2 para mantener consistencia analítica
    # Retorno y parseo del arreglo JSON omitido por brevedad
    return resultado_analisis

Optimización del Rendimiento en Producción

Al desplegar este modelo de visión por computadora para el procesamiento masivo de archivos gubernamentales, se deben aplicar las siguientes configuraciones técnicas:

  • Control de Hiperparámetros: Mantener el parámetro temperature entre 0.0 y 0.2 es crítico para tareas de extracción factual. Valores superiores incrementan la probabilidad de alucinaciones en fechas o números de folio.
  • Preprocesamiento de Imagen: Aplicar algoritmos de corrección de sesgo (deskewing) y binarización adaptativa antes de la codificación Base64. Esto mejora drásticamente la tokenización visual de sellos húmedos y firmas superpuestas sobre el texto impreso.
  • Validación de Esquema: Integrar librerías como Pydantic en el backend para interceptar y validar que el JSON retornado por el LLM cumpla estrictamente con el esquema de la base de datos antes de ejecutar sentencias INSERT.
  • Gestión de Contexto Extnedido: Para normativas de múltiples páginas, el pipeline debe dividir el documento en lotes de imágenes secuenciales. Posteriormente, se utiliza un prompt de consolidación asíncrono para unificar los metadatos extraídos de cada página en un único registro maestro.

Etiquetas: Qwen3.5-2B Vision-Language-Models Python OpenAI-API json

Publicado el 9-29 23:42