我正在研究一种不是英语的语言,我从不同的来源收集了数据。我已经做了我的预处理,如标点删除,停止词删除和标记化。现在我想提取领域特定的词汇。假设我有与体育、娱乐等相关的数据,我想提取与这些特定领域相关的单词,比如板球等,并将它们放在密切相关的主题中。我试着用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)
LDA及其缺陷:LDA的思想是从你的语料库中发现潜在的主题。这种无监督机器学习方法的一个缺点是,你最终会遇到一些人类难以理解的话题。另一个缺点是,您很可能最终会遇到一些通用主题,包括出现在每个文档中的单词(如“简介”、“日期”、“作者”等)。第三,你将无法发现潜在的话题,而这些话题根本就不存在。如果你只有一篇关于板球的文章,它将不会被算法识别。在
为什么LDA不适合您的案例: 你在寻找一些明确的主题,比如
cricket
和你想学习一些关于板球词汇的知识,对吗?然而,LDA会输出一些主题,而您需要识别板球词汇,以便确定例如,主题5与板球有关。通常情况下,LDA将识别与其他相关主题混合的主题。记住这一点,有三种情况:在第一种情况下,您可能会遇到这样的问题:您可能会将单词与cricket关联起来,而这些单词实际上与cricket无关,因为您依赖LDA输出来提供高质量的主题,这些主题仅与cricket有关,而没有其他相关主题或通用术语。在第二种情况下,首先你不需要分析,因为你已经知道板球的词汇了!第三种情况可能是当你依靠计算机来解释主题时。然而,在LDA中,您总是依赖于人类来给出输出的语义解释。在
那么该怎么办:有一篇论文叫做Targeted Topic Modeling for Focused Analysis (Wang 2016),它试图确定哪些文档与预定义的主题有关(比如cricket)。如果你有一个主题列表,你想获得一些特定于主题的词汇(板球、篮球、浪漫喜剧等等),一个起点可以是首先确定相关文档,然后继续分析与某个主题相关的文档的单词分布。在
请注意,也许有完全不同的方法可以执行您正在寻找的东西。如果你想继续读LDA相关文献,我相对相信我链接的文章是你最好的选择。在
编辑: 如果这个答案对你有用,你可能会发现my paper也很有趣。它使用一个标记的学术经济学论文数据集(600多个可能的标签),并尝试各种LDA风格,以获得对新学术论文的最佳预测。回购协议包含我的代码、文档和论文本身
相关问题 更多 >
编程相关推荐