好的,通常主题模型(例如LDA,pLSI等)用于以无人监督的方式推断可能存在于一组文档中的主题。我想知道是否有人对如何将我的问题转变为LDA框架有任何想法,因为有很好的工具可用于解决LDA问题。
为了彻底,我将以下信息作为输入:
我想回答的问题是:对于当前文档,它的主题是什么?换句话说,对于给定的DNA片段,它最有可能来自哪个其他生物(同一物种)?由于段的交换发生,可能会发生突变,因此这两个段不会相同。
这与经典LDA模型的主要区别在于我提前了解了主题。
我最初的想法是采用pLSA模型(http://en.wikipedia.org/wiki/PLSA)并明确设置主题节点,然后执行标准EM学习(如果只有一个像样的库可以处理潜在变量的贝叶斯参数学习。 ..),然后使用任何算法推断(这应该无关紧要,因为模型无论如何都是一个多树)。
编辑:我想我已经解决了这个问题,对于任何可能偶然发现这一点的人来说。我发现您可以使用带标签的LDA并将每个标签分配给每个文档。由于每个标签与主题一一对应,因此您有效地对算法说:对于每个文档,从该给定主题集(标签集)中选择主题,而不是自己编写。
答案 0 :(得分:0)
为什么不简单地使用有监督的主题模型。 Jonathan Chang在R中的lda软件包具有slda功能,相当不错。还有一个非常有用的演示。只需安装软件包并运行demo(slda)。
答案 1 :(得分:0)
我有一个类似的问题,只是出于完整性考虑,我想添加要使用的解决方案。
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方法更好。