ReaderLM-v2: La próxima evolución en la conversión de HTML a texto

Resumen del Proyecto ReaderLM-v2

Descripción del Proyecto

ReaderLM-v2 es un modelo de lenguaje de 1.5B parámetros desarrollado por Jina AI. Se especializa en convertir HTML sin procesar en Markdown o JSON bien formateado. El modelo ofrece una precisión superior, un mejor manejo de contextos más largos (hasta 512K tokens combinados de entrada/salida) y un soporte multilingüe completo (29 idiomas). Mejora las tareas de extracción de contenido, análisis de HTML y transformación.

Novedades de ReaderLM-v2

  • Mejor Generación de Markdown: Generación mejorada de elementos complejos como bloques de código, listas anidadas, tablas y ecuaciones LaTeX.
  • Salida JSON: Generación directa de HTML a JSON utilizando esquemas predefinidos.
  • Manejo de Contextos Más Largos: Soporta hasta 512K tokens con mejor rendimiento en contenido extenso.
  • Soporte Multilingüe: Ampliado a 29 idiomas.
  • Estabilidad Mejorada: Disminuye los problemas de degeneración en secuencias largas mediante pérdida contrastiva.

Visión General del Modelo

  • Tipo de Modelo: Transformador autorregresivo, solo decodificador.
  • Número de Parámetros: 1.54 mil millones.
  • Ventana de Contexto: Hasta 512K tokens (entrada y salida combinadas).
  • Idiomas Soportados: Inglés, chino, japonés, coreano, francés, español, portugués, alemán, italiano, ruso, vietnamita, tailandés, árabe, y 29 en total.

Instrucciones de Uso

A Través de la API Reader

ReaderLM-v2 está integrado en la API Reader. Para usarlo, especifica x-engine: readerlm-v2 en las cabeceras de la solicitud y activa Accept: text/event-stream.

curl https://r.jina.ai/https://news.ycombinator.com/ -H 'x-engine: readerlm-v2' -H 'Accept: text/event-stream'

En Google Colab

Hay un cuaderno de Google Colab disponible para demostrar la conversión de HTML a Markdown, la extracción de JSON y el seguimiento de instrucciones. Está optimizado para la GPU T4 gratuita de Colab, requiriendo vllm y triton.

Uso Local

  1. Instalar dependencias:
    pip install transformers
    
  2. Cargar y ejecutar el modelo:
    from transformers import AutoModelForCausalLM, AutoTokenizer
    
    device = "cuda" # o "cpu"
    tokenizer = AutoTokenizer.from_pretrained("jinaai/ReaderLM-v2")
    model = AutoModelForCausalLM.from_pretrained("jinaai/ReaderLM-v2").to(device)
    
  3. (Opcional) Limpiar previamente el HTML: Las funciones de Python proporcionadas pueden eliminar scripts, estilos, comentarios, etiquetas meta, y manejar imágenes base64 y SVG.
    import re
    
    # ... (funciones de limpieza proporcionadas en el texto original)
    
    def clean_html(html: str, clean_svg: bool = False, clean_base64: bool = False):
        # ... (implementación proporcionada en el texto original)
        pass
    
  4. Crear un prompt:
    def create_prompt(
        text: str, tokenizer=None, instruction: str = None, schema: str = None
    ) -> str:
        # ... (implementación proporcionada en el texto original)
        pass
    
  5. Ejemplo de HTML a Markdown:
    html = "<html><body><h1>Hello, world!</h1></body></html>"
    html = clean_html(html)
    input_prompt = create_prompt(html, tokenizer=tokenizer)
    inputs = tokenizer.encode(input_prompt, return_tensors="pt").to(device)
    outputs = model.generate(
        inputs, max_new_tokens=1024, temperature=0, do_sample=False, repetition_penalty=1.08
    )
    print(tokenizer.decode(outputs[0]))
    
  6. Ejemplo de HTML a JSON:
    schema = """
    {
    "type": "object",
    "properties": {
    "title": {
    "type": "string"
    },
    ... (esquema completo en el texto original)
    }
    """
    html = clean_html(html)
    input_prompt = create_prompt(html, tokenizer=tokenizer, schema=schema)
    inputs = tokenizer.encode(input_prompt, return_tensors="pt").to(device)
    outputs = model.generate(
        inputs, max_new_tokens=1024, temperature=0, do_sample=False, repetition_penalty=1.08
    )
    print(tokenizer.decode(outputs[0]))
    

Características Clave

  • Convierte HTML sin procesar a Markdown o JSON.
  • Soporta 29 idiomas.
  • Maneja hasta 512K tokens (entrada y salida combinadas).
  • Genera elementos Markdown complejos (bloques de código, listas anidadas, tablas, LaTeX).
  • Salida JSON directa utilizando esquemas predefinidos.
  • Estabilidad mejorada para la generación de secuencias largas.
  • Supera a modelos más grandes en HTML a Markdown (ROUGE-L: 0.84, Distancia Levenshtein: 0.22, Similitud Jaro-Winkler: 0.82).
  • Rendimiento competitivo en HTML a JSON (Puntuación F1: 0.81, Precisión: 0.82, Recall: 0.81, Tasa de acierto: 0.98).
  • Fuerte evaluación cualitativa en Integridad del Contenido (39/50), Precisión Estructural (35/50) y Cumplimiento de Formato (36/50).

Usuarios Destino

  • Desarrolladores
  • Científicos de datos
  • Investigadores
  • Individuos u organizaciones que necesiten analizar y extraer contenido estructurado o con formato Markdown de HTML.

Enlaces del Proyecto

Escenarios de Aplicación

  • Extracción de Contenido: Extraer el contenido principal de páginas web para resumir, analizar o archivar.
  • Estructuración de Datos: Convertir datos HTML no estructurados a formato JSON estructurado para su ingestión en bases de datos o consumo por API.
  • Web Scraping: Mejorar la eficiencia y precisión de la recopilación de datos de sitios web.
  • Creación de Bases de Conocimiento: Transformar contenido web diverso en Markdown consistente para sistemas de gestión del conocimiento.
  • Pipelines de Procesamiento de Texto: Actuar como un paso de pre-procesamiento para modelos de lenguaje grandes (LLMs) al convertir HTML a un formato amigable para dichos modelos.

Compartir este artículo