Como classificar e etiquetar um catálogo de conteúdo antigo com o Laya

Fluxo de taxonomia para classificar conteúdo com Laya em catálogo antigo
Resposta rápida

Pra classificar conteúdo com Laya, você define a taxonomia antes de rodar: categorias, intenções e escala de profundidade, cada opção com critério próprio, até cerca de 20 opções por pergunta e sempre com um rótulo ‘other’. Em catálogo em português, use o checkpoint multilíngue. Depois instala com pip install laya (Python 3.10+) e manda cada texto limpo como state com três perguntas tipadas (choice, choice e score), respondidas numa única passada. Grave o rótulo junto com a probabilidade calibrada e mande os itens em ‘other’ ou com enough_info=False pra revisão humana

Fala aí, beleza? Se o seu blog ou base de ajuda tem centenas de textos publicados, eu aposto que as categorias viraram uma bagunça 😅

Tutorial jogado na mesma categoria de notícia, artigo de ajuda sem tag nenhuma, e ninguém sabe dizer qual texto é introdutório e qual é avançado

Etiquetar isso na mão é trabalho de semanas… e é aí que entra o Laya

O Laya é um modelo de decisão open source e não autoregressivo, ou seja: ele NÃO gera texto

Ele responde perguntas tipadas sobre um texto em uma única passada (forward pass) e devolve probabilidades calibradas

Por isso ele serve pra etiquetar em massa, e não pra reescrever nada

Quem criou e mantém é a Convai Innovations, com o Nandakishor Mukkunnoth como construtor, os pesos saíram em Apache 2.0 e o lançamento foi em setembro de 2026

Bora ver na prática como classificar conteúdo com Laya sem cair nas armadilhas mais comuns? 🙂

O que você precisa antes de começar:

  • Python 3.10 ou mais novo
  • O pacote laya instalado
  • O catálogo exportado do seu blog, base de ajuda ou CMS, com o texto de cada item
  • A taxonomia rascunhada (tem um passo só pra isso logo abaixo, se liga)

Sobre runtime: a implementação oficial usa PyTorch

A comunidade também mantém runtimes em ONNX (pra Node.js) e em MLX (pra Apple Silicon), mas aqui a gente segue pelo caminho oficial em Python

E onde fica cada coisa? O repositório oficial do projeto está no GitHub no endereço NandhaKishorM/laya (a grafia do endereço é essa mesmo, diferente de como o nome do construtor aparece escrito) e os pesos ficam em convaiinnovations/laya no Hugging Face

Passo a passo para classificar conteúdo antigo com o Laya

1. Instale o pacote laya:

A instalação é pelo pip mesmo, sem mistério:

pip install laya

E quando sair versão nova, pra atualizar:

pip install -U laya

O erro comum deste passo: tentar instalar num ambiente com Python abaixo de 3.10

O requisito é Python 3.10 ou mais novo, então confira a versão do ambiente antes de sair caçando erro estranho de dependência

2. Escolha o checkpoint certo:

O repositório no Hugging Face traz três checkpoints, e pra esse guia os que importam são os dois com idioma definido:

  • Inglês: baseado no ModernBERT-large, com 421M de parâmetros
  • Multilíngue: baseado no mmBERT-base, com 322M de parâmetros e cobertura de mais de 100 idiomas

Além desses dois, tem uma terceira variante chamada typed-decisions, que fica de fora deste passo a passo

Depois de instalar, você tem dois caminhos

Usar o Router, que escolhe o checkpoint certo por requisição, ou carregar um checkpoint específico localmente

Se o catálogo é todo num idioma só, fixar o checkpoint deixa o comportamento mais previsível

O erro comum deste passo: usar o checkpoint em inglês num catálogo em português

O checkpoint EN pode falhar em escritas não latinas e, pior, continuar confiante mesmo errando

Pra conteúdo em português, o indicado é o multilíngue 😉

3. Defina a taxonomia ANTES de rodar:

Esse é o passo que mais importa, e o porquê é simples: o Laya só escolhe entre as opções que você dá

Se a taxonomia é ruim, a classificação vai ser ruim, só que muiiito mais rápida haha

Você vai definir três eixos:

  • Categoria: os grandes assuntos do catálogo
  • Intenção: o que o texto entrega (tutorial, comparativo, notícia e por aí vai)
  • Profundidade: uma escala ordinal, do introdutório ao avançado

Cada opção precisa de um critério escrito, curto e sem ambiguidade

Não basta o nome "Tutorial": escreva algo como "texto que ensina a fazer uma tarefa em passos"

Agora a regra de ouro: a recomendação oficial é manter cada pergunta choice com menos de cerca de 20 opções

Que orçamento é esse? As opções dividem um orçamento fixo de 256 tokens na cabeça de decisão, e com muitos rótulos a precisão cai muito

E sempre inclua um rótulo other

O exemplo da documentação usa billing, technical, sales e other, com o other definido como "everything else", e cada opção com o seu critério

