困惑随着主题的数量而增加

时间:2019-07-01 09:44:01

标签: python scikit-learn lda topic-modeling perplexity

关于此特定问题有很多文章,但我无法解决此问题。 我一直在使用Sklearn和Gensim实现在20newgroup语料库上使用LDA进行实验。文献中描述的困惑通常随着主题数量的增加而降低,但是我得到的结果却不同。

我已经尝试了不同的参数,但是总的来说,当增加主题数量时,测试集的困惑度增加,而训练集的困惑度降低。这可能表明模型在训练集上过度拟合。但是,在使用其他文本数据集时也会发生类似的模式。同样,专门使用此数据集的研究也减少了困惑。 (例如ng20 perplexity

我已经用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

0 个答案:

没有答案