6

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

为了彻底起见,我输入了以下信息:

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

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

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

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

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

4

2 回答 2

4

我有一个类似的问题,只是想为了完整起见我会添加我要使用的解决方案。

  • 我还有一组文档(pdf 文档从 1 到 200 页不等),尽管我的是常规的英文文本数据。
  • 一组已知主题(我的包括子主题,但我不会在这里讨论)。与前面的示例不同,我可能需要多个主题标签。
  • 单词(标准英语,虽然命名实体和首字母缩写词包含在我的语料库中)

LDAesk 方法:引导式 LDA

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

非 LDAesk 方法:~KNN

我最终做的是使用词嵌入模型(word2vec 在我的情况下优于替代品)根据构成主题/子主题的词为每个主题创建一个“主题向量”。例如:我有一个类别 Biochemistry 和一个子类别 Molecular Biology。最基本的主题向量只是 Biochemistry、Molecular 和 Biology 的 word2vec 向量全部平均在一起。对于我想要确定主题的每个文档,我将其转换为“文档向量”(与我制作主题向量的维度和嵌入模型相同 - 我发现只是平均文档中的所有 word2vec 向量一直是到目前为止,我的最佳解决方案,经过一些预处理,如删除停用词)。然后我只找到与输入文档向量最接近的 k 主题向量。我应该注意到有' 通过更改构成主题向量的单词来手动调整它的一些能力。一种可能识别更多关键字的方法是使用我之前提到的guidedLDA 模型。

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

于 2019-03-13T16:27:35.780 回答
0

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

于 2013-05-31T00:32:57.160 回答