Pular para o conteúdo principal

Llama 3.2 Visão com RAG: Um guia usando Ollama e ColPali

Aprenda o processo passo a passo de configuração de um aplicativo RAG usando Llama 3.2 Vision, Ollama e ColPali.
Actualizado 7 de fev. de 2025  · 12 min de leitura

As abordagens tradicionais de RAG têm dificuldades com documentos visualmente ricos, como PDFs. Em geral, eles não conseguem interpretar elementos visuais complexos, como imagens, tabelas e gráficos, o que dificulta a extração de insights úteis desses formatos.

É aqui que o Llama 3.2 os modelos de visão da Llama entram em cena. Esses recursos avançados multimodais adicionam recursos avançados de raciocínio de imagem, permitindo que os sistemas de IA processem dados visuais e de texto. Com o Llama 3.2 Vision, o RAG agora pode lidar com a complexidade dos PDFs, desde a análise de tabelas detalhadas até a interpretação de gráficos, fornecendo respostas mais precisas e significativas.

Neste artigo, explicarei por que o Llama 3.2 Vision é a solução ideal para esses desafios e mostrarei a você como implementá-lo com a ColPali usando o modelo Llama 3.2 11B Vision.

Llama Fundamentals

Experimente o Llama 3 para executar inferência em modelos pré-treinados, ajustá-los em conjuntos de dados personalizados e otimizar o desempenho.
Explorar a trilha

Por que escolher os modelos de visão Llama 3.2 para RAG?

A família Llama 3.2 apresenta um conjunto avançado de modelos que combinam visão e compreensão de linguagem. Os dois maiores modelos, 11B e 90B, foram projetados especificamente para lidar com tarefas complexas em que as informações visuais e textuais precisam ser compreendidas em conjunto.

Esses modelos são excelentes na leitura e análise de tabelas, gráficos e quadros, o que os torna perfeitos para extrair insights com os quais os modelos tradicionais somente de texto têm dificuldade. Por exemplo, o proprietário de uma empresa poderia perguntar: "Qual mês do ano passado teve o maior lucro?" e o Llama 3.2 examinaria o gráfico de lucratividade e daria a resposta correta.

Além disso, os modelos podem localizar objetos em imagens com base em descrições. Seja para localizar pontos de referência em um mapa ou identificar tendências em um gráfico, o Llama 3.2 pode lidar com isso facilmente.

O Llama 3.2 não só se equipara aos principais concorrentes, como o Claude 3 Haiku e o GPT4o-mini, como também apresenta um desempenho igualmente bom em tarefas como reconhecimento de imagens e compreensão de recursos visuais, conforme demonstrado nos benchmarks ajustados por instruções de visão. Sua capacidade de trabalhar com texto e imagens significa que ele pode lidar com conversas mais naturais e flexíveis que misturam informações visuais e escritas, tornando-o ideal para uma ampla gama de casos de uso.

benchmarks ajustados por instruções de visão para a visão llama3.2

Fonte: Meta AI

Com esses recursos avançados, os modelos Llama 3.2 Vision abrem novas possibilidades para você. RAG para aplicações RAG. Eles facilitam muito a extração de insights de fontes de dados complicadas, como PDFs, combinando recursos visuais e texto para obter resultados mais precisos e úteis.

Como implementar o RAG com o Llama 3.2 Vision usando Ollama e ColPali

Para configurar um aplicativo RAG com o Llama 3.2 Vision, precisamos fazer o download do modelo do Llama 3.2 Vision, configurar o ambiente, instalar as bibliotecas necessárias e criar um sistema de recuperação. Abaixo está um guia simples, passo a passo, para ajudar você a implementar um aplicativo RAG usando o Llama 3.2 Vision e o ColPali.

Observe que as etapas a seguir foram testadas em um notebook Colab Pro com uma instância A100.

Etapa 1: Faça o download das dependências

Primeiro, verifique se você tem as dependências necessárias instaladas:

!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

