Machine Learning · Insper · E3.1
LDA
Abordagem avançada
O ajuste recupera os tópicos? Quando ele falha?
O caminho desta parte
- Recuperar tópicos conhecidosum corpus sintético, escrito pela história
- Palavras de menos53 palavras, 20 sementes
- Os botõesα, η e o ponto de partida aleatório
Cada etapa responde a uma pergunta: a LDA (alocação latente de Dirichlet) encontra tópicos conhecidos? → o que acontece com evidência de menos? → o que dá para ajustar, e o que isso muda?
Etapa 1 · a LDA encontra tópicos conhecidos?
Um corpus escrito pela própria história
- 3 tópicos sobre 9 palavras: cada um põe 0,35, 0,30, 0,25 nas suas três palavras e \(0{,}10/6\) em cada uma das outras.
- 300 documentos, misturas \(\theta_d \sim \text{Dirichlet}(0{,}3)\), 30 palavras cada: 9.000 palavras.
- Ajuste
LatentDirichletAllocation(n_components=3) só nas contagens.
Preveja. Os tópicos estimados vão ficar perto dos verdadeiros? Vão sair na mesma ordem?
Os tópicos voltam
| team | goal | game | rocket | orbit | moon | bread | oven | bake |
| esportes | 0,35 | 0,31 | 0,25 | 0,02 | 0,01 | 0,02 | 0,01 | 0,02 | 0,02 |
| espaço | 0,01 | 0,01 | 0,02 | 0,36 | 0,31 | 0,26 | 0,01 | 0,01 | 0,01 |
| culinária | 0,01 | 0,01 | 0,01 | 0,01 | 0,01 | 0,02 | 0,34 | 0,32 | 0,26 |
- Cada linha de
components_, dividida pela soma, contra a verdade: erro de até 0,01.
- Misturas \(\theta\) estimadas contra as verdadeiras: correlação de 0,97 em todo tópico.
Os tópicos saem numa ordem arbitrária: o código primeiro os alinha com a verdade. O tópico "2" de uma rodada pode ser o "0" de outra.
Etapa 2 · o que acontece com evidência de menos?
E nas 53 palavras escritas à mão?
Preveja. Três tópicos nas 11 frases escritas à mão: a LDA separa esportes, espaço e culinária?
- Semente 0: bread fresh game oven · team goal game orbit · rocket launch bread delayed: temas misturados.
- Cada documento ainda vai com confiança (0,86 a 0,88) para um tópico.
- Em 20 sementes, só 1 separa de forma limpa as nove frases de tema único.
Não há erro no código: 53 palavras trazem evidência de menos e o ponto de partida aleatório decide. A LDA precisa de muitos documentos com palavras suficientes em cada um.
Etapa 3 · o que dá para ajustar, e o que isso muda?
Os botões: duas prioris e uma semente
\(\alpha\): doc_topic_prior
quão misturado é um documento; pequeno → poucos tópicos por documento. Padrão \(1/k\).
\(\eta\): topic_word_prior
quão espalhado é um tópico sobre as palavras; pequeno → poucas palavras por tópico. Padrão \(1/k\).
\(k\): n_components
fixado de antemão; a parte avançada da E3.2 NMF discute como escolhê-lo
random_state
o ponto de partida aleatório da otimização: ele decidiu tudo nas 53 palavras
Prática · para casa
Sua vez (avançado)
- Menos dados, mesma história: 30 documentos em vez de 300, depois 5 palavras cada em vez de 30. O que importa mais?
- Uma priori errada: documentos misturados (\(\text{Dirichlet}(3)\)) ajustados com
doc_topic_prior=0.05.
- Sementes nos posts: a loteria das 53 palavras é um problema com 2.155 posts?
A seguir: os slides avançados da E3.2 NMF.