【问题标题】:How to use gensim's LDA to conduct text-retrievals from queries?如何使用 gensim 的 LDA 从查询中进行文本检索?
【发布时间】:2018-10-06 14:22:22
【问题描述】:

我正在尝试了解如何将 LDA 用于文本检索,我目前正在使用 gensim 的 LdaModel 模型来实现 LDA,此处为:https://radimrehurek.com/gensim/models/ldamodel.html

我已经设法确定了 k 个主题及其最常用的词,并且我知道 LDA 是关于主题的概率分布以及词在文档中这些主题中的分布方式,所以这很有意义。

也就是说,我不明白如何使用 LdaModel 来检索与搜索查询的字符串输入相关的文档,例如“节育的负面影响”。我尝试在搜索查询上推断主题分布,并使用 gensim 的相似性来查找搜索查询上的主题分布与语料库中的主题分布之间的相似性。MatrixSimilarity 来计算余弦相似度,如下所示:

lda = LdaModel(corpus, num_topics=10) index = similarities.MatrixSimilarity(lda[corpus]) query = lda[query_bow] sims = index[query]

但性能不是很好。我认为找到搜索查询的主题分布并没有太大意义,因为搜索查询中通常只有 1 个主题。但我不知道我还能如何在 gensim 上的 LdaModel 上实现它。任何建议都会非常感激,我是主题建模的新手,也许我错过了一些对我来说显而易见的东西?谢谢!

【问题讨论】:

    标签: gensim information-retrieval lda topic-modeling


    【解决方案1】:

    我认为您的文本查询长度太小和/或您的主题数量与查询长度的比率对于您想要实现的目标而言太小。

    如果您想使用 LDA 查找与给定查询相似的主题,在大多数情况下,每个查询确实需要多个主题才能呈现特定文档而不是整个文档部分。

    您上面的 LDA 模型只有 10 个主题,因此您在给定句子中找到多个主题的机会非常低。因此,我已经建议测试在 100 或 200 个主题上训练模型是否会使这变得更好。现在,您很有可能在一句话中涉及多个主题。

    下面是一个(过于简单化的)示例,说明为什么可以这样做:
    使用num_topics=10,您可能有主题:

    topic_1: "pizza", "pie", "fork", dinner", "farm",...
    topic_2: "pilot", "navy", "ocean", "air", "USA", ...
    ...
    

    现在如果你查询句子

    "Tonight at dinner I will eat pizza with a fork"
    

    您只会收到topic_1 作为回复

    但是,num_topics=200 您的主题可能是这样的

    topic_1: "pizza", "margherita", "funghi",...
    topic_2: "fork", "knife", "spoon",...
    topic_3: "dinner", "date", "lunch", ...
    

    所以同一个句子现在涵盖topic_1topic_2topic_3

    现在很大程度上取决于您的语料库,如果增加太多主题的数量会使输出良好。对于像英语维基百科这样大的东西,有 200 个主题有效。对于较小的语料库,这不清楚。

    即使有更多主题,我相信您的查询文本仍然可能太短。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-22
      相关资源
      最近更新 更多