Tensorflow-仍然稀疏的稀疏嵌入查找

时间:2018-11-07 20:22:01

标签: python tensorflow conv-neural-network text-classification

我正在使用Tensorflow用类似于Kim 2014的CNN实现文本分类器。 Tensorflow提供了tf.nn.embedding_lookup_sparse,它允许您将单词ID提供为稀疏张量。这很好,尤其是对于启用可变长度序列。但是,此功能需要在查找后执行“组合”步骤,例如“均值”或“求和”。这迫使它回到密集的张量空间。我不想做任何组合。我想将向量保持为稀疏表示,以便以后可以进行其他卷积。在TF中可以吗?

编辑:我想避免在嵌入查找之前填充输入。这是因为Tensorflow的嵌入查找会生成用于填充值的矢量,并且试图用零(see here)对其进行掩盖是一种麻烦。

1 个答案:

答案 0 :(得分:0)

我认为这个问题有两点困惑。首先,对于稀疏索引输入sp_ids的每一行,在整个嵌入ID集合中发生组合器操作。因此,如果sp_ids的形状为N x 1,则您sp_ids的每一行仅“组合”一个嵌入向量,这将只检索该嵌入向量(这就是我认为您是说你想要的。)

第二,返回值是输入每一行的嵌入向量。嵌入向量本身是一个密集向量,通过非常定义嵌入是什么以及TensorFlow嵌入操作所计算的内容。因此,此返回结果将始终很密集,这就是您想要的。稀疏的矩阵表示效率极低,因为无论是否发生任何“组合”操作,矩阵实际上都是密集的(充满密集的嵌入)。

您链接的研究论文似乎并没有采取任何特殊的方法论来导致稀疏嵌入向量的特殊情况,因此我在这里看不到期望或期望稀疏输出的原因。

也许我是不正确的,您能否提供更多有关为什么期望嵌入向量本身是稀疏向量的详细信息?如果是这样,那将是非常不寻常的情况。