如何使用主题模型 (LDA) 输出来匹配和检索新的、相同主题的文档

How to use Topic Model (LDA) output to match and retrieve new, same-topic documents

我在语料库上使用 LDA 模型来学习其中涵盖的主题。我正在使用 gensim 包(例如 gensim.models.ldamodel.LdaModel);如果需要,可以轻松使用其他版本的 LDA。

我的问题是,使用参数化模型 and/or 主题词或主题 ID 查找和检索包含该主题的新文档的最有效方法是什么?

具体来说,我想抓取媒体 API 以查找与我的原始语料库中包含的主题相关的新文章(样本外文档)。因为我这样做'blind search',运行每个新文档上的LDA可能太麻烦了;大多数新文档将不包含该主题。

当然可以简单地检索包含LDA学习主题的一到n个最常用词的新文档;然后将 LDA 应用于返回的文档以获得进一步的信心。

我想知道是否有更复杂的方法可以更好地确信新的样本外文章实际上包含相同的主题;而不是巧合地包含一个或两个主题词。

正在查看主题平铺算法,但不确定它们是否适用于此。

我不认为你可以在主题 space 中搜索而不转换主题 space 中的所有内容。有人可能会争论创建 return 主题相似性 space 而不转换主题 space 的函数(例如使用神经网络),但我认为这超出了问题的范围.

现在,由于上面的方法并不是很有用,所以有很多方法可以产生比简单的关键字存在更好的候选人,我将写几个。

将主题用作文档

主题只是单词的分布,因此您可以将它们用作文档并计算它们与测试文档之间的余弦相似度,以估计文档中主题的概率。

使用示例文档

您可以使用来自每个主题的训练集中的 k 个文档作为示例,并计算这些文档与测试文档的相似度,以估计该主题在文档中的概率。

使用相似性哈希

通过上述两种技术,您还可以使用 locality sensitive hashing, for instance simhash,更有效地从大型语料库中生成候选词。

为了让我的最后一点更清楚,我将使用以下管道(伪 python)

# t is a topic
ht = simhash(t) # few bits here
candidates = []
final_texts = []
for text in new_texts:
    if simhash(text) == ht:
        candidates.append(text)
for text in candidates:
    topic_distribution = lda.infer(text)
    if argmax(topic_distribution) == t:
        final_textx.append(text)