Saltar al contenido principal

Llama 3.2 Visión con RAG: Una guía con Ollama y ColPali

Aprende el proceso paso a paso para configurar una aplicación RAG utilizando Llama 3.2 Vision, Ollama y ColPali.
Actualizado 7 feb 2025  · 12 min de lectura

Los enfoques RAG tradicionales tienen dificultades con los documentos visualmente ricos, como los PDF. A menudo no pueden interpretar elementos visuales complejos, como imágenes, tablas y gráficos, lo que dificulta la extracción de información útil de estos formatos.

Aquí es donde Llama 3.2 entran en juego los modelos de visión. Estos avanzados multimodales añaden potentes capacidades de razonamiento de imágenes, lo que permite a los sistemas de IA procesar tanto datos textuales como visuales. Con Llama 3.2 Vision, ahora RAG puede manejar la complejidad de los PDF, desde el análisis de tablas detalladas hasta la interpretación de gráficos, proporcionando respuestas más precisas y significativas.

En este artículo, te explicaré por qué Llama 3.2 Vision es la solución ideal para estos retos y te guiaré sobre cómo implantarla con ColPali utilizando el modelo Llama 3.2 11B Vision.

Llama Fundamentals

Experimenta con Llama 3 para ejecutar la inferencia en modelos preentrenados, afinarlos en conjuntos de datos personalizados y optimizar el rendimiento.
Explora la pista

¿Por qué elegir los modelos de visión Llama 3.2 para el GAR?

La familia Llama 3.2 introduce un potente conjunto de modelos que combinan la visión y la comprensión del lenguaje. Los dos modelos más grandes, el 11B y el 90B, están diseñados específicamente para realizar tareas complejas en las que es necesario comprender conjuntamente la información visual y textual.

Estos modelos destacan en la lectura y el análisis de tablas, gráficos y cuadros, por lo que son perfectos para extraer información que a los modelos tradicionales de sólo texto les resulta difícil. Por ejemplo, un empresario podría preguntar, "¿Qué mes del año pasado tuvo el mayor beneficio?" y Llama 3.2 miraría el gráfico de rentabilidad y daría la respuesta correcta.

Además, los modelos pueden localizar objetos en imágenes basándose en descripciones. Tanto si se trata de localizar puntos de referencia en un mapa como de identificar tendencias en un gráfico, Llama 3.2 puede hacerlo fácilmente.

Llama 3.2 no sólo está a la altura de los mejores competidores, como Claude 3 Haiku y GPT4o-mini, sino que rinde igual de bien en tareas como el reconocimiento de imágenes y la comprensión de elementos visuales, como demuestran las pruebas comparativas ajustadas a las instrucciones de visión. Su capacidad para trabajar tanto con texto como con imágenes significa que puede manejar conversaciones más naturales y flexibles que mezclan información visual y escrita, lo que la hace ideal para una amplia gama de casos de uso.

puntos de referencia ajustados a las instrucciones de visión para la visión llama3.2

Fuente: Meta AI

Con estas funciones avanzadas, los modelos Llama 3.2 Vision abren nuevas posibilidades para RAG aplicaciones. Facilitan mucho la extracción de información de fuentes de datos complicadas, como los PDF, combinando imágenes y texto para obtener resultados más precisos y útiles.

Cómo implementar RAG con Llama 3.2 Vision utilizando Ollama y ColPali

Para configurar una aplicación RAG con Llama 3.2 Vision, tenemos que descargar el modelo Llama 3.2 Vision, configurar el entorno, instalar las bibliotecas necesarias y crear un sistema de recuperación. A continuación encontrarás una guía sencilla, paso a paso, que te ayudará a poner en marcha una aplicación RAG utilizando Llama 3.2 Vision y ColPali.

Ten en cuenta que los siguientes pasos se probaron en un portátil Colab Pro con una instancia A100.

Paso 1: Descarga las dependencias

En primer lugar, asegúrate de que tienes instaladas las dependencias necesarias:

!pip install byaldi
!sudo apt-get install -y poppler-utils
!pip install -q git+https://github.com/huggingface/transformers.git qwen-vl-utils flash-attn optimum auto-gptq bitsandbytes
!pip install ollama
!pip install colab-xterm

La biblioteca byaldi es esencial para indexar y buscar en documentos multimodales, mientras que otras herramientas como poppler-utils son necesarias para el manejo de PDF.