A biblioteca byaldi é essencial para indexação e pesquisa em documentos multimodais, enquanto outras ferramentas, como poppler-utils, são necessárias para o manuseio de PDFs.

Etapa 2: Carregar o modelo ColPali RAG

O ColPali é um método que aprimora a recuperação de documentos ao incorporar diretamente imagens de páginas de documentos, como PDFs digitalizados, em vez de depender apenas do texto extraído. Usando modelos avançados de linguagem de visão, como o PaliGemma, e um mecanismo de recuperação de interação tardia, o ColPali lida de forma eficiente com elementos visuais complexos (tabelas, imagens e gráficos) para uma pesquisa de documentos mais precisa e rápida.

Usaremos o ColPali para codificar nossos PDFs em incorporações. Você pode carregar o ColPali RAGMultiModalModel da seguinte forma:

import os
import base64
from byaldi import RAGMultiModalModel

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

Etapa 3: Indexar um documento PDF de amostra

Faremos o download do famoso artigo Attention is All You Need e criaremos um índice para ele usando o site RAGMultiModalModel. Essa etapa processa o documento, extraindo dados visuais e textuais para recuperação rápida.

!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'}

Etapa 4: Pesquisar o documento indexado

Depois de indexar o documento, você pode recuperar facilmente o conteúdo relevante do documento da seguinte forma:

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....'}]

Isso recupera a página ou o elemento visual correspondente no topo do PDF indexado.

Etapa 5: Exibir a imagem recuperada

Para visualizar a página recuperada, podemos salvar a imagem em um arquivo e exibi-la da seguinte 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'])

exibir a imagem recuperada

Como você pode ver, a página recuperada contém as informações de que precisamos para responder à pergunta What's the BLEU score of the transformer architecture in EN-DE. A próxima etapa é alimentar essa imagem em nosso modelo Llama 3.2 Vision juntamente com a pergunta do usuário.

Etapa 6: Configurar o modelo de visão Llama 3.2 para raciocínio

Para instalar e configurar o modelo Llama 3.2 Vision, usaremos o Ollama em um notebook Colab Pro com uma instância A100. Você executará o Ollama no notebook e fará o download do modelo Llama 3.2 Vision para uso.

%load_ext colabxterm
%xterm

%xterm criará um terminal dentro do notebook, do qual você poderá fazer o download do Ollama usando este comando curl -fsSL | sh e, em seguida, executar o seguinte comando para fazer o download e executar o modelo Llama 3.2 11B Vision.

ollama serve & ollama run llama3.2-vision

Etapa 7: Realizar inferência

Depois que você tiver baixado e executado com êxito o modelo Llama 3.2 11B Vision, poderemos nos conectar a ele usando a biblioteca ollama da seguinte forma. Observe que aqui salvamos a página recuperada em image.jpg, da qual estamos inserindo juntamente com a pergunta do usuário no modelo Llama 3.2 11B Vision.

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**.

Etapa 8: Juntando tudo

Podemos combinar a recuperação ColPali e o código de inferência Ollama na função inference abaixo. Essa função recupera a página mais relevante do documento, passa essa página para o modelo de visão junto com a consulta e retorna uma resposta.

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.

extrair da atenção é tudo o que você precisa de papel

Vamos tentar outra 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)

Llama 3.2 Visão: Aplicativos do mundo real

A capacidade do Llama 3.2 Vision de combinar a compreensão visual e textual o torna ideal para uma variedade de aplicativos do mundo real.

No setor de saúde, o Llama 3.2 Vision pode melhorar a precisão do diagnóstico analisando imagens médicas, como raios X e ressonâncias magnéticas, juntamente com registros de pacientes. Essa combinação de dados visuais e textuais ajuda os médicos a tomar decisões mais informadas e acelera a pesquisa clínica, beneficiando, em última análise, o atendimento ao paciente.

