#machine-learning #scikit-learn #lda #latent-semantic-analysis
#машинное обучение #scikit-learn #lda #скрытый-семантический-анализ
Вопрос:
Вместо установки topic_word_prior в качестве параметра я хотел бы инициализировать темы в соответствии с заранее определенным распределением по словам. Как бы я установил это начальное распределение тем в реализации sklearn? Если это невозможно, есть ли лучшая реализация для рассмотрения?
Комментарии:
1. Я также хотел бы отметить, что для этого вам следует проверить pickle . Он сохраняет модель в виде файла для обеспечения доступности: docs.python.org/3/library/pickle.html
Ответ №1:
Если у вас есть предопределенное распределение слов в предварительно обученной модели, вы можете просто передать bow_corpus через это распределение как функцию. Генераторы LDA и LDAMallet могут быть обучены один раз, после чего вы можете передать новый набор данных для распределения без изменения тем.
Шаги:
- Импортируйте свои данные
- Очистите свои данные: уберите знаки препинания, цифры, лемматизируйте, удалите стоп-слова и stem
- Создайте словарь
dictionary = gensim.corpora.Dictionary(processed_docs[:]) dictionary.filter_extremes(no_below=15, no_above=0.5, keep_n=100000)
- Определите корпус bow
bow_corpus = [dictionary.doc2bow(doc) for doc in processed_docs]
- Обучите свою модель — пропустите, если она уже обучена
ldamallet = gensim.models.wrappers.LdaMallet(mallet_path, corpus=bow_corpus, num_topics=15, id2word=dictionary)
- Импортируйте новые данные и выполните шаги 1-4
- Передайте ваши новые данные через вашу модель следующим образом:
ldamallet[bow_corpus_new[:len(bow_corpus_new)]]
- Теперь ваши новые данные распределены, и вы можете поместить их в формат CSV
Комментарии:
1. Просто чтобы убедиться, что я вас правильно понял, вы предлагаете 1) сгенерировать кучу образцов (пакет документов word) с использованием предопределенного дистрибутива, затем 2) обучить LDA на предопределенном корпусе и, наконец, 3) использовать эту модель в качестве отправной точки для модели, обученной нафактические данные?
2. @ComplexGates Я добавил краткое описание процедуры, надеюсь, это помогло прояснить ситуацию 🙂