Previsão de tópico usando alocação latente de Dirichlet

17

Eu usei o LDA em um corpus de documentos e encontrei alguns tópicos. A saída do meu código é duas matrizes que contêm probabilidades; uma probabilidade de tópico de documento e a outra probabilidade de tópico de palavra. Mas, na verdade, não sei como usar esses resultados para prever o tópico de um novo documento. Estou usando a amostra de Gibbs. Alguém sabe como? obrigado

Hossein
fonte
1
O que você quer dizer com "prever o tópico de um novo documento"? Deseja descobrir de qual tópico único este documento foi gerado? Deseja encontrar uma mistura de tópicos para o documento? Deseja rotular cada palavra no novo documento pelo tópico de origem da palavra?
SheldonCooper
Deseja descobrir de qual tópico único este documento foi gerado? Deseja encontrar uma mistura de tópicos para o documento? - Na verdade, quero responder a essas duas perguntas ... mas meu corpus é realmente grande, por isso não posso me dar ao luxo de treinar todo o meu modelo toda vez que um novo documento é examinado
Hossein

Respostas:

21

Eu tentaria 'dobrar'. Isso se refere a pegar um novo documento, adicioná-lo ao corpus e executar a amostra Gibbs apenas nas palavras desse novo documento , mantendo as atribuições de tópicos dos documentos antigos iguais. Isso geralmente converge rapidamente (talvez de 5 a 10 a 20 iterações), e você não precisa provar seu corpus antigo, por isso também é rápido. No final, você terá a atribuição de tópicos para cada palavra no novo documento. Isso fornecerá a distribuição dos tópicos nesse documento.

No seu amostrador Gibbs, você provavelmente tem algo semelhante ao seguinte código:

// This will initialize the matrices of counts, N_tw (topic-word matrix) and N_dt (document-topic matrix)
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Assign current token to a random topic, updating the count matrices
    end
end

// This will do the Gibbs sampling
for doc = 1 to N_Documents
    for token = 1 to N_Tokens_In_Document
       Compute probability of current token being assigned to each topic
       Sample a topic from this distribution
       Assign the token to the new topic, updating the count matrices
    end
end

A dobragem é a mesma, exceto que você começa com as matrizes existentes, adiciona os tokens do novo documento a eles e faz a amostragem apenas dos novos tokens. Ou seja:

Start with the N_tw and N_dt matrices from the previous step

// This will update the count matrices for folding-in
for token = 1 to N_Tokens_In_New_Document
   Assign current token to a random topic, updating the count matrices
end

// This will do the folding-in by Gibbs sampling
for token = 1 to N_Tokens_In_New_Document
   Compute probability of current token being assigned to each topic
   Sample a topic from this distribution
   Assign the token to the new topic, updating the count matrices
end

pwiwijwj

jpwji
SheldonCooper
fonte
obrigado pela resposta. Eu li algumas coisas sobre, mas ainda estou um pouco confuso sobre "desistir". Você está dizendo que devo manter as atribuições de tópicos dos documentos antigos iguais, isso significa que as atribuições de tópicos de palavras devem ser recalculadas? É possível que você me dê etapas mais detalhadas do que deve ser feito? ou talvez me referindo a um artigo ou link que realmente possa me ajudar a esclarecer esse processo de "dobragem". Minha primeira opção é fazer "dobrar". Se malsucedido, irei para o segundo método que você propôs (não tenho certeza de quão bem ele funciona em comparação com a dobragem). Obrigado.
Hossein
@ SheldonCooper: Se o entendi corretamente, duvido que seja assim: O que você faz é como se medisse o desempenho de um SVM em uma nova amostra de teste, dando ao algoritmo de otimização mais algumas etapas do a solução atual, incluindo a amostra de teste e, em seguida, avaliá-la nesta amostra ... mas: no aprendizado de máquina, você nunca pode testar em seu conjunto de treinamento ... e ao incluir a amostra de teste no modelo, faça exatamente isso: teste em um amostra de treinamento ...
Fabian Werner
@FabianWerner Acredito que a solução não atualizou a matriz palavra-tópico do treinamento original. Ele apenas executa novamente um sampler Gibbs começando com a matriz de tópicos de palavras treinados e cria uma nova matriz de tópicos de documentos. De qualquer forma, você conhece outra maneira de fazer o que o OP pediu (há vários anos)? Estou olhando para o mesmo problema.
thecity2
@ thecity2 Embora eu pense sobre esse problema há algum tempo, devo dizer com tristeza que ainda não tenho uma solução. Se você encontrar um, por favor me avise !!!
Fabian Werner
@FabianWerner Você não tem um trem e teste definidos para este problema - seu comentário é irrelevante aqui. Esse é um aprendizado não supervisionado, assim como o agrupamento.
emem 14/05/19