Ir para o conteúdo principal
Background Image

Meu primeiro fine-tune de SLM, no app que desenvolvi

·3 minutos·
Rafael Issao
Autor
Rafael Issao
Apaixonado por tecnologia, programação e inovação. Adoro compartilhar conhecimento e aprender coisas novas todos os dias.
Tabela de conteúdos

Sempre quis treinar um modelo de IA para alguma finalidade e não somente utilizá-lo no dia a dia.

Mas treinar um modelo exige um poder computacional grande e uma grande massa de dados.

Quero dizer, exigia.

Hoje quero compartilhar como treinei um modelo de IA com pouca massa de dados para treinamento e com poder computacional moderado, de forma gratuita.

O desafio para o modelo
#

O meu problema é o seguinte: transformar o texto de uma receita sem estrutura em um json estruturado para:

  • Proporcionalidade

    • Ajustar a quantidade da receita por número de pessoas ou pela quantidade de um ingrediente específico
  • Compras

    • Tendo a receita estruturada, consigo montar o carrinho de compras baseado na funcionalidade acima

E também deveria “entender” receitas em português, inglês e japonês. Por exemplo, em português:

PT-BR — Vitamina de banana
#

Input:

Vitamina de banana

Ingredientes
1 banana
200ml de leite
2 colheres (sopa) de açúcar
gelo a gosto

Modo de preparo
1. Bata tudo no liquidificador.

Resultado esperado (JSON):

{
  "title": "Vitamina de banana",
  "description": "Vitamina cremosa de banana com leite.",
  "servings": 1,
  "ingredients": [
    { "name": "banana", "quantity": 1, "unit": "unidade" },
    { "name": "leite", "quantity": 200, "unit": "ml" },
    { "name": "açúcar", "quantity": 2, "unit": "colher de sopa" },
    { "name": "gelo", "quantity": 0, "unit": "a gosto" }
  ],
  "instructions": [{ "step": 1, "description": "Bata tudo no liquidificador." }]
}

Então precisava encontrar um modelo multilíngue, pequeno e eficiente o suficiente para funcionar em um celular e que fosse bom em fazer parsing.

O modelo que encontrei para treinar
#

Primeira tarefa era descobrir se tinha como especializar um modelo já treinado para uma tarefa específica.

Fazendo uma pesquisa encontrei o LFM2-1.2B-Extract.

Este modelo é especializado em extrair dados de um texto e transformar em algo estruturado como JSON, YAML ou XML.

E ele era um modelo razoavelmente pequeno e funcional para um smartphone.

Testando de forma pura com o Ollama, a extração de receita não funcionava bem:

  • Quantidades eram inventadas ou perdidas, por exemplo “1/2”
  • Unidade das quantidades eram inventadas ou perdidas, por exemplo, “a gosto”
  • Inventava ingredientes ou passos para fazer a receita

Então resolvi treinar e testar ela pois já entendia o formato json, faltava se especializar em fazer parse de textos de receita.

Como treinei de forma gratuita
#

Um dos problemas para treinar um modelo é a necessidade de um poder computacional.

Mas pesquisando um pouco descobri uma técnica chamada LoRA (Low-Rank Adaptation), criada por Edward Hu.

Basicamente, em vez de treinar todos os parâmetros do modelo do zero (caro), o LoRA treina só uma fração e gruda no modelo original — mantendo a qualidade do fine-tune completo a uma fração do custo computacional.

A parte mais trabalhosa, os dados para o treinamento
#

Tunando pra não ajudar demais
#

O que eu aprendi
#