知道主题的主题建模?

8
通常情况下,主题模型(如LDA、pLSI等)用于无监督地推断可能存在于一组文档中的主题。我想知道是否有任何想法可以将我的问题塞进LDA框架中,因为有非常好的工具可用于解决LDA问题。
为了全面起见,我有以下输入信息:
- 一组文档(来自同一生物体的DNA片段,其中每个片段都是一个文档)
- 在这种情况下,一个文档只能有一个主题
- 一组主题(来自其他生物体的DNA片段)
- 在这种情况下,单词是碱基三联体(暂时如此)
我想回答的问题是:对于当前文档,它的主题是什么?换句话说,对于给定的DNA片段,它最有可能来自哪个其他生物体(同一物种)?由于片段交换以来可能发生了突变等情况,因此两个片段不会完全相同。
这与传统的LDA模型的主要区别在于,我事先知道主题。
我的初始想法是采用pLSA模型(http://en.wikipedia.org/wiki/PLSA),并明确设置主题节点,然后执行标准EM学习(如果有一个可以处理具有潜在变量的贝叶斯参数学习的好库就好了...),随后使用任何算法进行推理(因为该模型是多叉树,所以算法不应该有影响)。
编辑:我想我已经解决了这个问题,对于可能会遇到这个问题的人,我发现你可以使用带标签的LDA,并将每个标签分配给每个文档。由于每个标签与一个主题具有一一对应关系,因此您实际上是在告诉算法:对于每个文档,请从此给定的主题集(即标签集)中选择主题,而不是自己编造主题。
2个回答

6

我有类似的问题,只是为了完整性我想分享我的解决方案。

  • 我也有一组文件(PDF文件,从1到200页不等),但我的文件内容是常规英文文本数据。
  • 一组已知主题(我的包括子主题,但我这里不会讨论这个)。与先前的示例不同,我可能需要多个主题标签。
  • 单词(标准英语,但我的语料库中包含命名实体和缩写词)

LDAesk方法:引导LDA

引导式LDA可为LDA分类别名添加词汇。如果您的最终决策有n个主题,则可以创建n个带有种子主题的引导式LDA算法,每个主题都包含组成其主题名称的关键字。例如:我想将“生物化学”和“物理学”归为已知主题。然后我用d = {0:['biochemsitry'],1:['physics']} 启动我的引导式LDA。如果您能确定它们,还可以使用其他引导词;但是,我正在使用的引导式LDA算法(Python版本)使得很容易找出给定主题的前n个单词。您可以仅使用基本种子单词运行引导式LDA,然后使用输出的前n个单词来考虑添加到主题中的更多单词。这些前n个单词也可能有助于我提到的另一种方法。

非LDAesk方法:~KNN

我最终采用的方法是使用单词嵌入模型(对我来说,word2vec比其他替代方案更好)为每个主题创建一个“主题向量”,该向量基于组成主题/子主题的单词。例如:我有一个生物化学类别和一个分子生物学子类别。最基本的主题向量只是Biochemistry、Molecular和Biology的word2vec向量的平均值。对于我想要确定其主题的每个文档,我将其转换为“文档向量”(与生成主题向量的维度和嵌入模型相同——在预处理时去除停用词后,仅计算文档中所有word2vec向量的平均值)。然后,我只需查找输入文档向量最接近的k个主题向量即可。我应该指出,通过更改组成主题向量的单词,可以手动调整此能力。可以潜在地使用我先前提到的引导式LDA模型来识别进一步的关键字。

值得注意的是,在使用标记数据进行测试时,我发现在不同语料库上测试这两种解决方案时,该~KNN方法比引导式LDA方法更好。


你有实现方法一的代码吗?我有类似的问题需要解决,正在考虑尝试方法一。 - satish silveri
1
我手头没有,但只要在谷歌上搜索guidedLDA,你就能找到需要的东西。关于它只有几篇文章,而且它们都很简单明了。 - Evan Mata

0
为什么不直接使用监督式主题模型呢?Jonathan Chang在R中的lda包中有一个相当不错的slda函数。还有一个非常有用的演示。只需安装该包并运行demo(slda)即可。

谢谢您的建议,但是监督式主题模型旨在解决一个略微不同的问题。问题的“监督”方面是不同的——在监督式LDA中,主题集仍然是潜在的,但您会得到与正确响应配对的文档。然而,在我的问题中,您将获得有关主题本身的监督信息(例如,允许的主题集),并被要求为每个输入文档分配主题分布。核心预测任务仍然是无监督的,因为我们没有关于哪些主题与哪些文档相关的信息。 - user1871183
哦,我们还知道每个主题的(经验)词分布。忘记加上了。 - user1871183

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接