主题建模,但具有已知主题?

use*_*183 5 topic-modeling

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

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

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

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

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

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

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

Eva*_*ata 6

我有类似的问题,只是想为了完整性而添加我要使用的解决方案。

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

LDAesk 方法:引导式 LDA

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

非 LDAesk 方法:~KNN

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

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


小智 0

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