Paso 2: Carga el modelo RAG ColPali

ColPali es un método que mejora la recuperación de documentos incrustando directamente imágenes de páginas de documentos, como PDF escaneados, en lugar de basarse únicamente en el texto extraído. Utilizando modelos avanzados de lenguaje visual como PaliGemma y un mecanismo de recuperación de interacción tardía, ColPali maneja eficazmente elementos visuales complejos (tablas, imágenes y gráficos) para una búsqueda de documentos más precisa y rápida.

Utilizaremos ColPali para codificar nuestros PDF en incrustaciones. Puedes cargar el ColPali RAGMultiModalModel del siguiente modo:

import os
import base64
from byaldi import RAGMultiModalModel

RAG = RAGMultiModalModel.from_pretrained("vidore/colpali-v1.2", verbose=1)

Paso 3: Indexar un documento PDF de muestra

Descargaremos el famoso documento La atención es todo lo que necesitas y crearemos un índice para él utilizando la página RAGMultiModalModel. Este paso procesa el documento, extrayendo datos visuales y textuales para una rápida recuperación.

!wget <https://arxiv.org/pdf/1706.03762>
!mkdir docs
!mv 1706.03762 docs/attention.pdf
RAG.index(
    input_path="./docs/attention.pdf",
    index_name="attention",
    store_collection_with_index=True,  # Store base64 representation of images
    overwrite=True
)
Added page 1 of document 0 to index.
Added page 2 of document 0 to index.
Added page 3 of document 0 to index.
Added page 4 of document 0 to index.
Added page 5 of document 0 to index.
Added page 6 of document 0 to index.
Added page 7 of document 0 to index.
Added page 8 of document 0 to index.
Added page 9 of document 0 to index.
Added page 10 of document 0 to index.
Added page 11 of document 0 to index.
Added page 12 of document 0 to index.
Added page 13 of document 0 to index.
Added page 14 of document 0 to index.
Added page 15 of document 0 to index.
Index exported to .byaldi/attention
Index exported to .byaldi/attention
{0: 'docs/attention.pdf'}

Paso 4: Busca en el documento indexado

Una vez que hayas indexado el documento, puedes recuperar fácilmente el contenido relevante del documento de la siguiente manera:

query = "What's the BLEU score of the transformer architecture in EN-DE"
results = RAG.search(query, k=1)
results
[{'doc_id': 0, 'page_num': 8, 'score': 19.0, 'metadata': {}, 'base64': 'iVBORw0KGgoAAAANSUhEUgAABqQAAAiYCAIAAAA+NVHkAAEAAElEQVR4nOzdd1gUx/8H8KGDoC....'}]

Recupera la página o el elemento visual superior coincidente del PDF indexado.

Paso 5: Mostrar la imagen recuperada

Para visualizar la página recuperada, podemos guardar la imagen en un archivo y mostrarla de la siguiente forma:

from IPython.display import Image

def see_image(image_base64):
    image_bytes = base64.b64decode(image_base64)
    filename = 'image.jpg'
    with open(filename, 'wb') as f:
        f.write(image_bytes)
    display(Image(filename))

# For multiple retrieved pages
for res in results:
    see_image(res['base64'])

mostrar la imagen recuperada

Como puedes ver, la página recuperada contiene la información que necesitamos para responder a la pregunta What's the BLEU score of the transformer architecture in EN-DE. El siguiente paso es introducir esta imagen en nuestro modelo de Visión Llama 3.2 junto con la pregunta del usuario.

Paso 6: Configurar el modelo de visión Llama 3.2 para razonar

Para instalar y configurar el modelo Llama 3.2 Vision, utilizaremos Ollama dentro de un portátil Colab Pro con una instancia A100. Ejecutarás Ollama en el portátil y descargarás el modelo Llama 3.2 Vision para utilizarlo.

%load_ext colabxterm
%xterm

%xterm creará un terminal dentro del bloc de notas, del que podrás descargar Ollama utilizando este comando curl -fsSL | sh y, a continuación, ejecutar el siguiente comando para descargar y ejecutar el modelo Llama 3.2 11B Vision.

ollama serve & ollama run llama3.2-vision

Paso 7: Realiza la inferencia

