Machine Learning · Insper · E3.1

LDA

Abordagem fundamental

Alocação latente de Dirichlet: que história poderia ter escrito estas palavras?

O caminho desta parte

  1. Contar a históriaum tópico por posição, depois uma palavra desse tópico
  2. A priori de Dirichletquão misturado é um documento típico?
  3. Ajustar posts reais2.155 posts, palavras do topo, ARI com os fóruns
Cada etapa responde a uma pergunta: como um documento poderia ter sido escrito? → quão misturados são os documentos? → o que a LDA encontra em posts reais?
Etapa 1 · como um documento poderia ter sido escrito?

LDA: uma história de como as palavras chegaram lá

Alocação latente de Dirichlet (latent Dirichlet allocation; Blei, Ng & Jordan, 2003):

  1. cada tópico \(k\) é uma distribuição de probabilidade \(\varphi_k\) sobre o vocabulário;
  2. cada documento \(d\) tem a sua mistura de tópicos \(\theta_d\), por exemplo \((0{,}8;\ 0{,}2)\);
  3. para cada posição de palavra: sorteie um tópico \(z\) de \(\theta_d\) e depois uma palavra de \(\varphi_z\).
\[ p(w \mid d) = \sum_k \theta_{d,k}\, \varphi_{k,w} \]

\(\theta_{d,k}\): fatia do tópico \(k\) no documento \(d\) · \(\varphi_{k,w}\): probabilidade da palavra \(w\) no tópico \(k\). A ordem das palavras não entra: contagens bag-of-words bastam.

A história à mão

Preveja. Num documento que é 80% esportes, o que é mais provável, team ou rocket, e por quanto?

Dois tópicos como gráficos de barras sobre seis palavras e a distribuição de palavras do documento, 0,8 vez o primeiro mais 0,2 vez o segundo

\(\theta = (0{,}8;\ 0{,}2)\): 80% esportes, 20% espaço.

\(p(\textit{team}) = 0{,}8 \times 0{,}40 + 0{,}2 \times 0{,}05 = 0{,}33\)

\(p(\textit{rocket}) = 0{,}8 \times 0{,}05 + 0{,}2 \times 0{,}40 = 0{,}12\)

Seguindo a história, 4 das 12 posições sortearam o tópico espaço, exatamente onde aparecem moon, orbit, rocket, orbit.

Etapa 2 · quão misturados são os documentos?

A priori de Dirichlet: quão misturado é um documento?

Preveja. Com \(\alpha = 0{,}1\), os documentos são puros (um tópico) ou bem misturados?
Misturas de 400 documentos sobre três tópicos num triângulo: alfa 0,1 as empilha nos vértices, alfa 1 as espalha, alfa 10 as aglomera no centro
\(\alpha\)maior fatia
0,10,89
10,62
100,42

\(\theta_d\) é sorteado de uma Dirichlet de parâmetro \(\alpha\). No scikit-learn, doc_topic_prior, \(1/k\) por padrão: documentos concentrados em poucos tópicos.

Simulador: escreva um documento do jeito da LDA

Preveja. Com \(\alpha = 0{,}1\), os documentos sorteados saem de uma cor só ou das três?

Etapa 3 · o que a LDA encontra em posts reais?

Da história ao scikit-learn


lda = LatentDirichletAllocation(
        n_components=4, random_state=0).fit(X)
phi = lda.components_     # uma linha por tópico
theta = lda.transform(X)  # uma linha por documento
label = theta.argmax(axis=1)
    
  • X: contagens bag-of-words, documentos × palavras.
  • Uma linha de components_, dividida pela soma, é um \(\varphi_k\) estimado.
  • Uma linha de transform é o \(\theta_d\) do documento.
O ajuste roda a história de trás para a frente: só a partir das palavras, estima \(\varphi\) e \(\theta\). A parte avançada confere isso num corpus de tópicos conhecidos.

A LDA em 2.155 posts reais

Quatro fóruns do 20 Newsgroups (computação gráfica, hóquei, espaço, religião); 5.725 palavras de 3 ou mais letras, em pelo menos 5 posts e no máximo em metade deles. Preveja: que fórum sai mais limpo?

jpeg don pts like think play period gif
god space people think just jesus time like
team game hockey season games nhl play year
image edu data graphics space available software program
O hóquei sai limpo; o resto se mistura. Cada post vai para o seu maior tópico; concordância com os fóruns pelo índice de Rand ajustado (ARI, do inglês adjusted Rand index; 1 = mesma partição, 0 = acaso): 0,456.

Resumo

  1. Um tópico é uma distribuição \(\varphi_k\) sobre palavras; um documento, uma mistura \(\theta_d\) de tópicos.
  2. \(p(w \mid d) = \sum_k \theta_{d,k}\, \varphi_{k,w}\): as probabilidades dos tópicos, misturadas.
  3. \(\alpha\) pequeno: um tópico por documento; \(\alpha\) grande: tudo misturado.
  4. O ajuste roda a história de trás para a frente nas contagens: components_ guarda os tópicos e transform as misturas.
Prática

Para fechar a parte fundamental

  • Por que a LDA só precisa das contagens de palavras e não da ordem delas?
  • Qual das seis palavras nunca poderia aparecer num documento que é 100% espaço?
  • Como seriam os documentos de um corpus com \(\alpha = 10\)?

No lab: o passo 2 ajusta a LDA em cinco outros fóruns (página de visão geral). A seguir: os slides fundamentais da E3.2 NMF.