E se a sua taxonomia passa de 20 rótulos? Quebre em hierarquia de duas etapas, do geral para o específico

Primeiro uma pergunta escolhe a área (ex.: IA, desenvolvimento, carreira, other), depois uma segunda pergunta escolhe a subcategoria só dentro daquela área

O teste de estresse no Banking77 mostra bem o tamanho do problema:

Cenário Rótulos Laya Jev
Banking77 77 0,425 0,870

Ou seja, lista gigante numa pergunta só é pedir pra dar ruim

O erro comum deste passo: exportar a lista inteira de tags do CMS e jogar tudo numa pergunta só

4. Prepare o texto de cada item:

O texto de cada item vai pra requisição no campo state

Então vale extrair o conteúdo limpo do HTML publicado: título, corpo do texto e pronto

Por quê? Porque o modelo decide com base no que recebe, e lixo de layout só atrapalha a leitura do assunto real

O erro comum deste passo: mandar marcação, menu, rodapé e barra lateral junto com o conteúdo

Se todo post tem o mesmo menu com "Tutoriais" e "Notícias", adivinha o que vai confundir a intenção? 😛

5. Monte a requisição com as três perguntas:

A requisição recebe três campos:

  • model: o nome do checkpoint
  • state: o texto do item
  • questions: as perguntas, cada uma com type, instruction e criteria

O massa aqui é que um mesmo texto pode receber várias perguntas, e uma única passada do encoder responde todas de uma vez

Pra etiquetar o catálogo, dá pra montar assim:

Pergunta type instruction criteria
Categoria choice Qual é o assunto principal do texto? Um critério por categoria, incluindo other
Intenção choice O que o texto entrega ao leitor? Tutorial, comparativo, notícia, other, cada um com critério
Profundidade score Qual o nível de profundidade do texto? Critério de cada nível da escala

E os tipos, o que significa cada um?

  • choice: escolhe uma entre opções nomeadas
  • score: posiciona o texto numa escala ordinal, com um nível esperado
  • noul: devolve a probabilidade de a resposta ser sim

O noul é ótimo pra pergunta binária que todo catálogo antigo precisa responder, tipo "este texto está desatualizado?"

Dá pra somar ela às outras três no mesmo envio

O erro comum deste passo: critérios vagos ou sobrepostos entre opções

Se "Tutorial" e "Guia" têm praticamente o mesmo critério, o modelo vai ficar dividido entre os dois, e com razão

6. Rode em lote e grave o resultado com a probabilidade:

Com as perguntas prontas, é hora de processar o catálogo em lote

Na medição do projeto numa GPU T4, uma pergunta leva 33 ms, e em lote cai pra 7,2 ms por pergunta

Pra cada item, grave o identificador, o rótulo de cada pergunta e a probabilidade de cada decisão

O erro comum deste passo: gravar só o rótulo e jogar a probabilidade fora

Tome cuidado com isso! A probabilidade calibrada é justamente o que permite filtrar as decisões fracas depois

Sem ela, um palpite no limite e uma decisão segura ficam com a mesma cara no seu banco

Extraindo o texto limpo das páginas: textContent e innerHTML

No passo 4 a gente precisa separar o texto do HTML, e se você vai fazer isso com JavaScript direto nas páginas, entender essa diferença ajuda demais

Pra começar do zero com essa parte, este vídeo do canal mostra como funcionam o textContent e o innerHTML, ou seja, a diferença entre pegar o texto puro de um elemento e pegar o HTML dele:

O que fazer com os itens que não encaixam em nenhum rótulo?

Sempre vai sobrar item estranho, e tudo bem

O segredo é saber ler o sintoma e agir na causa certa

Item voltou como other com enough_info=False:

Sintoma: o item cai em other e vem com enough_info=False

Causa: o Laya se absteve por falta de informação, em vez de chutar uma categoria

No exemplo documentado, uma entrada vaga como "Hi, I have a question" voltou exatamente assim

Solução: mande esse item pra uma fila de revisão humana ou reenvie com um texto mais completo no state

Como prevenir: não mande só o título ou um trecho curto, mande o corpo do texto

Muitos itens caindo em other:

Sintoma: uma fatia grande do catálogo volta como other

Causa: quase sempre falta categoria na sua taxonomia

Solução: revise esse lote, identifique os assuntos que se repetem e crie rótulos novos pra eles

Como prevenir: rode um lote pequeno antes do catálogo todo e ajuste a taxonomia, sempre respeitando o limite de cerca de 20 opções

Precisão ruim com lista longa de rótulos:

Sintoma: as decisões ficam inconsistentes quando a pergunta tem muitas opções

Causa: o orçamento fixo de 256 tokens da cabeça de decisão está dividido entre rótulos demais

Solução: quebre em hierarquia de duas etapas, do geral para o específico

Como prevenir: desenhe a taxonomia em níveis desde o começo

