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

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? 🙂
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 45min
O que você precisa antes de começar:
- Python 3.10 ou mais novo
- O pacote
layainstalado - 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 checkpointstate: o texto do itemquestions: as perguntas, cada uma comtype,instructionecriteria
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.
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 27min
Blog | Mais populares

Choice, score e noul: quais são os tipos de pergunta do Laya e quando usar cada um?
Entenda os tipos de pergunta do Laya: choice, score e noul. Como cada um funciona, a acurácia de cada primitiva e quando usar em cada situação.

Como usar o laya para detectar phishing, spam e risco de churn em texto, email e ticket?
Veja como o laya detecta phishing, spam e risco de churn em texto, email e ticket com scores calibrados, rodando local via pip install.

Como fazer triagem de tickets de suporte com o laya: urgência, frustração e departamento
Triagem de tickets com laya: urgência, frustração e departamento em um forward pass, sem JSON. Veja instalação, código e a ressalva do zero-shot.
