Machine Learning · Insper · E3.1

LDA

Abordagem avançada

O ajuste recupera os tópicos? Quando ele falha?

O caminho desta parte

  1. Recuperar tópicos conhecidosum corpus sintético, escrito pela história
  2. Palavras de menos53 palavras, 20 sementes
  3. 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

teamgoalgamerocketorbitmoonbreadovenbake
esportes0,350,310,250,020,010,020,010,020,02
espaço0,010,010,020,360,310,260,010,010,01
culinária0,010,010,010,010,010,020,340,320,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.