LDA недоумение с расщеплением тестирования поезда приводит к абсурдным результатам (лучшая модель = 1 тема)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 LDA недоумение с расщеплением тестирования поезда приводит к абсурдным результатам (лучшая модель = 1 тема)

Сообщение Anonymous »

Я работаю с LDA над португальским новостным корпусом (~ 800 тыс. Документов в среднем 28 слов каждый после очистки данных), и я пытаюсь оценить качество темы, используя недоумение. Темы. Использование log_perplexity (corpus_test) может вводить в заблуждение, потому что он не выводит должного вывода распределений с тематическими документами (θ) для невидимых документов. Итак, я переключился на: < /p>
bound = lda_model.bound(corpus_test)
token_total = sum(cnt for doc in corpus_test for _, cnt in doc)
perplexity = np.exp(-bound / token_total)
< /code>
Но я все еще получаю одинаковое странное поведение: модели с большим количеством тем, последовательно имеют более высокую недоумение в данных тестирования, даже если их обучение сбитостью ниже, а их когерентные оценки лучше. Решение)? Спасибо! < /P>
Код: < /p>
df = dataframe.iloc[:100_000].copy()

train_and_test = []
for number_of_topics in [5, 25, 45, 65, 85]:

print(f'\033[1m{number_of_topics} topics.\033[0m')

KF = KFold(n_splits=5, shuffle=True, random_state=42)

iteration = 1
for train_indices, test_indices in KF.split(df):
print(f'K{iteration}...')
print('Preparing the corpora.')

train_df = df.iloc[train_indices].copy()
train_texts = train_df.corpus.apply(str.split).tolist()
train_dictionary = corpora.Dictionary(train_texts)
train_corpus = [train_dictionary.doc2bow(text) for text in train_texts]

test_df = df.iloc[test_indices].copy()
test_texts = test_df.corpus.apply(str.split).tolist()
test_corpus = [train_dictionary.doc2bow(text) for text in test_texts]

print('Running the LDA model!')
lda_model = LdaMulticore(corpus=train_corpus, id2word=train_dictionary,
num_topics=number_of_topics,
workers=mp.cpu_count(), passes=10)

bound = lda_model.bound(test_corpus)
tokens = sum(cnt for doc in test_corpus for _, cnt in doc)
perplexity = np.exp(-bound / tokens)
print(perplexity, '\n')

train_and_test.append([number_of_topics, iteration, perplexity])
iteration += 1


Подробнее здесь: https://stackoverflow.com/questions/795 ... odel-1-top
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»