主题建模,但已知主题?

时间:2013-05-28 00:15:47

标签: topic-modeling

好的,通常主题模型(例如LDA,pLSI等)用于以无人监督的方式推断可能存在于一组文档中的主题。我想知道是否有人对如何将我的问题转变为LDA框架有任何想法,因为有很好的工具可用于解决LDA问题。

为了彻底,我将以下信息作为输入:

  • 一组文件(来自一个生物体的DNA片段,每个片段是一个文件)
    • 文档在此方案中只能有一个主题
  • 一组主题(来自其他生物的DNA片段)
  • 在这种情况下的单词是基数的三元组(现在)

我想回答的问题是:对于当前文档,它的主题是什么?换句话说,对于给定的DNA片段,它最有可能来自哪个其他生物(同一物种)?由于段的交换发生,可能会发生突变,因此这两个段不会相同。

这与经典LDA模型的主要区别在于我提前了解了主题。

我最初的想法是采用pLSA模型(http://en.wikipedia.org/wiki/PLSA)并明确设置主题节点,然后执行标准EM学习(如果只有一个像样的库可以处理潜在变量的贝叶斯参数学习。 ..),然后使用任何算法推断(这应该无关紧要,因为模型无论如何都是一个多树)。

编辑:我想我已经解决了这个问题,对于任何可能偶然发现这一点的人来说。我发现您可以使用带标签的LDA并将每个标签分配给每个文档。由于每个标签与主题一一对应,因此您有效地对算法说:对于每个文档,从该给定主题集(标签集)中选择主题,而不是自己编写。

2 个答案:

答案 0 :(得分:0)

为什么不简单地使用有监督的主题模型。 Jonathan Chang在R中的lda软件包具有slda功能,相当不错。还有一个非常有用的演示。只需安装软件包并运行demo(slda)。

答案 1 :(得分:0)

我有一个类似的问题,只是出于完整性考虑,我想添加要使用的解决方案。

  • 我也有一套文件(pdf文件范围从1到200 页),尽管我是常规的英文文本数据。
  • 一组已知主题(我的主题包括子主题,但在此不做介绍)。与前面的示例不同,我可能需要多个主题标签。
  • 单词(标准英语,尽管我的语料库中包含命名实体和首字母缩写词)

LDAesk方法:引导式LDA

引导的LDA可让您为LDA类别添加单词。如果您对最终决策有n个主题,则只需使用n个种子主题创建您的guidedLDA算法,每个主题都包含构成其主题名称的关键字。例如:我想归纳为“生物化学”和“物理学”的已知主题。然后,我用d = {0:['biochemsitry'],1:['physics']}播种我的向导LDA。如果可以识别其他指导词,则可以将其合并,但是我正在使用的guidedLDA算法(python版本)可以相对轻松地识别给定主题的前n个词。您可以只使用基本种子词运行一次guidedLDA,然后使用前n个词的输出来考虑将更多词添加到主题中。这些前n个单词也可能对我提到的其他方法有所帮助。

非LDAesk方法:〜KNN

我最终要做的是使用单词嵌入模型(word2vec优于我的案例的替代方法)基于构成主题/副主题的单词为每个主题创建“主题向量”。例如:我有一个类别为分子生物学的生物化学类别。最基本的主题向量只是将生化,分子和生物学的word2vec向量平均在一起。 对于我要为其确定主题的每个文档,我将其转换为“文档向量”(与我制作主题向量的方式相同的维度和嵌入模型-我发现仅对文档中所有word2vec向量求平均值就是经过一些预处理(例如删除停用词)后,到目前为止,这是我迄今为止的最佳解决方案)。然后,我只是找到输入文档向量中最接近k的主题向量。 我应该注意,通过更改构成主题向量的单词,有一些能力可以对其进行手动调整。潜在识别其他关键字的一种方法是使用我之前提到的guidedLDA模型。

我会注意到,当我在带有标记数据的另一语料库上测试这两个解决方案时(除了评估准确性等,我没有使用过),这种〜KNN方法证明比GuidedLDA方法更好。