Rótulo errado com confiança alta em texto em português:

Sintoma: o modelo erra feio e mesmo assim devolve probabilidade alta

Causa: o checkpoint em inglês está rodando sobre conteúdo em português

Solução: troque pro checkpoint multilíngue e rode de novo

Como prevenir: fixe o checkpoint multilíngue quando o catálogo for em português

Por que revisar por amostragem?

Mesmo com tudo certo, vale conferir uma amostra dos resultados

A métrica do projeto por tipo de pergunta ajuda a entender onde olhar com mais atenção:

Tipo Métrica do projeto
noul 0,857
choice 0,733
score 0,723

O score é o que tem o número mais baixo, então a profundidade merece a revisão mais cuidadosa

Onde essa classificação faz diferença: blog, base de ajuda e CMS

Blog:

Categoria, intenção e profundidade juntos permitem reorganizar o arquivo inteiro

Dá pra montar trilhas de leitura do introdutório ao avançado e separar tutorial de notícia sem abrir post por post

Base de ajuda:

Aqui o próprio exemplo oficial encaixa certinho: categorias no estilo billing, technical, sales e other

E a abstenção vira aliada, porque os artigos vagos aparecem sozinhos na fila de revisão, em vez de irem pra categoria errada

CMS com milhares de itens:

Com volume grande, a hierarquia do geral para o específico é praticamente obrigatória

A primeira etapa separa as grandes áreas, a segunda refina, e tudo roda em lote

Próximo passo: rode um lote pequeno antes do catálogo inteiro

Recapitulando o fluxo: taxonomia com critérios bem escritos, checkpoint multilíngue, três perguntas numa passada só e fila de revisão pros itens em other

O próximo passo concreto é testar a taxonomia num lote pequeno do catálogo

Revise os itens que caíram em other, ajuste os rótulos e só então processe tudo

O código e a documentação estão no repositório NandhaKishorM/laya, e os checkpoints ficam em convaiinnovations/laya no Hugging Face

Faça o teste com uns poucos posts primeiro, é bem massa ver o catálogo se organizando sozinho 😀

Até o próximo post!

Perguntas frequentes

O Laya classifica conteúdo em português usando o mesmo checkpoint do inglês?

Não, e essa é pegadinha clássica. O checkpoint em inglês (ModernBERT-large) pode falhar em escritas não latinas e continuar confiante mesmo errando. Pra catálogo em português o certo é o checkpoint multilíngue, baseado no mmBERT-base, que cobre mais de 100 idiomas.

Quantas opções cabem numa pergunta choice antes da precisão cair?

A recomendação oficial é ficar abaixo de cerca de 20 opções por pergunta. Isso porque as opções dividem um orçamento fixo de 256 tokens na cabeça de decisão, e passar disso derruba a precisão. No teste de estresse do Banking77, com 77 rótulos, o Laya fez 0,425 contra 0,870 do Jev, então acima de 20 o caminho é hierarquia em duas etapas.

Quanto tempo o Laya leva pra classificar cada item de um catálogo grande?

Em GPU T4 a medição foi de 33 ms pra uma pergunta isolada. Rodando em lote esse tempo cai pra 7,2 ms por pergunta, o que faz diferença real quando o catálogo tem centenas ou milhares de itens.

O que o Laya faz quando o texto não tem informação suficiente pra classificar?

Ele se abstém em vez de chutar. Diante de uma entrada vaga o modelo devolveu other e enough_info=False, sinalizando que faltou contexto pra decidir com segurança.

Dá pra rodar o Laya fora do Python, em Node.js por exemplo?

A implementação oficial é em PyTorch, mas a comunidade mantém runtimes alternativos: um em ONNX pra quem usa Node.js e outro em MLX pra Apple Silicon. Pra seguir o caminho oficial e mais documentado, o guia deste post usa o pacote Python mesmo.

Quem mantém o Laya e onde ficam o código e os pesos do modelo?

O projeto é da Convai Innovations, com Nandakishor Mukkunnoth como construtor. O repositório oficial fica no GitHub no endereço NandhaKishorM/laya (a grafia do endereço é essa mesmo, diferente de como o nome aparece escrito) e os pesos estão publicados em convaiinnovations/laya no Hugging Face, sob licença Apache 2.0.




Escrito por | Matheus Battisti

Matheus Battisti
Fundador da Hora de Codar

Programador apaixonado pelo mundo das tecnologias, sempre buscando em aprender e se aprofundar em linguagens, frameworks e o que mais for necessário para executar um bom trabalho. Agora tem uma nova missão que é de passar seu conhecimento adiante para formar novos programadores e especializar mais os que já são.

Subscribe
Notify of
guest

0 Comentários
Oldest
Newest Most Voted

Formações

Formação Vibe Coding

Formação Vibe Coding

Do Prompt ao Produto: Crie Software Real com IA

  • 474 aulas
  • 20 projetos
  • 39h 30min

Blog | Mais populares