YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

LlamaXtract: Llama Attribute Extractor (QLoRA V.1.0.0)

Durante minha atuação no time de Engenharia e Pesquisa no Pelando, o maior social e-commerce do Brasil e parte do Global Savings Group, investiguei o problema de identificação e agrupamento de ofertas de produtos. Com mais de 1 milhão de usuários cadastrados, a plataforma reunia ofertas provenientes de diferentes fontes, criando um cenário de grande escala e heterogeneidade de dados. O objetivo era permitir que o usuário navegasse pelas ofertas a partir das características específicas que buscava em um produto. A investigação envolveu a construção de pipelines hierárquicos de coleta a partir do Google Shopping, seguidas por etapas de limpeza, normalização e deduplicação, além da avaliação de diferentes estratégias de representação semântica, incluindo modelos baseados em BERT, Sentence-Transformers e text embeddings.

Revisitar esse problema foi uma oportunidade de retornar a uma investigação que marcou uma etapa importante da minha trajetória profissional, agora com a maturidade e um conhecimento mais aprofundado em Machine Learning adquiridos ao longo dos anos. Existe, nesse retorno, uma combinação de nostalgia, orgulho pelo trabalho desenvolvido naquela época e curiosidade técnica: olhar novamente para um problema que foi importante na minha formação, mas agora sob uma perspectiva diferente e com novas ferramentas e experiências. É a partir desse contexto que este projeto retoma o problema, investigando o uso de Large Language Models (LLMs) para extrair e estruturar os atributos presentes nas descrições dos produtos.

Objetivo

O objetivo deste modelo é realizar attribute extraction, transformando descrições textuais de produtos em estruturas JSON contendo os atributos identificados, como marca, modelo, memória RAM, armazenamento, processador, entre outros.

Nesta primeira etapa, o modelo foi treinado com um dataset especializado em smartphones, permitindo avaliar a capacidade de extrair e estruturar informações a partir de títulos e descrições não estruturadas. Como próximo passo, a proposta é evoluir o projeto para uma pipeline de Self-Learning, capaz de incorporar novos dados continuamente, ampliar a cobertura para diferentes categorias de produtos e aprimorar o modelo de forma iterativa.

Entrada

Samsung Galaxy S23 Blue 8GB RAM 256GB Tela 6.1' Snapdragon 8 Gen 2 Android 13

Saida

{
  "brand": "Samsung",
  "model": "Galaxy S23",
  "ram_memory": "8GB",
  "storage": "256GB",
  "screen_size": "6.1",
  "processor": "Snapdragon 8 Gen 2",
  "operating_system": "Android 13",
  "color": "Blue"
}

A extração estruturada funciona como uma etapa intermediária para transformar texto não estruturado em informações que podem ser utilizadas posteriormente para realizar a clusterização dos produtos.

Modelo & Params

Propriedade Valor
Modelo base unsloth/meta-llama-3.1-8b-unsloth-bnb-4bit
Arquitetura Llama 3.1 8B
Método de fine-tuning QLoRA
Quantização 4-bit
PEFT LoRA
Comprimento máximo 2048 tokens
Exemplos de treinamento 6.351
Épocas 3
Steps 1.134
Parâmetros totais ~8,11B
Parâmetros treináveis ~83,9M
Percentual treinável ~1,03%
Otimizador AdamW 8-bit
Scheduler Linear
Framework principal Unsloth

Coleta de Dados

O dataset foi construído a partir de dados coletados por meio de web scraping de múltiplas fontes disponíveis no Google, com foco principalmente em resultados do Google Shopping. O objetivo da coleta foi reunir informações de diferentes smartphones comercializados online, permitindo trabalhar com uma base heterogênea e representativa de diferentes marcas, modelos e configurações.

Durante a coleta, foram extraídas informações como:

  • Marca
  • Modelo
  • Memória RAM
  • Armazenamento
  • Processador
  • Tela
  • Taxa de atualização
  • Câmera
  • Sistema operacional
  • Entre outros atributos disponíveis nas fontes

