Prédiction de sujet utilisant l'allocation de Dirichlet latente

17

J'ai utilisé LDA sur un corpus de documents et trouvé quelques sujets. La sortie de mon code est deux matrices contenant des probabilités; l'une des probabilités doc-topic et l'autre probabilités word-topic. Mais je ne sais pas comment utiliser ces résultats pour prédire le sujet d'un nouveau document. J'utilise l'échantillonnage Gibbs. Est-ce que quelqu'un sait comment? Merci

Hossein
la source
1
Qu'entendez-vous par «prédire le sujet d'un nouveau document»? Voulez-vous savoir à partir de quel sujet unique ce document a été généré? Voulez-vous trouver un mélange de sujets pour le document? Voulez-vous étiqueter chaque mot du nouveau document par le sujet dont il provient?
SheldonCooper
Voulez-vous savoir à partir de quel sujet unique ce document a été généré? Voulez-vous trouver un mélange de sujets pour le document? - Je veux répondre à ces deux questions en fait ... mais mon corpus est vraiment grand, donc je ne peux pas me permettre de recycler tout mon modèle chaque fois qu'un nouveau document est examiné
Hossein

Réponses:

21

J'essaierais de «replier». Il s'agit de prendre un nouveau document, de l'ajouter au corpus, puis d'exécuter l'échantillonnage de Gibbs uniquement sur les mots de ce nouveau document , en conservant les affectations de sujet des anciens documents. Cela converge généralement rapidement (peut-être 5-10-20 itérations), et vous n'avez pas besoin d'échantillonner votre ancien corpus, donc il fonctionne également rapidement. À la fin, vous aurez l'attribution de rubrique pour chaque mot du nouveau document. Cela vous donnera la répartition des sujets dans ce document.

Dans votre échantillonneur Gibbs, vous avez probablement quelque chose de similaire au code suivant:

// 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

Le repliement est le même, sauf que vous commencez par les matrices existantes, que vous y ajoutez les jetons du nouveau document et que vous effectuez l'échantillonnage uniquement pour les nouveaux jetons. C'est à dire:

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

pwjewjejwj

jpwjje
Sheldon Cooper
la source
merci pour votre réponse. J'ai lu quelques trucs mais je suis encore un peu confus au sujet du "pliage". Vous dites que je devrais conserver les affectations de sujets des anciens documents, cela signifie que les affectations de sujets de mots devraient être recalculées? Pouvez-vous me donner une description plus détaillée de ce qui devrait être fait? ou peut-être en me référant à un document ou à un lien qui peut réellement m'aider à clarifier ce processus de "repliement". Ma première option consiste à "replier". En cas d'échec, je choisirai la deuxième méthode que vous avez proposée (je ne sais pas dans quelle mesure cela fonctionne par rapport au repliement).
Hossein
@SheldonCooper: Si je vous comprends bien, je doute que c'est la façon de le faire: ce que vous faites, c'est comme si vous mesurez les performances d'un SVM sur un nouvel échantillon de test en donnant à l'algorithme d'optimisation quelques étapes supplémentaires à partir de la solution actuelle, y compris l'échantillon de test, puis l'évaluer sur cet échantillon ... mais: dans l'apprentissage automatique, vous ne pouvez jamais tester sur votre ensemble de formation ... et en incluant l'échantillon de test dans le modèle, vous faites exactement cela: tester sur un échantillon de formation ...
Fabian Werner
@FabianWerner Je pense que la solution n'a pas mis à jour la matrice mot-sujet de la formation d'origine. Il ré-exécute simplement un échantillonneur Gibbs en commençant par la matrice de mots-sujets entraînée, et crée une nouvelle matrice de sujets de documents. En tout cas, connaissez-vous une autre façon de faire ce que le PO a demandé (il y a plusieurs années, certes)? Je regarde le même problème.
thecity2
@ thecity2 Bien que je réfléchisse à ce problème depuis un moment, je dois malheureusement dire que je n'ai pas encore de solution. Si vous en trouvez un, alors faites-le moi savoir !!!
Fabian Werner
@FabianWerner Vous n'avez pas de train et de test dans ce problème - votre commentaire n'est pas pertinent ici. Il s'agit d'un apprentissage non supervisé, tout comme le clustering.
emem