【问题标题】:how to improve topic model of gensim如何改进gensim的主题模型
【发布时间】:2017-06-22 17:39:25
【问题描述】:

我想从文章中提取主题,测试文章是“https://julien.danjou.info/blog/2017/announcing-scaling-python”。

这是一篇关于 python 和缩放的文章。我试过 lsi 和 lda,大部分时间, lda 似乎效果更好。但是两者的输出都不稳定。

当然,前三五个关键词似乎中了目标。 "python", "book", 'project' (我不认为 'project' 应该是一个有用的主题,并且会将它放在停用词列表中。),缩放或可扩展或 openstack 应该在关键字列表中,但不稳定全部。

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

那么这里的问题是,有没有更好的方案来改进算法?

num_topics = 1
num_words = 10
passes = 20

lda模型demo代码,lsi代码相同。

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])

测试结果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)

测试结果2

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)

【问题讨论】:

    标签: python gensim topic-modeling


    【解决方案1】:

    如果我理解正确,您有一篇文章并希望您的模型向您解释它的内容。

    但是,如果我没有误解的话,您可以在具有一个主题的单个文档上训练您的 LDA 模型。所以毕竟,您并没有真正提取主题,因为您只有一个主题。我不认为这就是 LDA 的用途。通常,您会希望在大型语料库(文档集合)上训练您的模型,例如所有英文维基百科文章或过去 60 年中使用一些两位或三位数字主题编号的期刊中的所有文章。这通常是 LDA 开始获得权力的时候。

    当我尝试通过了解其主题分布来“理解”文档时,我通常会在大型语料库上训练模型,而不必直接连接到我要查询的文档。这在您的文档很少和/或很短的情况下特别有用,例如您的情况。

    如果您希望您的文档主题多样,您可以在英文维基百科上训练 LDA(将您的主题从 ['apple', 'banana',...] 提供到 ['regression', 'probit' ,...])。
    如果您知道要查询的所有文档都位于特定领域,那么在该领域的语料库上训练 LDA 可能会产生更好的结果,因为与该领域相关的主题将被更精确地分开。在您的情况下,您可以在数十/数百本 Python 相关书籍和文章上训练 LDA 模型。但这一切都取决于你的目标。

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

    【讨论】:

    • 维基百科数据集似乎只包含标题和正文,任何文章中都没有主题(也称为关键字)。不知道这里的题目是不是跟关键词的意思是一样的。就我而言,我想从任何特定文章中提取主题(关键字)。
    • 通常一个文档包含一定数量的主题(例如100个),每个主题被定义为所有关键字的分布(包括一些概率为0的关键字)。所以你应该有类似文档 A 包含 12% 的 topic32、7% 的 topic7 等然后 topic32 由 5% 的关键字“Python”、3% 的关键字“programming”、1% 的关键字“pandas”、... A topic 只是关键字的集合。关键字本身与主题无关。
    猜你喜欢
    • 1970-01-01
    • 2013-11-06
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多