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

时间:2016-10-25 18:27:34

标签: text lda topic-modeling

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

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

具体来说,我想抓一个媒体API来查找与我原始语料库中包含的主题相关的新文章(样本外文档)。因为我正在进行“盲目搜索”,所以在每个新文档上运行LDA可能过于繁琐;大多数新文件都不包含该主题。

当然可以简单地检索包含LDA学习主题的大多数常用词中的一个或多个的新文档;然后将LDA应用于返回的文档以获得更大的信心。

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

我正在查看Topic Tiling算法,但不确定它们是否适用于此处。

1 个答案:

答案 0 :(得分:1)

我不认为您可以在不转换主题空间中的所有内容的情况下搜索主题空间。有人可能会争论如何创建在主题空间中返回相似性而不在主题空间中进行转换的函数(例如使用神经网络),但我认为这超出了问题的范围。

既然上面的内容并不是真的有用,那么可以想到很多方法可以比简单的关键字存在更好地生成候选者,我会写几个。

将主题用作文档

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

使用示例文档

您可以将每个主题的训练集中的k个文档用作示例,并计算这些文档与测试文档的相似性,以估算文档中主题的概率。

使用相似性散列

使用上述两种技术,您还可以使用locality sensitive hashing,例如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)