use*_*289 4 python nltk lda topic-modeling
我正在研究一种非英语的语言,并且我从不同来源收集了数据。我已经完成了预处理,如标点删除、停用词删除和标记化。现在我想提取特定领域的词典。假设我有与体育、娱乐等相关的数据,我想提取与这些特定领域相关的词,如板球等,并将它们放在密切相关的主题中。我试图为此使用 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)
Run Code Online (Sandbox Code Playgroud)
LDA 及其缺点: LDA 的想法是 从您的语料库中发现潜在主题。这种无监督机器学习方法的一个缺点是,您最终会得到人类可能难以解释的主题。另一个缺点是您很可能最终会得到一些通用主题,包括出现在每个文档中的词(如“介绍”、“日期”、“作者”等)。第三,您将无法发现根本不够呈现的潜在主题。如果你只有 1 篇关于板球的文章,它不会被算法识别。
为什么 LDA 不适合您的情况:您正在搜索明确的主题,例如cricket并且您想了解有关板球词汇的知识,对吗?但是,LDA 会输出一些主题,您需要识别板球词汇以确定例如主题 5 与板球有关。通常,LDA 会识别与其他相关主题混合的主题。记住这一点,有三种情况:
在第一种情况下,您会遇到问题,您很可能将单词与 cricket 联系起来,而这些词实际上与 cricket 无关,因为您依靠 LDA 输出提供仅与 cricket 相关而与其他无关的高质量主题相关主题或通用术语。在第二种情况下,您首先不需要分析,因为您已经知道板球词汇!当您依靠计算机来解释主题时,可能会出现第三种情况。但是,在 LDA 中,您总是依赖于人类对输出进行语义解释。
那么该怎么做:有一篇名为Targeted Topic Modeling for Focused Analysis (Wang 2016) 的论文,它试图确定哪些文档与预定义的主题(如板球)有关。如果您有一个主题列表,您希望获得一些特定主题的词汇(板球、篮球、浪漫喜剧等),那么起点可能是首先确定相关文档,然后继续分析单词——与某个主题相关的文档的分布。
请注意,也许有完全不同的方法可以完全满足您的要求。如果你想留在与 LDA 相关的文献中,我相对有信心我链接的文章是你最好的选择。
编辑:如果这个答案对你有用,你可能也会发现我的论文很有趣。它采用学术经济学论文的标记数据集(600 多个可能的标签)并尝试各种 LDA 风格以获得对新学术论文的最佳预测。存储库包含我的代码、文档以及论文本身
| 归档时间: |
|
| 查看次数: |
1632 次 |
| 最近记录: |