Не очень понятно с кодом Python алгоритма LDA - PullRequest
3 голосов
/ 02 апреля 2019

Я пытаюсь реализовать скрытое выделение дирихле (LDA), используя python с Gensim, также я ссылаюсь на код LDA с веб-сайта, но я все еще не очень ясно с кодом Python LDA. Может ли кто-то, кто знает LDA, объяснить мне в ясной форме в соответствии с кодом, приведенным ниже. Я также загружаю формулу LDA, которая является изображением из Википедии. В этом случае LDA используется для анализа коллекции текстовых документов.

lda_model = gensim.models.ldamodel.LdaModel(corpus=corpus,
                                           id2word=id2word,
                                           num_topics=4, 
                                           random_state=100,
                                           update_every=1,
                                           chunksize=10,
                                           passes=10,
                                           alpha='symmetric',
                                           iterations=100,
                                           per_word_topics=True)

LDA formula from wikipedia

1 Ответ

2 голосов
/ 13 апреля 2019

LDA - разработчик тем.Для этого требуется корпус, который выглядит следующим образом:

# the words become numbers and are then counted for frequency
# consider a random row 4310 - it has 27 words word indexed 2 shows up 4 times
# preview the bag of words

bow_corpus = [dictionary.doc2bow(doc) for doc in processed_docs]
bow_corpus[4310]

[(3, 1), (13, 1), (37, 1), (38, 1), (39, 1), (50, 1), (52, 2)]

# same thing in more words

bow_doc_4310 = bow_corpus[4310]
for i in range(len(bow_doc_4310)):
    print("Word {} (\"{}\") appears {} time.".format(bow_doc_4310[i][0], 
                                               dictionary[bow_doc_4310[i][0]], 
bow_doc_4310[i][1]))

Слово 3 («помощь») появляется 1 раз.Слово 13 («оплата») появляется 1 раз.Слово 37 («учетная запись») появляется 1 раз.Слово 38 («карточка») появляется 1 раз.Слово 39 («кредит») появляется 1 раз.Слово 50 («контакт») появляется 1 раз.Слово 52 («оценка») появляется 2 раза.

Id2word отображает слово в словаре на индекс, поэтому 3 = «помощь», чтобы впоследствии можно было печатать темы.Он использует номер id, так как python обрабатывает числа лучше и быстрее.Таким образом, предложения к словам, слова к числам, подсчитывают частоту, затем сравнивают каждое слово со всеми другими словами в корпусе и оценивают их по частоте, с которой они встречаются вместе.Он берет самую сильную корреляцию и превращает ее в тему.

num_topics - это количество тем, которые вы хотите создать.update_every - это способ, которым вы можете настроить динамический запуск lda, это означает, что он будет перезапускаться через заданный интервал.Chuncksize занимает только часть набора данных, это полезно, если вы хотите набор тестов и набор проверки.Пропуски - это то, сколько раз ваш алгоритм ищет распределение - я был бы осторожен с большим числом в шахте Википедии, сходящейся к одной теме после двух проходов.Альфа - это гиперпараметр, обычно .1 итераций - это количество раз, которое он проходит через набор данных.per_word_topics говорит вашему LDA выбрать по своему усмотрению, сколько слов будет помещено в тему, например, одна тема может содержать 70 слов, а другая 200. По умолчанию она печатает 10, но вы можете это изменить.Я надеюсь, что это помогает:)

...