我正在研究一种不是英语的语言,而且我从不同的来源中删除了数据。我已经完成了我的预处理,如标点符号删除,停用词删除和标记化。现在我想提取特定领域的词典。假设我有与体育,娱乐等相关的数据,我想提取与这些特定领域相关的单词,比如板球等,并将它们放在密切相关的主题中。我尝试使用lda,但我没有得到正确的集群。同样在作为一个主题的一部分的单词的集群中,它也出现在其他主题中。
如何改善我的成绩?
# URDU STOP WORDS REMOVAL
doc_clean = []
stopwords_corpus = UrduCorpusReader('./data', ['stopwords-ur.txt'])
stopwords = stopwords_corpus.words()
# print(stopwords)
for infile in (wordlists.fileids()):
words = wordlists.words(infile)
#print(words)
finalized_words = remove_urdu_stopwords(stopwords, words)
doc = doc_clean.append(finalized_words)
print("\n==== WITHOUT STOPWORDS ===========\n")
print(finalized_words)
# making dictionary and corpus
dictionary = corpora.Dictionary(doc_clean)
# convert tokenized documents into a document-term matrix
matrx= [dictionary.doc2bow(text) for text in doc_clean]
# generate LDA model
lda = models.ldamodel.LdaModel(corpus=matrx, id2word=dictionary, num_topics=5, passes=10)
for top in lda.print_topics():
print("\n===topics from files===\n")
print (top)
答案 0 :(得分:4)
LDA及其缺点:LDA的想法是从您的语料库中发现潜在主题。这种无监督机器学习方法的一个缺点是,您最终会遇到人类难以理解的主题。另一个缺点是,您最有可能会得到一些通用主题,包括出现在每个文档中的单词(如“简介”,“日期”,“作者”等)。第三,你将无法发现那些根本不足够的潜在话题。如果您只有1篇关于板球的文章,则该算法无法识别。
为什么LDA不适合您的情况:
您正在搜索明确的主题,例如cricket
和您想要了解板球词汇的内容,对吗?但是,LDA会输出一些主题,并且你需要识别板球词汇,以便确定例如话题5涉及板球。通常,LDA将识别与其他相关主题混合的主题。记住这一点,有三种情况:
在第一种情况下,您将遇到一个问题,即您可能会将单词与板球相关联,这实际上与板球无关,因为您依靠LDA输出来提供仅的高质量主题关注板球,没有其他相关主题或通用术语。在第二种情况下,您首先不需要分析,因为您已经知道了板球词汇!第三种情况可能是您依靠计算机来解释主题。但是,在LDA中,您始终依靠人类对输出进行语义解释。
那么该做什么:有一篇名为Targeted Topic Modeling for Focused Analysis (Wang 2016)的论文,它试图找出哪些文档涉及预定义的主题(如板球)。如果你有一个主题列表,你想要获得一些特定主题的词汇(板球,篮球,浪漫喜剧......),一个起点可能是首先确定相关文件然后继续并分析这个词 - 与某个主题相关的文件的分发。
请注意,也许完全不同的方法可以完全满足您的需求。如果你想留在LDA相关的文献中,我相信我链接的文章是你最好的镜头。
修改强>: 如果这个答案对您有用,您可能会发现my paper也很有趣。它需要一个标记的学术经济学论文数据集(600多种可能的标签),并尝试各种LDA风格,以获得新学术论文的最佳预测。回购包含我的代码,文档以及论文本身