Предсказание темы с использованием скрытого распределения Дирихле


17

Я использовал LDA на корпусе документов и нашел несколько тем. Вывод моего кода - две матрицы, содержащие вероятности; вероятности для одной темы и вероятность для другой темы. Но я на самом деле не знаю, как использовать эти результаты, чтобы предсказать тему нового документа. Я использую выборку Гиббса. Кто-нибудь знает как? Благодарность


1
Что вы подразумеваете под «предсказанием темы нового документа»? Вы хотите найти, из какой единственной темы этот документ был создан? Хотите найти сочетание тем для документа? Хотите ли вы пометить каждое слово в новом документе темой, из которой произошло это слово?
SheldonCooper

Вы хотите найти, из какой единственной темы этот документ был создан? Вы хотите найти сочетание тем для документа? - Я хочу ответить на оба эти вопроса на самом деле ... но мой корпус действительно большой, поэтому я не могу позволить себе переподготовку всей моей модели каждый раз, когда новый документ осматривается
Хоссейн

Ответы:


21

Я бы попробовал «сложить». Это относится к тому, чтобы взять один новый документ, добавить его в корпус, а затем запустить выборку Гиббса только по словам в этом новом документе , сохранив тем самым назначения тем старых документов. Это обычно сходится быстро (может быть 5-10-20 итераций), и вам не нужно выбирать старый корпус, поэтому он также работает быстро. В конце у вас будет назначение темы для каждого слова в новом документе. Это даст вам распределение тем в этом документе.

В вашем сэмплере Gibbs вы, вероятно, имеете нечто похожее на следующий код:

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

Сгибание такое же, за исключением того, что вы начинаете с существующих матриц, добавляете к ним токены нового документа и делаете выборку только для новых токенов. То есть:

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

пвесявесяJвесJ

ΠJпвесJя

спасибо за ответ Я читал кое-что о, но все еще немного озадачен "складыванием". Вы говорите, что я должен оставить тематические назначения старых документов такими же, это означает, что назначения слов-тем должны быть пересчитаны? Можете ли вы дать мне более подробные инструкции о том, что должно быть сделано? или, может быть, отсылаю меня к статье или ссылке, которая действительно может помочь мне прояснить этот процесс «сворачивания». Мой первый вариант - сделать «складывание». В случае неудачи я воспользуюсь вторым предложенным вами способом (не уверен, насколько хорошо он работает по сравнению с фолдингом). Спасибо.
Хоссейн

@SheldonCooper: Если я вас правильно понимаю, то я сомневаюсь, что это то, как это сделать: вы делаете так, как будто вы измеряете производительность SVM на новом тестовом образце, давая алгоритму оптимизации еще несколько шагов от текущее решение, включая тестовый образец, а затем оцените его на этом образце ... но: при машинном обучении вы никогда не сможете провести тестирование на своем тренировочном наборе ... и, включив тестовый образец в модель, вы делаете именно это: тестирование на тренировочный образец ...
Фабиан Вернер

@FabianWerner Я полагаю, что решение не обновило матрицу слов по темам из исходного обучения. Он просто перезапускает сэмплер Гиббса, начиная с обученной матрицы тематики, и создает новую матрицу тематики документа. В любом случае, знаете ли вы другой способ сделать то, что попросил ОП (по общему признанию, несколько лет назад)? Я смотрю на ту же проблему.
thecity2

@ thecity2 Хотя я некоторое время обдумывал эту проблему, я должен с грустью сказать, что у меня пока нет решения. Если вы найдете один, пожалуйста, дайте мне знать !!!
Фабиан Вернер

@FabianWerner У вас нет поезда и тестового набора для этой проблемы - ваш комментарий здесь не имеет значения. Это неконтролируемое обучение, как кластеризация.
День
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.