可变长度序列和描述的集合:一个搜索问题

数据挖掘 相似 主题模型 距离 顺序模式挖掘 向量空间模型
2022-02-12 00:16:26

我有一个棘手的问题,需要一些建议:

假设我有一个可变长度序列的集合,其中许多是独一无二的——想象一下国际象棋游戏的动作,例如

  1. d4 Nf6
  2. c4 g6
  3. NC3 Bg7
  4. e4 d6
  5. Nf3 OO
  6. Be2 c5
  7. OO Bg4

...

对于这个集合中的每个项目,我都有另一个由人类生成的描述集合(想想评论 - comment_1: "cool game", comment_2: "awesome sacrifice"

目标是挖掘评论和序列之间的关联,用人类可读的标签标记序列以进行搜索。

我已经考虑过用于标签生成+聚类/分组序列的主题建模,但我不知道如何做类似游戏聚类之类的事情。如果有帮助,我有数百万个序列示例。知道如何测量这样的序列之间的距离/相似性吗?某种嵌入?我考虑过尝试 word2vec / doc2vec 方法,但尚未测试。

理想情况下,我可以输入一个看不见的序列,并为此序列建议标签/人类可读的描述。

2个回答

虽然使用 one-hot 编码移动的 RNN 是可能的,但我建议您的模型需要更深入地理解国际象棋(或类似的复杂游戏),以便能够将评论与位置相关联。

我会对位置本身进行编码(例如,像Alpha-Zero论文中那样的分层表示),然后将它们通过 conv-RNN 来模拟对应于注释的位置之间的时间关系。(也许您可以找到一个预训练模型作为基准进行评估)。

我阅读了相当多的国际象棋评论,其中一个很常见的情况是,有单步棋的情况以及一次关于几步棋的评论(想想开局线或强制延续),这些评论相当离散(我的'移动 10 牺牲”和我的“移动 15 失误”与隐藏状态无关)。这使我认为,您实际上不是在尝试先分区然后嵌入在评论空间中移动,而不是 RNN 模型 - 然后导致模型首先是 RNN,它可以学习可能要评论的移动分区,然后另一个模型,可能是条件自动编码器,在(位置|评论)子序列上联合训练(此时你应该仍然有很多特征可以使用,所以不用担心信号弱)。

这里的“搜索”功能并不指向纯粹的深度学习模型,因为您想要查找位置的特定实例,而不是带有该注释的典型位置(即对潜在空间进行采样)。这使我认为您创建了一个明确的数据结构来将最终嵌入空间中的点映射到它们的位置。因此,如果您想搜索“Nice Sacrifice”,模型会在“评论空间”中找到最近的点,并使用余弦距离之类的方法返回这些游戏,或者最后一步是对(位置 | 评论)空间进行聚类。

无论哪种方式,有趣的问题,先尝试更简单的事情。

我对国际象棋符号知之甚少,但看起来您可以以某种方式将这些移动编码为成对的类别。然后,每一步都是您(输入)序列中的一个时间步长。您可以尝试做的是使用 seq2seq 模型将您的输入序列(游戏进程)映射到输出句子。我确实认为将您的输入建模为一个循环单元是非常有可能的,但预测原始文本输出可能很难正确提取,因为信号太细且难以捕获。您可以考虑将这些评论分类为几个类别并将其转化为 RNN 分类问题,这可能会带来更好的结果。