Una vez que hayas descargado y ejecutado correctamente el modelo Llama 3.2 11B Vision, ya podemos conectarnos a él utilizando la biblioteca ollama del siguiente modo. Observa que aquí hemos guardado la página recuperada en la dirección image.jpg, de la que estamos introduciendo aquí junto con la pregunta del usuario en el modelo Llama 3.2 11B Visión.

import ollama
response = ollama.chat(
    model='llama3.2-vision',
    messages=[{
        'role': 'user',
        'content': "What's the BLEU score of the transformer architecture in EN-DE",
        'images': ['image.jpg']
    }]
)
print(response['message']['content'])
The table shows that the BLEU score for the transformer (base model) on the EN-DE task is 27.3. The BLEU score for the transformer (big) on the same task is 28.4.
Therefore, the BLEU score of the transformer architecture in EN-DE is **28.4**.

Paso 8: Ponerlo todo junto

Podemos combinar la recuperación ColPali y el código de inferencia Ollama en la función inference que aparece a continuación. Esta función recupera la página más relevante del documento, la pasa al modelo de visión junto con la consulta, y devuelve una respuesta.

def inference(question: str):
    results = RAG.search(question, k=1)  # Retrieve relevant data
    see_image(results[0]['base64'])  # Save and display image

    response = ollama.chat(
        model='llama3.2-vision',
        messages=[{
            'role': 'user',
            'content': question,
            'images': ['image.jpg']
        }]
    )

    return response['message']['content']

# Example queries
inference_result = inference("Please explain figure 1")
print(inference_result)
The Transformer model is a type of neural network architecture that was introduced in the paper "Attention Is All You Need" by Vaswani et al. in 2017. It has since become one of the most widely used architectures for natural language processing tasks, such as machine translation, text summarization, and question answering.

**What is a Transformer?**
A Transformer is a type of neural network that uses self-attention mechanisms to process input sequences, such as sentences or paragraphs. Unlike traditional recurrent neural networks (RNNs), which rely on sequential processing of inputs, Transformers can process all input elements simultaneously using parallelized attention modules.

**How does the Transformer work?**
The Transformer consists of an encoder and a decoder. The encoder takes in a sequence of tokens (e.g., words or characters) as input and produces a continuous representation of the input sequence. This representation is then fed into the decoder, which generates output sequences one token at a time.

**Key Components:**
* **Self-Attention Mechanism:** This mechanism allows the model to attend to different parts of the input sequence simultaneously and weigh their importance.
* **Multi-Head Attention:** The Transformer uses multiple attention heads to process different aspects of the input sequence in parallel, improving the model's ability to capture complex relationships between tokens.
* **Positional Encoding:** To incorporate positional information into the input sequence, the Transformer uses a positional encoding scheme that adds a learned vector to each token based on its position in the sequence.

**Advantages:**
* **Parallelization:** The Transformer can process all input elements simultaneously, making it much faster than traditional RNNs.
* **Flexibility:** The Transformer can handle sequences of varying lengths and is particularly effective for tasks involving long-range dependencies.

**Applications:**
The Transformer has been widely adopted in various natural language processing applications, including:
* Machine Translation
* Text Summarization
* Question Answering
* Sentiment Analysis
In summary, the Transformer model is a powerful neural network architecture that uses self-attention mechanisms to process input sequences efficiently and effectively. Its ability to parallelize attention modules has made it a popular choice for many natural language processing tasks.

extracto del papel de atención es todo lo que necesitas

Probemos con otra consulta:

inference_result = inference("What's the maximum path length of recurrent layer type")
print(inference_result)
The table provided in the image shows that for a Recurrent Layer, the Maximum Path Length is O(n). This means that as the number of nodes (n) in the network increases, the maximum path length also increases linearly with it.
Therefore, the maximum path length of a recurrent layer type is O(n).
*Answer*: O(n)

Visión Llama 3.2: Aplicaciones en el mundo real

La capacidad de Llama 3.2 Visión para combinar la comprensión visual y textual la hace ideal para diversas aplicaciones del mundo real.

En sanidad, Llama 3.2 Vision puede mejorar la precisión diagnóstica analizando imágenes médicas, como radiografías y resonancias magnéticas, junto con los historiales de los pacientes. Esta combinación de datos visuales y textuales ayuda a los médicos a tomar decisiones más informadas y acelera la investigación clínica, beneficiando en última instancia a la atención al paciente.

