好的,因此通常使用主题模型(例如 LDA、pLSI 等)以无监督的方式推断可能出现在一组文档中的主题。我想知道是否有人对如何将我的问题硬塞进 LDA 框架有任何想法,因为有非常好的工具可用于解决 LDA 问题。
为了彻底起见,我将以下信息作为输入:
我要回答的问题是:对于当前文档,它的主题是什么?换句话说,对于给定的 DNA 片段,它最有可能来自哪个其他生物体(同一物种)?自从发生片段交换以来,可能存在突变等,因此两个片段不会相同。
这与经典LDA模型的主要区别在于我提前知道主题。
我最初的想法是采用 pLSA 模型 ( http://en.wikipedia.org/wiki/PLSA ) 并明确设置主题节点,然后执行标准的 EM 学习(如果只有一个像样的库可以处理贝叶斯参数)使用潜在变量学习......),然后使用任何算法进行推理(这应该无关紧要,因为无论如何模型都是多叉树)。
编辑:我想我已经解决了它,对于任何可能偶然发现的人。我发现您可以使用带标签的 LDA 并将每个标签分配给每个文档。由于每个标签都与一个主题一一对应,因此您实际上是在对算法说:对于每个文档,从给定的主题集(标签集)中选择主题,而不是自己编造。
我有类似的问题,只是想为了完整性而添加我要使用的解决方案。
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 方法更好。
归档时间: |
|
查看次数: |
2605 次 |
最近记录: |