Machine Learning · Insper · E3
Modelagem de Tópicos & BERTopic
Abordagem fundamental
Dados milhares de documentos, do que eles tratam?
Uma pergunta que parece simples
- Ninguém rotula os documentos nem lista os temas: é não supervisionado, o irmão textual do agrupamento.
- Usos: um ano de avaliações ou de chamados de suporte, um arquivo de notícias, redes sociais, uma literatura científica.
LDA
alocação latente de Dirichlet (latent Dirichlet allocation): uma história probabilística de como as palavras são escritas
NMF
fatoração de matrizes não negativas (non-negative matrix factorization) da matriz TF-IDF (frequência do termo × frequência inversa nos documentos)
BERTopic
sentence embeddings + UMAP (uma projeção não linear) + HDBSCAN (agrupamento por densidade) + uma variante do TF-IDF
Dois corpora: 11 frases escritas à mão e 2.155 posts reais de quatro fóruns (o fórum fica escondido dos modelos, para conferi-los).
O caminho desta aula
- O que é um tópico?palavras que andam juntas ou documentos que andam juntos
- LDAalocação latente de Dirichlet: uma história de como as palavras são escritas
- NMFfatoração de matrizes não negativas: um documento como soma de partes
- BERTopicembeddings, redução, agrupamento, descrição
- Comparar e escolheros três lado a lado
Cada etapa responde a uma pergunta: o que procuramos nos documentos? → que história poderia ter escrito estas palavras? → uma fatoração de matriz encontra os mesmos tópicos? → e se um tópico for um grupo de documentos? → em qual modelo confiar e quando?
Etapa 1 · o que procuramos nos documentos?
O que é um tópico? Duas respostas
uma distribuição sobre palavras
"Esportes" dá probabilidade alta a team, game, goal e quase nenhuma a oven. Um documento é uma mistura: 80% esportes, 20% espaço.
LDA e também NMF, com pesos não negativos
um grupo de documentos
Cada documento pertence a um tópico ou a nenhum; as palavras do tópico são calculadas depois, para descrever o grupo.
BERTopic
O corpus escrito à mão, como contagens
| doc | team | game | goal | rocket | launch | moon | bread | bake |
| 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
| 3 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
| 6 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| 9 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 |
| 10 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
11 frases, 53 palavras mantidas, vocabulário de 33 (sem as stop words do inglês).
Três temas: esportes, espaço, culinária; as duas últimas frases os misturam.
Preveja. Um modelo de tópicos recebe só esta matriz, sem os comentários. Ele consegue achar os três temas?
Cinco páginas, duas abordagens cada
| página | um tópico é | fundamental | avançada |
| E3.1 LDA | uma distribuição sobre palavras | a história à mão, a priori, os posts | tópicos conhecidos recuperados; palavras de menos |
| E3.2 NMF | uma linha de pesos ≥ 0 | \(X \approx WH\), contra a SVD (decomposição em valores singulares), os posts | quantos tópicos: perplexidade, coerência |
| E3.3 BERTopic | um grupo de documentos | textos curtos; os quatro passos; uma chamada | nomes à mão; ajustar as palavras |
| E3.4 Comparando | | os três lado a lado | as armadilhas |
O caminho passa pelos slides fundamentais da E3.1 à E3.4, em ordem, e volta aqui para o resumo e o lab.
Resumo
- Um tópico é uma distribuição sobre palavras (LDA, NMF) ou um grupo de documentos (BERTopic).
- LDA: cada posição de palavra sorteia um tópico e depois uma palavra: \(p(w \mid d) = \sum_k \theta_{d,k}\, \varphi_{k,w}\); \(\alpha\) diz quão misturado é um documento.
- NMF: \(X \approx WH\) sem nada negativo; cada tópico é um tema inteiro.
- BERTopic: embeddings → UMAP → HDBSCAN → c-TF-IDF (TF-IDF por grupo); o número de tópicos sai dos dados e os outliers são o tópico −1.
- Nenhum modelo vence sempre: meça contra algo que os modelos nunca viram e leia os tópicos.
| o que você vê | o que fazer |
| LDA e NMF perto do acaso em textos curtos | gerar embeddings dos documentos (BERTopic) |
| tópicos nomeados por the, of, to | uma lista de stop words no vetorizador |
Lab fundamental · cerca de 40 min, em duplas
Tópicos em cinco fóruns, de três jeitos: passos 1 a 7
- Outros cinco fóruns do 20 Newsgroups: 2.613 posts, entre 495 e 551 por fórum; o fórum fica escondido dos modelos.
- Passos 2–3: LDA e NMF. Passos 4–7: o BERTopic um passo por vez e depois em uma chamada.
- Baixe o notebook do lab e abra no Jupyter ou no Colab; no Colab, rode antes
!pip install bertopic.
- Em cada passo, responda ao Preveja antes de rodar.
- Simulações: mais tópicos para a NMF (passo 3) e os embeddings ou o HDBSCAN? (passo 6).
Ritmo: passos 1 a 3 e a primeira simulação em 15 min; passos 4 e 5 em 10 min; passos 6 e 7 e a segunda simulação em 15 min.