如何改进lda中不同主题的单词分配
how to improve word assignement in different topics in lda
我正在研究一种非英语的语言,并且我从不同来源抓取了数据。我已经完成了预处理,例如标点符号删除、停用词删除和标记化。现在我想提取特定领域的词典。假设我有与体育、娱乐等相关的数据,我想提取与这些特定领域相关的词,如板球等,并将它们放在密切相关的主题中。我尝试为此使用 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 的思想是从语料库中发现潜在 主题。这种无监督机器学习方法的一个缺点是,您最终会遇到人类可能难以解释的主题。另一个缺点是您很可能会得到一些通用主题,包括出现在每个文档中的单词(如 'introduction'、'date'、'author' 等)。第三,您将无法发现根本不够存在的潜在主题。如果您只有 1 篇有关板球的文章,则不会被算法识别。
为什么 LDA 不适合您的情况:
您正在搜索明确的主题,例如 cricket
和 您 想学习一些关于板球词汇的知识,对吗?但是,LDA 会输出一些主题,you 需要识别板球词汇才能确定,例如主题 5 与板球有关。通常,LDA 会识别与其他相关主题混合的主题。牢记这一点,存在三种情况:
- 你对板球一无所知,但你能识别出与板球有关的话题。
- 您是板球专家并且已经知道板球词汇
- 您对板球一无所知,无法识别 LDA 产生的语义主题。
在第一种情况下,您可能会遇到这样的问题,即您可能会将单词与板球联系起来,但实际上与板球无关,因为您指望 LDA 输出提供高质量的主题 仅 与板球有关,没有其他相关主题或通用术语。第二种情况,你一开始就不需要分析了,因为你已经知道蟋蟀的词汇了!当您依靠计算机来解释主题时,可能会出现第三种情况。然而,在 LDA 中,你总是依赖于人类对输出进行语义解释。
那该怎么办:有一篇名为 Targeted Topic Modeling for Focused Analysis (Wang 2016) 的论文试图确定哪些文档与预定义的主题(如板球)有关。如果你有一个主题列表,你想获得一些特定主题的词汇(板球、篮球、浪漫喜剧,..),一个起点可以是首先确定相关文件,然后继续和分析这个词 -与特定主题相关的文档分布。
请注意,也许有完全不同的方法可以完全满足您的需求。如果您想留在 LDA 相关文献中,我相对有信心我链接的文章是您的最佳选择。
编辑:
如果这个答案对您有用,您可能也会发现 my paper 很有趣。它采用学术经济学论文的标记数据集(600 多种可能的标签)并尝试各种 LDA 风格以获得对新学术论文的最佳预测。回购协议包含我的代码、文档以及论文本身
我正在研究一种非英语的语言,并且我从不同来源抓取了数据。我已经完成了预处理,例如标点符号删除、停用词删除和标记化。现在我想提取特定领域的词典。假设我有与体育、娱乐等相关的数据,我想提取与这些特定领域相关的词,如板球等,并将它们放在密切相关的主题中。我尝试为此使用 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 的思想是从语料库中发现潜在 主题。这种无监督机器学习方法的一个缺点是,您最终会遇到人类可能难以解释的主题。另一个缺点是您很可能会得到一些通用主题,包括出现在每个文档中的单词(如 'introduction'、'date'、'author' 等)。第三,您将无法发现根本不够存在的潜在主题。如果您只有 1 篇有关板球的文章,则不会被算法识别。
为什么 LDA 不适合您的情况:
您正在搜索明确的主题,例如 cricket
和 您 想学习一些关于板球词汇的知识,对吗?但是,LDA 会输出一些主题,you 需要识别板球词汇才能确定,例如主题 5 与板球有关。通常,LDA 会识别与其他相关主题混合的主题。牢记这一点,存在三种情况:
- 你对板球一无所知,但你能识别出与板球有关的话题。
- 您是板球专家并且已经知道板球词汇
- 您对板球一无所知,无法识别 LDA 产生的语义主题。
在第一种情况下,您可能会遇到这样的问题,即您可能会将单词与板球联系起来,但实际上与板球无关,因为您指望 LDA 输出提供高质量的主题 仅 与板球有关,没有其他相关主题或通用术语。第二种情况,你一开始就不需要分析了,因为你已经知道蟋蟀的词汇了!当您依靠计算机来解释主题时,可能会出现第三种情况。然而,在 LDA 中,你总是依赖于人类对输出进行语义解释。
那该怎么办:有一篇名为 Targeted Topic Modeling for Focused Analysis (Wang 2016) 的论文试图确定哪些文档与预定义的主题(如板球)有关。如果你有一个主题列表,你想获得一些特定主题的词汇(板球、篮球、浪漫喜剧,..),一个起点可以是首先确定相关文件,然后继续和分析这个词 -与特定主题相关的文档分布。
请注意,也许有完全不同的方法可以完全满足您的需求。如果您想留在 LDA 相关文献中,我相对有信心我链接的文章是您的最佳选择。
编辑: 如果这个答案对您有用,您可能也会发现 my paper 很有趣。它采用学术经济学论文的标记数据集(600 多种可能的标签)并尝试各种 LDA 风格以获得对新学术论文的最佳预测。回购协议包含我的代码、文档以及论文本身