Tutorial de Implantação para Leitura de Literatura Científica com Qwen2.5-7B e Análise de PDF

Este tutorial demonstra como configurar o modelo Qwen2.5-7B-Instruct localmente para extrair e analisar conteúdo de documentos PDF em contextos de pesquisa científica, criando um sistema automatizado de perguntas e respostas.

  1. Justificativa para o Modelo Qwen2.5-7B-Instruct

O Qwen2.5-7B-Instruct é um modelo de linguagem com 7 bilhões de parâmetros, otimizado para instruções. Suas craacterísticas incluem:

  • Suporte avançado a chinês e inglês: essencial para literatura científica multilíngue.
  • Contexto estendido de 128K tokens: permite processar documentos longos integralmente.
  • Habilidade em código e raciocínio: interpreta fórmulas, pseudocódigo e tabelas com precisão.
  • Baixo custo de implantação: após quantização, ocupa espaço reduzido (≈4GB) e opera em GPUs comuns.
  1. Configuração do Ambiente e Ferramentas

2.1 Requisitos Mínimos

  • Sistema operacional: Linux (Ubuntu 20.04+) ou Windows com WSL2.
  • Memória RAM: ≥16GB.
  • GPU: NVIDIA com ≥8GB de VRAM (ex.: RTX 3060).
  • Python: versão 3.8 a 3.11.

2.2 Componentes Principais

Utilizaremos dois frameworks-chave:

  1. Ollama: gerencia modelos locais, incluindo Qwen2.5-7B, e oferece uma API simples para chamadas.

  2. LangChain: orquestra fluxos de trabalho com LLMs, integrando extração de PDF, divisão de texto e geração de respostas.

  3. Passo a Passo de Implantação


3.1 Instalação do Ollama e Download do Modelo

No terminal Linux/macOS:

curl -fsSL https://ollama.com/install.sh | sh

Em seguida, obtenha a versão quantizada do modelo:

ollama pull qwen2.5:7b-instruct

Verifique com um teste rápido:

ollama run qwen2.5:7b-instruct

3.2 Criação do Ambiente Python

mkdir ai_research_reader && cd ai_research_reader
python -m venv env
source env/bin/activate  # Linux/macOS
pip install --upgrade pip

3.3 Instalação das Dependências

pip install langchain langchain-community pypdf ollama chromadb

3.4 Script de Análise de PDF

Crie o arquivo research_doc_qa.py:

import os
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.llms import Ollama
from langchain.chains import RetrievalQA
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OllamaEmbeddings

class ResearchDocAnalyzer:
    def __init__(self, model_id="qwen2.5:7b-instruct"):
        self.llm_engine = Ollama(model=model_id, temperature=0.1)
        self.embedding_fn = OllamaEmbeddings(model=model_id)
        self.splitter = RecursiveCharacterTextSplitter(
            chunk_size=1000,
            chunk_overlap=200
        )
        self.vector_db = None

    def ingest_pdf(self, file_path):
        if not os.path.exists(file_path):
            print("Arquivo não encontrado.")
            return False
        
        loader = PyPDFLoader(file_path)
        raw_docs = loader.load()
        text_segments = self.splitter.split_documents(raw_docs)
        
        self.vector_db = Chroma.from_documents(
            documents=text_segments,
            embedding=self.embedding_fn,
            persist_directory="./db_vectors"
        )
        return True

    def query_document(self, question):
        if self.vector_db is None:
            return "Carregue um PDF primeiro."
        
        retriever = self.vector_db.as_retriever(search_kwargs={"k": 3})
        qa_chain = RetrievalQA.from_chain_type(
            llm=self.llm_engine,
            chain_type="stuff",
            retriever=retriever
        )
        return qa_chain.run(question)

    def interactive_session(self):
        print("Sistema pronto. Digite 'sair' para encerrar.")
        while True:
            input_q = input("\nPergunta: ").strip()
            if input_q.lower() in ['sair', 'exit']:
                break
            response = self.query_document(input_q)
            print(f"\nResposta: {response}")

if __name__ == "__main__":
    analyzer = ResearchDocAnalyzer()
    if analyzer.ingest_pdf("documento_cientifico.pdf"):
        analyzer.interactive_session()

  1. Exemplos de Consultas e Boas Práticas

Para resultados ótimos:

  • Perguntas específicas: em vez de "resuma o artigo", pergunte "quais foram as contribuições principais do estudo em relação à detecção de anomalias?"
  • Foco em seções: "na metodologia, qual critério de avaliação foi adotado?"
  • Análise comparativa: "compare os dois métodos propostos na seção 4 e indique limitações."
  1. Solução de Problemas e Otimizações

5.1 Problemas Comuns

  • Erro de conexão com Ollama: certifique-se de que o serviço está em execução (comando ollama serve).
  • Processamento lento: reduza chunk_size para 500 ou use uma GPU mais potente.
  • Respostas vagas: aumente o valor de k para 5 no retriever ou verifique a qualidade do PDF (PDFs digitalizados requerem OCR).

5.2 Melhorias Avançadas

  • Parser alternativo: substitua PyPDFLoader por pdfplumber para melhor extração de tabelas.
  • Suporte a OCR: integre pytesseract para processar imagens em PDFs escaneados.
  • Interface web: use Gradio para criar uma UI de upload e cnosulta interativa.

Tags: qwen2.5-7b Ollama LangChain Python pdf-parsing

Publicado em 8-7 14:30