如何实现潜在狄利克雷分配以在主题中给出二元组/三元组而不是一元组
Posted
技术标签:
【中文标题】如何实现潜在狄利克雷分配以在主题中给出二元组/三元组而不是一元组【英文标题】:How to implement Latent Dirichlet Allocation to give bigrams/trigrams in topics instead of unigrams 【发布时间】:2017-10-19 00:51:19 【问题描述】:我使用 gensim LDAModel 提取客户评论的主题如下:
dictionary = corpora.Dictionary(clean_reviews)
dictionary.filter_extremes(keep_n=11000) #change filters
dictionary.compactify()
dictionary_path = "dictionary.dict"
corpora.Dictionary.save(dictionary, dictionary_path)
# convert tokenized documents to vectors
corpus = [dictionary.doc2bow(doc) for doc in clean_reviews]
vocab = lda.datasets.load_reuters_vocab()
# Training lda using number of topics set = 10 (which can be changed)
lda = gensim.models.LdaModel(corpus, id2word = dictionary,
num_topics = 20,
passes = 20,
random_state=1,
alpha = "auto")
这会返回以下主题中的一元组:
topic1 -delivery,parcel,location
topic2 -app, login, access
但我正在寻找 ngram。我遇到了 sklearn 的 LatentDirichletAllocation,它使用 Tfidf 矢量化器,如下所示:
vectorizer = TfidfVectorizer(analyzer='word', ngram_range=[2,5], stop_words='english', min_df=2)
X = vectorizer.fit_transform(new_review_list)
clf = decomposition.LatentDirichletAllocation(n_topics=20, random_state=3, doc_topic_prior = .1).fit(X)
我们可以在向量化器中指定 ngram 的范围。是否也可以在 gensim LDA 模型中这样做。
抱歉,我对所有这些模型都很陌生,所以对它们了解不多。
【问题讨论】:
请回答这个问题?! 几年前gensim群里也有类似的问题,groups.google.com/forum/#!topic/gensim/_rlFCl9-BF4 嗨,你找到方法了吗? 【参考方案1】:我知道这是一个旧线程,但我想我会分享我为获得主题中的 k-gram 所做的事情。我想在我的词汇表中包含二元组、三元组和四元组。为此,我在运行 LDA 模型之前使用了 gensim 的 Phrases 类。 这是一个非常好的资源。
https://www.machinelearningplus.com/nlp/topic-modeling-gensim-python/#15visualizethetopicskeywords
我做过类似的事情。希望这会有所帮助
【讨论】:
以上是关于如何实现潜在狄利克雷分配以在主题中给出二元组/三元组而不是一元组的主要内容,如果未能解决你的问题,请参考以下文章
主题建模 - 将具有前 2 个主题的文档分配为类别标签 - sklearn 潜在狄利克雷分配