Machine Learning · Insper · E3.4
Comparando os Modelos
Abordagem avançada
As armadilhas que pegam a maioria dos projetos de modelagem de tópicos
O caminho desta parte
- Stop wordspalavras-lixo e tópicos-lixo
- Outliersreatribuí-los é uma troca
- Granularidadeum degrau, não um botão giratório
- Reprodutibilidadeum milionésimo de ruído, 3 tópicos
- Línguaum modelo para a língua do corpus
Cada etapa responde a uma pergunta: que palavras não dão nome a nada? → o que fazer com documentos que não pertencem a lugar nenhum? → como o número de tópicos se mexe? → os tópicos voltam amanhã? → o modelo fala a língua do corpus?
Etapa 1 · que palavras não dão nome a nada?
Armadilha: stop words na representação
- Sem lista, o BERTopic nomeia tópicos por the, of, to; mesmo com a lista do inglês, a LDA (alocação latente de Dirichlet) manteve don, think, like, just.
- Uma lista na língua errada não ajuda: o tópico 6 aqui é van, het, een, de um punhado de posts em holandês.
- Tópicos-lixo clássicos: assinaturas, rodapés de e-mail, modelos de listas de discussão: texto repetido palavra por palavra forma grupos muito densos.
As palavras que nomeiam um tópico dependem do vetorizador: corrija a lista e depois chame update_topics.
Etapa 2 · o que fazer com documentos que não pertencem a lugar nenhum?
Armadilha: outliers demais
431 posts (20%) no tópico −1. O reduce_outliers dá a cada um o tópico mais próximo, pelo c-TF-IDF (TF-IDF por grupo) ou pelo embedding.
Preveja. Medida em todos os posts, a homogeneidade fica em 0,927?
| estratégia | outliers | homogeneidade, todos os posts |
| c-tf-idf | 0 | 0,822 |
| embeddings | 0 | 0,882 |
Os outliers eram os posts ambíguos: forçá-los para dentro deixa os tópicos menos puros. Uma troca, não uma correção grátis; o threshold mantém de fora os menos parecidos.
Etapa 3 · como o número de tópicos se mexe?
Armadilha: a granularidade é um degrau, não um botão giratório
Preveja. min_cluster_size de 10 para 15: alguns tópicos a menos ou muitos?
| min_cluster_size | tópicos | outliers |
| 5 | 96 | 28% |
| 10 | 24 | 20% |
| 15 | 5 | 0% |
| 25 | 3 | 0% |
A regra de "excesso de massa" do HDBSCAN passa a preferir os grupos-pais grandes. Varra alguns valores e leia os tópicos; para fundir sem reagrupar, reduce_topics.
Etapa 4 · os tópicos voltam amanhã?
Armadilha: reprodutibilidade
Some aos embeddings um ruído de cerca de um milionésimo (o tamanho das diferenças entre CPU e GPU) e mantenha todas as sementes:
| ruído, semente 0 | 24 tópicos, ARI com o original 0,908 |
| ruído, semente 1 | 24 tópicos, ARI 0,910 |
| ruído, semente 2 | 3 tópicos, ARI 0,514 |
ARI: índice de Rand ajustado (1 = mesma partição) · CPU, GPU: processadores central e gráfico.
min_cluster_size=10 está na beira do degrau. Fixar sementes torna uma rodada repetível, não verdadeira: relate tópicos que sobrevivem a sementes e a pequenas perturbações e salve o modelo ajustado.
Etapa 5 · o modelo fala a língua do corpus?
Armadilha: a língua do modelo de embeddings
- O
all-MiniLM-L6-v2 foi treinado em inglês.
- Para corpora em português ou misturados: um modelo multilíngue como o
paraphrase-multilingual-MiniLM-L12-v2 ou BERTopic(language='multilingual').
- E uma lista de stop words em português no vetorizador: os nomes vêm dela, não dos embeddings.
Prática · para casa
Sua vez (avançado)
- Um limiar para os outliers:
reduce_outliers(..., threshold=0.3). Quantos continuam outliers?
- O degrau, em passos menores: cada
min_cluster_size de 10 a 15.
- Longe do degrau: o experimento de ruído com
min_cluster_size=15.
A seguir: o lab avançado na página de visão geral (passos 8 a 10).