Python 如何改进gensim的主题模型

Python 如何改进gensim的主题模型,python,gensim,topic-modeling,Python,Gensim,Topic Modeling,我想从文章中提取主题,测试文章是 这是一篇关于python和缩放的文章。我试过lsi和lda,大多数时候,lda似乎效果更好。但两者的产出并不稳定 当然,前三到五个关键词似乎达到了目标。python、book、“project”我认为“project”不应该是一个有用的主题,我会把它放在停止词列表中,缩放、可伸缩或openstack应该在关键字列表中,但一点也不稳定 主题列表和停止词列表可能会改善结果,但不可扩展。我必须为不同的域维护不同的列表 所以这里的问题是,有没有更好的解决方案来改进算法

我想从文章中提取主题,测试文章是

这是一篇关于python和缩放的文章。我试过lsi和lda,大多数时候,lda似乎效果更好。但两者的产出并不稳定

当然,前三到五个关键词似乎达到了目标。python、book、“project”我认为“project”不应该是一个有用的主题,我会把它放在停止词列表中,缩放、可伸缩或openstack应该在关键字列表中,但一点也不稳定

主题列表和停止词列表可能会改善结果,但不可扩展。我必须为不同的域维护不同的列表

所以这里的问题是,有没有更好的解决方案来改进算法

num_topics = 1
num_words = 10
passes = 20
lda模型演示代码,lsi的代码相同。 测试结果1 测试结果2
如果我理解正确,您有一篇文章,希望您的模型向您解释它是关于什么的

但如果我没有误解的话,您可以在一个文档和一个主题上培训您的LDA模型。因此,毕竟,您并没有真正提取主题,因为您只有一个主题。我不认为LDA是打算这样使用的。一般来说,你会希望在一个大型的文档语料库上训练你的模型,比如所有英文维基百科文章,或者过去60年中使用两位数或三位数主题号的期刊上的所有文章。这通常是LDA开始获得功率的时候

通常,当我试图通过理解文档的主题分布来理解文档时,我会在大型语料库上训练模型,而不一定直接连接到我试图查询的文档。这在文档很少和/或很短的情况下尤其有用,就像在您的案例中一样

如果你希望你的文档主题多样化,你可以在英文维基百科上训练LDA,让你的主题从[‘苹果’、‘香蕉’、…]到[‘回归’、‘概率’、…]。 如果您知道要查询的所有文档都位于某个特定字段中,那么在该字段的语料库上训练LDA可能会产生更好的结果,因为与该字段相关的主题将更精确地分离。在您的例子中,您可以在几十/几百本与Python相关的书籍和文章中训练LDA模型。但这一切都取决于你的目标


然后,您可以随时围绕主题的数量进行游戏。对于非常大的语料库,您可以尝试100、200甚至1000个主题。对于较小的可能是5或10

看起来,维基百科数据集只包含标题和正文,没有任何主题,也没有任何文章中的关键词。我不知道这里的主题是否与关键字的意思相同。在我的例子中,我想从任何特定的文章中提取主题关键字。通常一个文档包含一定数量的主题,例如100,每个主题被定义为所有关键字的分布,包括一些概率为0的关键字。因此,您应该有类似文档A的内容,包括12%的topic32,7%的topic7,等等,然后topic32包括5%的关键字Python,3%的关键字编程,1%的关键字pandas。。。一个主题只是一组关键字。关键字本身与主题无关。
for topic in lda.print_topics(num_words=num_words):
    termNumber = topic[0]
    print(topic[0], ':', sep='')
    listOfTerms = topic[1].split('+')
    for term in listOfTerms:
        listItems = term.split('*')
        print('  ', listItems[1], '(', listItems[0], ')', sep='')
        lda_list.append(listItems[1])
Dictionary(81 unique tokens: ['dig', 'shoot', 'lot', 'world', 'possible']...)
# lsi result
0:
  "python" (0.457)
  "book" ( 0.391)
  "project" ( 0.261)
  "like" ( 0.196)
  "application" ( 0.130)
  "topic" ( 0.130)
  "new" ( 0.130)
  "openstack" ( 0.130)
  "way" ( 0.130)
  "decided"( 0.130)

# lda result
0:
  "python" (0.041)
  "book" ( 0.036)
  "project" ( 0.026)
  "like" ( 0.021)
  "scalable" ( 0.015)
  "turn" ( 0.015)
  "working" ( 0.015)
  "openstack" ( 0.015)
  "scaling" ( 0.015)
  "different"( 0.015)
Dictionary(81 unique tokens: ['happy', 'idea', 'tool', 'new', 'shoot']...)
# lsi result
0:
  "python" (0.457)
  "book" ( 0.391)
  "project" ( 0.261)
  "like" ( 0.196)
  "scaling" ( 0.130)
  "application" ( 0.130)
  "turn" ( 0.130)
  "working" ( 0.130)
  "openstack" ( 0.130)
  "topic"( 0.130)
# lda result
0:
  "python" (0.041)
  "book" ( 0.036)
  "project" ( 0.026)
  "like" ( 0.021)
  "decided" ( 0.015)
  "different" ( 0.015)
  "turn" ( 0.015)
  "writing" ( 0.015)
  "working" ( 0.015)
  "application"( 0.015)