Pipeline de Preparação dos Dados

  1. Limpeza dos dados

    • Remoção de registros inválidos ou incompletos
    • Tratamento de valores inconsistentes
  2. Normalização

    • Padronização dos textos
    • Normalização de unidades e formatos
    • Conversão dos dados para um padrão consistente
  3. Deduplicação

    • Identificação e remoção de registros duplicados
    • Redução de redundância no dataset
  4. Construção de atributos

    • Composição do title a partir dos atributos dos produtos
    • Integração de informações como marca, modelo, RAM, armazenamento, processador, entre outros
    • Estruturação dos atributos utilizados como entrada do modelo
  5. Data Augmentation

    • Geração de variações dos exemplos
    • Aumento da diversidade dos dados de treinamento
    • Melhoria da capacidade de generalização do modelo
  6. Transformação para o formato de treinamento

    • Conversão dos dados para o formato esperado pelo modelo
    • Estruturação dos exemplos em prompt e completion
    • Preparação dos dados para fine-tuning supervisionado
  7. Validação do dataset

    • Verificação da estrutura dos exemplos
    • Validação dos campos obrigatórios
    • Análise de consistência dos dados
    • Verificação da quantidade de exemplos e valores únicos
  8. Tokenização

    • Tokenização dos exemplos de treinamento
    • Definição do max_seq_length
    • Preparação dos dados para processamento em batches

A pipeline de preparação dos dados está sendo desenvolvida utilizando ZenML, permitindo posteriormente automatizar e versionar as etapas de ingestão, transformação e treinamento.

Fine-tuning

  1. Carregamento do modelo base

    • Llama 3.1 8B
    • Quantização em 4-bit
  2. Configuração do QLoRA

    • Aplicação dos adaptadores LoRA
    • LoRA rank: 32
    • LoRA alpha: 32
    • LoRA dropout: 0.05
  3. LoRA foram aplicados

    • q_proj
    • k_proj
    • v_proj
    • o_proj
    • gate_proj
    • up_proj
    • down_proj
  4. Configuração do treinamento

    • Otimizador AdamW 8-bit
    • Linear Scheduler
    • 1.134 steps
  5. Treinamento

    • Fine-tuning supervisionado utilizando Unsloth
    • Aproximadamente 83,9M de parâmetros treináveis
    • Apenas ~1,03% dos parâmetros totais são atualizados
  6. Avaliação

    • Análise do comportamento do modelo após o fine-tuning
    • Validação da capacidade de geração dos atributos estruturados

Métricas de Treinamento

Métrica Valor final Mínimo Máximo
Train Epoch 3.000 0.00265 3.000
Train Loss 0.17099 0.16624 2.10342
Gradient Norm 0.43656 0.13536 2.15869
Learning Rate 2.67e-7 0 3.00e-4
Total FLOPs 6.303 × 10¹⁶ — —
Training Runtime 10.041,86 s — —
Samples / segundo 1,802 — —
Steps / segundo 0,113 — —

A train/loss apresentou uma redução significativa ao longo do treinamento. O maior valor registrado foi 2.10342, enquanto o menor valor observado foi 0.16624. Ao final do treinamento, o último valor registrado foi 0.17099. A redução da loss indica que o modelo conseguiu ajustar seus parâmetros aos padrões presentes no conjunto de treinamento. Entretanto, a training loss não deve ser utilizada isoladamente como indicador de qualidade do modelo, uma vez que uma loss baixa no conjunto de treinamento não garante necessariamente boa capacidade de generalização para produtos ou categorias que não foram observados durante o treinamento. Por esse motivo, uma etapa posterior de avaliação em dados de validação e teste é necessária.

Evolução do Epoch ao Longo dos Steps

Norma do Gradiente por Step

Evolução da Taxa de Aprendizado por Step

Evolução da Loss de Treinamento por Step

Visão de Longo Prazo

O objetivo final deste projeto não é apenas construir um modelo de extração de atributos, mas investigar a possibilidade de utilizar LLMs como uma camada semântica generalizável para identificação, resolução e clusterização de entidades. A partir da extração estruturada, o projeto poderá explorar diferentes formas de representação dos produtos, buscando identificar quando descrições distintas correspondem à mesma entidade.

A pesquisa deverá ser progressivamente expandida para diferentes categorias e domínios, permitindo avaliar até que ponto uma mesma abordagem é capaz de generalizar para diferentes tipos de entidades e estruturas de dados. A longo prazo, o projeto busca aproximar técnicas modernas de Large Language Models de problemas tradicionalmente abordados por técnicas de Entity Resolution, Information Extraction e Clustering, investigando como essas abordagens podem atuar de forma complementar.

Autor & Contatos

Bom, se você chegou até aqui, espero que este projeto tenha contribuído de alguma forma seja compartilhando conhecimento, despertando uma ideia ou, principalmente, motivando você a construir algo por paixão. No fim, acho que é isso que torna qualquer projeto realmente especial: a curiosidade de explorar, aprender e criar algo simplesmente porque você acredita que vale a pena. Também gostaria de agradecer a Erykah Badu, por me acompanhar em minhas noites de muita leitura e código.

Downloads last month
4
Safetensors
Model size
8B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support