我想从文章中提取主题,测试文章是" https://julien.danjou.info/blog/2017/announcing-scaling-python"。
它是关于蟒蛇和疤痕的一个原因。我已经尝试过lsi和lda,大部分时间,lda似乎效果更好。但是它们的输出都不稳定。
当然,前三或五个关键字似乎达到了目标。 " python"," book",' project' (我不认为'项目'应该是一个有用的主题,并将其放在停用词列表中。),缩放或可扩展或openstack应该在关键字列表中,但根本不稳定。
主题列表和停用词列表可能会改善结果,但它不具备可扩展性。我必须为不同的域维护不同的列表。
所以这里的问题是,有没有更好的解决方案来改进算法?
num_topics = 1
num_words = 10
passes = 20
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)
答案 0 :(得分:1)
如果我理解正确,你有一篇文章,并希望你的模型向你解释它是什么。
但是,如果我没有误解某些东西,那么就可以在一个单一文档上训练你的LDA模型。所以,毕竟,你并没有真正提取主题,因为你只有一个主题。我不认为LDA是如何被使用的。通常,您需要在大型语料库(文档集合)上训练您的模型,例如所有英语维基百科文章或过去60年来使用一些两位或三位数主题编号的期刊中的所有文章。这通常是LDA开始获得电力的时候。
通常当我试图理解"通过了解其主题分布的文档,我将在大型语料库上训练模型,不一定直接连接到我试图查询的文档。这在您的文档很少和/或很短的情况下尤其有用,就像您的情况一样。
如果您希望您的文档在主题上有所不同,您可以在英语维基百科上训练LDA(这可以从[' apple',' banana',... ]到['回归',' probit',...])。
如果您知道要查询的所有文档都位于特定字段中,则可能会在此字段中对语料库中的LDA进行训练,从而获得更好的结果,因为与该字段相关的主题将更加精确地分离。在您的情况下,您可以在数十个/数百个Python相关书籍和文章上训练LDA模型。但这一切都取决于你的目标。
然后,您可以随时使用主题数量。对于非常大的语料库,您可以尝试100,200甚至1000个主题。对于较小的可能是5或10.