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
Limpeza dos dados
- Remoção de registros inválidos ou incompletos
- Tratamento de valores inconsistentes
Normalização
- Padronização dos textos
- Normalização de unidades e formatos
- Conversão dos dados para um padrão consistente
Deduplicação
- Identificação e remoção de registros duplicados
- Redução de redundância no dataset
Construção de atributos
- Composição do
titlea 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
- Composição do
Data Augmentation
- Geração de variações dos exemplos
- Aumento da diversidade dos dados de treinamento
- Melhoria da capacidade de generalização do modelo
Transformação para o formato de treinamento
- Conversão dos dados para o formato esperado pelo modelo
- Estruturação dos exemplos em
promptecompletion - Preparação dos dados para fine-tuning supervisionado
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
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
Carregamento do modelo base
- Llama 3.1 8B
- Quantização em 4-bit
Configuração do QLoRA
- Aplicação dos adaptadores LoRA
- LoRA rank: 32
- LoRA alpha: 32
- LoRA dropout: 0.05
LoRA foram aplicados
- q_proj
- k_proj
- v_proj
- o_proj
- gate_proj
- up_proj
- down_proj
Configuração do treinamento
- Otimizador AdamW 8-bit
- Linear Scheduler
- 1.134 steps
Treinamento
- Fine-tuning supervisionado utilizando Unsloth
- Aproximadamente 83,9M de parâmetros treináveis
- Apenas ~1,03% dos parâmetros totais são atualizados
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.
- E-mail: willianrsouzawork@gmail.com
- LinkedIn: in/willianrsouza/
- DagsHub: dagshub.com/willianrsouza
- Downloads last month
- 4
