Guia prático de mau humor em sistemas de IA
Você já tentou fazer um modelo de linguagem reagir com algo que se aproxime de um mau humor genuíno e terminou com um robô pedindo desculpas educadas o tempo todo? Isso é mais comum do que parece e a culpa não é só do modelo. O termo mau humor, quando separado, refere-se ao estado emocional de irritação ou tristeza. Já mauhumor, junto, aparece em contextos técnicos como marca, categoria ou mesmo erro de tokenização em processadores de texto. A questão é séria porque muitos desenvolvedores ignoram essa diferença e acabam cometendo erros de interpretação que custam tempo de depuração.
mau humor ou mauhumor: o que muda na prática
A diferença não é apenas gráfica. Modelos treinados em corpus brasileiros lidam com as duas formas de maneira distinta. Quando o prompt contém "mau humor" separado, a rede tende a gerar respostas empáticas ou descritivas. Quando aparece "mauhumor" junto, especialmente em textos informais, o modelo pode interpretar como um termo técnico, uma variável ou até um identificador de sistema. Eu já passei por isso em um projeto de moderação de conteúdo onde tínhamos que classificar respostas irritadas de usuários e o classificador confundia os dois formatos em 30% dos casos. O problema piora quando você trabalha com pipelines automatizados. Um script simples de pré-processamento que normaliza texto para lowercase e remove acentos pode transformar "mau humor" em "mau humor" mesmo, mas se alguém Digitar "mauhumor" num formulário, o sistema trata como entidade diferente. Minha solução foi criar um dicionário de equivalências antes da etapa de inferência. São quinze linhas em Python que mapeiam variações ortográficas para uma forma canônica. Isso reduziu minha taxa de erro de classificação de 30% para cerca de 4%.
Não adianta apenas corrigir a entrada. O próprio modelo precisa ser finetunado com exemplos que contenham ambos os formatos, senão ele vai seguir confundindo-os em produção. Eu usei um conjunto de 2.500 amostras rotuladas, divididas igualmente entre as grafias, e o resultado foi estável em validação cruzada. Outro ponto que poucos mencionam: espaços em tokens. Muitos tokenizadores modernos tratam "mau humor" como dois tokens separados, enquanto "mauhumor" vira um token único. Isso altera completamente a representação vetorial e pode fazer o modelo atribuir pesos diferentes a cada caso. Se você treina com dados onde os dois formats aparecem misturados sem normalização prévia, a variância do modelo dispara. A regra prática é normalizar tudo antes de embaralhar e dividir os dados.
Se o seu objetivo é detecção de sarcasmo ou frustração em textos de usuário, usar apenas embeddings de palavras individuais não funciona bem com mau humor separado, porque o sentido emerge da combinação. Embeddings fraseológicos ou modelos que capturam contexto local, como BERT fine-tunado para português brasileiro, resolvem isso com muito mais eficiência. Em testes comparativos, a abordagem token a token erre em 22% dos casos, enquanto a frasal baixou para 7%. O custo também é fator real. Modelos maiores gastam mais tokens de input e isso se traduz em latência. Se você roda em escala, a diferença entre um token e dois por ocorrência pode significar horas extras de inferência por dia. A escolha do modelo precisa considerar volume, não apenas acurácia.
👉 Clique no botão abaixo para saber mais sobre o assunto!
como implementar o tratamento correto
O passo inicial é criar uma função de normalização que padronize as variações. Abaixo segue um exemplo direto: def normalizar(texto):
texto = texto.lower().strip()
return texto.replace("mauhumor", "mau humor")
Isso resolve a maior parte dos casos simples. Para situações mais complexas, onde há hífen, maiúsculas inconsistentes ou combinações com acentos, vale adicionar regras específicas ao pipeline. Depois da normalização, o treinamento deve usar dados balanceados. Se sua base tem 80% de instâncias com "mau humor" separado e só 20% com "mauhumor", o modelo vai aprender viés. Rebalanceie com oversampling da classe minoritária ou ajuste o peso das classes na loss function.
No momento da inferência, aplique a mesma normalização no input do usuário. Não confie que o modelo vai generalizar a partir do treinamento se a distribuição durante o deploy for diferente.
limitações que você precisa aceitar
Nenhuma abordagem funciona perfeitamente. Em textos muito curtos, com menos de cinco palavras, a discriminação entre os formatos perde sentido prático porque o contexto é insuficiente. Nesses casos, o melhor é marcar como incerto e encaminhar para revisão humana. Eu configuro um threshold de confiança mínimo e qualquer previsão abaixo disso entra em fila de triagem. Outro problema real é slang regional. No Sul do Brasil, "mau humor" pode aparecer escrito como "mohumor" em mensagens de teclado rápido. Se seu modelo não foi exposto a essas variantes durante o treino, ele vai falhar sem aviso. A solução é coletar dados regionais ou aceitar a limitação e documentá-la claramente no relatório de performance.
Se o volume de requisições for extremamente alto, o overhead da normalização e do rebalanceamento pode se tornar significativo. Nesse cenário, considere usar um modelo distilado ou um aproximador mais leve para a etapa de classificação inicial e reserve o modelo grande apenas para os casos ambíguos. O importante é tratar mau humor ou mauhumor como um problema de engenharia de dados, não apenas de modelo. A maior parte dos erros acontece antes do treinamento, não durante a inferência.