Llama 3.2 Visión también puede mejorar la experiencia de compra del cliente combinando imágenes de productos, reseñas de texto y consultas de clientes. Esto permite recomendaciones más personalizadas y un recorrido de compra a medida, mejorando tanto el compromiso como la satisfacción.

En el sector jurídico, Llama 3.2 Vision ayuda a los profesionales a recuperar y resumir rápidamente información de contratos, jurisprudencia y documentos escaneados. Incluso puede interpretar elementos visuales complejos, como diagramas judiciales o anotaciones en documentos, proporcionando información valiosa para el análisis jurídico y la toma de decisiones.

Por último, Llama 3.2 Visión puede ayudar a los entornos de aprendizaje interpretando ayudas visuales como diagramas y gráficos y enlazándolas con explicaciones textuales claras y en tiempo real. Esto hace que el contenido educativo sea más interactivo, ayudando tanto a estudiantes como a profesionales a aprender de forma más eficaz.

Conclusiones

Con ColPali y los Modelos de Visión de Llama 3.2, puedes construir un potente sistema RAG capaz de comprender y razonar sobre PDF que contengan datos visuales y textuales complejos. Esta combinación abre posibilidades para aplicaciones que van desde el análisis de documentos a la generación automatizada de informes, por lo que resulta muy útil para los flujos de trabajo de IA multimodal.


Ryan Ong's photo
Author
Ryan Ong
LinkedIn
Twitter

Ryan es un científico de datos líder especializado en la creación de aplicaciones de IA utilizando LLMs. Es candidato al doctorado en Procesamiento del Lenguaje Natural y Grafos de Conocimiento en el Imperial College de Londres, donde también completó su máster en Informática. Fuera de la ciencia de datos, escribe un boletín semanal de Substack, The Limitless Playbook, donde comparte una idea procesable de los mejores pensadores del mundo y ocasionalmente escribe sobre conceptos básicos de la IA.

Temas

Aprende IA con estos cursos

curso

Fine-Tuning with Llama 3

2 hr
529
Fine-tune Llama for custom tasks using TorchTune, and learn techniques for efficient fine-tuning such as quantization.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

tutorial

RAG Con Llama 3.1 8B, Ollama y Langchain: Tutorial

Aprende a crear una aplicación RAG con Llama 3.1 8B utilizando Ollama y Langchain, configurando el entorno, procesando documentos, creando incrustaciones e integrando un recuperador.
Ryan Ong's photo

Ryan Ong

12 min

tutorial

Ajuste fino de LLaMA 2: Guía paso a paso para personalizar el modelo de lenguaje grande

Aprende a ajustar Llama-2 en Colab utilizando nuevas técnicas para superar las limitaciones de memoria y computación y hacer más accesibles los grandes modelos lingüísticos de código abierto.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Tutorial sobre cómo crear aplicaciones LLM con LangChain

Explore el potencial sin explotar de los grandes modelos lingüísticos con LangChain, un marco Python de código abierto para crear aplicaciones avanzadas de IA.
Moez Ali's photo

Moez Ali

12 min

tutorial

Llama.cpp Tutorial: Una Guía Completa para la Inferencia e Implementación Eficiente del LLM

Esta completa guía sobre Llama.cpp te guiará a través de los aspectos esenciales de la configuración de tu entorno de desarrollo, la comprensión de sus funcionalidades básicas y el aprovechamiento de sus capacidades para resolver casos de uso del mundo real.
Zoumana Keita 's photo

Zoumana Keita

11 min

tutorial

Guía para principiantes de LlaMA-Factory WebUI: Ajuste de los LLM

Aprende a afinar los LLM en conjuntos de datos personalizados, evaluar el rendimiento y exportar y servir modelos sin problemas utilizando el marco de trabajo de bajo/ningún código de LLaMA-Factory.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Guía introductoria para el ajuste preciso de los LLM

El ajuste preciso de los grandes modelos lingüísticos (LLM) ha revolucionado el procesamiento del lenguaje natural (PLN) y ofrece capacidades sin precedentes en tareas como la traducción lingüística, el análisis del sentimiento y la generación de textos. Este enfoque transformador aprovecha modelos preentrenados como el GPT-2 y mejora su rendimiento en dominios específicos mediante el proceso de ajuste preciso.
Josep Ferrer's photo

Josep Ferrer

12 min

Ver másVer más