O Llama 3.2 Vision também pode aprimorar a experiência de compra do cliente combinando imagens de produtos, análises de texto e consultas de clientes. Isso permite recomendações mais personalizadas e uma jornada de compras sob medida, melhorando o envolvimento e a satisfação.

No setor jurídico, o Llama 3.2 Vision ajuda os profissionais a recuperar e resumir rapidamente informações de contratos, jurisprudência e documentos digitalizados. Ele pode até mesmo interpretar visuais complexos, como diagramas de tribunais ou anotações de documentos, fornecendo insights valiosos para análise jurídica e tomada de decisões.

Por fim, o Llama 3.2 Vision pode ajudar os ambientes de aprendizagem interpretando recursos visuais, como diagramas e gráficos, e vinculando-os a explicações textuais claras e em tempo real. Isso torna o conteúdo educacional mais interativo, ajudando estudantes e profissionais a aprender com mais eficiência.

Conclusões

Com os modelos de visão ColPali e Llama 3.2, você pode criar um sistema RAG avançado capaz de compreender e raciocinar sobre PDFs que contêm dados visuais e textuais complexos. Essa combinação abre possibilidades para aplicativos que vão desde a análise de documentos até a geração automatizada de relatórios, o que a torna muito útil para fluxos de trabalho de IA multimodal.


Ryan Ong's photo
Author
Ryan Ong
LinkedIn
Twitter

Ryan é um cientista de dados líder, especializado na criação de aplicativos de IA usando LLMs. Ele é candidato a PhD em Processamento de Linguagem Natural e Gráficos de Conhecimento no Imperial College London, onde também concluiu seu mestrado em Ciência da Computação. Fora da ciência de dados, ele escreve um boletim informativo semanal da Substack, The Limitless Playbook, no qual compartilha uma ideia prática dos principais pensadores do mundo e, ocasionalmente, escreve sobre os principais conceitos de IA.

Temas

Aprenda IA com estes 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 DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

tutorial

RAG With Llama 3.1 8B, Ollama e Langchain: Tutorial

Aprenda a criar um aplicativo RAG com o Llama 3.1 8B usando Ollama e Langchain, configurando o ambiente, processando documentos, criando embeddings e integrando um retriever.
Ryan Ong's photo

Ryan Ong

12 min

tutorial

Ajuste fino do Llama 3.1 para classificação de textos

Comece a usar os novos modelos Llama e personalize o Llama-3.1-8B-It para prever vários distúrbios de saúde mental a partir do texto.
Abid Ali Awan's photo

Abid Ali Awan

13 min

tutorial

Llama.cpp Tutorial: Um guia completo para inferência e implementação eficientes de LLM

Este guia abrangente sobre o Llama.cpp guiará você pelos fundamentos da configuração do seu ambiente de desenvolvimento, compreendendo suas principais funcionalidades e aproveitando seus recursos para solucionar casos de uso no mundo real.
Zoumana Keita 's photo

Zoumana Keita

11 min

tutorial

Como criar aplicativos LLM com o tutorial LangChain

Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Moez Ali's photo

Moez Ali

12 min

tutorial

Guia de Introdução ao Ajuste Fino de LLMs

O ajuste fino dos grandes modelos de linguagem (LLMs, Large Language Models) revolucionou o processamento de linguagem natural (PLN), oferecendo recursos sem precedentes em tarefas como tradução de idiomas, análise de sentimentos e geração de textos. Essa abordagem transformadora aproveita modelos pré-treinados como o GPT-2, aprimorando seu desempenho em domínios específicos pelo processo de ajuste fino.
Josep Ferrer's photo

Josep Ferrer

12 min

tutorial

Guia para iniciantes do LlaMA-Factory WebUI: Ajuste fino dos LLMs

Saiba como fazer o ajuste fino dos LLMs em conjuntos de dados personalizados, avaliar o desempenho e exportar e servir modelos com facilidade usando a estrutura com pouco ou nenhum código do LLaMA-Factory.
Abid Ali Awan's photo

Abid Ali Awan

12 min

Ver maisVer mais