Недоумение увеличивается с количеством тем - PullRequest
1 голос
/ 01 июля 2019

Есть довольно много сообщений об этой конкретной проблеме, но я не смог решить эту проблему. Я экспериментировал с LDA на корпусе 20newgroup с реализацией Sklearn и Gensim. В литературе описано, что недоумение обычно уменьшается с большим количеством тем, но у меня разные результаты.

Я уже экспериментировал с различными параметрами, но в целом путаница увеличивается для набора тестов и уменьшается для набора поездов при увеличении количества тем. Это может указывать на то, что модель переоснащается на тренировочном наборе. Но подобные шаблоны встречаются при использовании других наборов текстовых данных. Кроме того, исследования, конкретно использующие этот набор данных, показали снижение недоумения. (например, нг20 недоумение )

Я экспериментировал с SkLearn, Gensim и оболочкой Gensim Mallet, и все пакеты действительно показывают разные значения недоумения (что можно ожидать, поскольку LDA случайно инициализируется + разные алгоритмы логического вывода), но общая закономерность состоит в том, что растущее недоумение действительно увеличивается за каждую упаковку, что противоречит многим статьям из литературы.

# imports for code sample
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.decomposition import LatentDirichletAllocation

маленький пример кода

# retrieve the data
newsgroups_all = datasets.fetch_20newsgroups(subset='all', remove=('headers', 'footers', 'quotes'), shuffle = True)
print("Extracting tf features for LDA...")
tf_vectorizer_train = CountVectorizer(max_df=0.95, min_df=2,stop_words='english')
X = tf_vectorizer_train.fit_transform(newsgroups_all.data)
X_train, X_test = train_test_split(X,  test_size=0.2, random_state=42)
k = N
lda = LatentDirichletAllocation(n_components = k, doc_topic_prior = 1/k, topic_word_prior = 0.1)
lda.fit(X_train)
perp_test = lda.perplexity(X_test)
perp_train = lda.perplexity(X_train)

Я ожидаю, что все недоумения уменьшатся, но я получаю следующий вывод:

k = 5, недоумение поезда: 5531.15, испытание сложности: 7740,95

k = 10, недоумение поезда: 5202.80, испытание сложности: 8805,57

k = 15, недоумение поезда: 5095,42, испытание сложности: 10193,42

Редактировать: После выполнения 5-кратной перекрестной проверки (от 10-150, размер шага: 10) и усреднения растерянности за сгиб, создается следующий график. Кажется, что недоумение для учебного набора только уменьшается между 1-15 темами, а затем немного увеличивается при переходе к более высоким номерам тем. Недоумение тестового набора постоянно увеличивается, почти линейно. Может ли быть разница в расчетах недоумения между внедрением sklearn / gensim и публикацией исследований о снижении недоумения.

Train and test perplexity

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...