我将一个句子作为树形结构神经网络的输入,其中叶节点将是句子中单词的词向量。
该树将是二元化选区(请参阅二元与 n 元分支部分)解析树。
我正在尝试开发句子的语义表示。
问题是,由于每个句子都有不同的解析树和不同的长度,每个句子都有不同的神经网络。由于神经网络的这种不断变化的结构,我无法训练它。
但是本文使用基于选区和依赖的解析树开发了一个树结构的神经网络——
1) Kai Sheng Tai、Richard Socher 和 Christopher Manning从树形结构的长短期记忆网络改进语义表示
本文使用 CNN 来提取语义表示。
2) Nal Kalchbrenner 和 Phil Blunsom 的循环连续翻译模型。这张照片给出了一个粗略的想法。
可能的解决方案-
我可以将句子向量映射到固定数量的神经元,然后使用这些神经元创建树结构。例如,如果句子长度为 10,最大句子长度为 20,我可以创建一个 20 个神经元的固定维度层,然后(在这种特殊情况下)第一个词到前 2 个神经元,第二个词到第三个和第四个神经元等等。可以根据句子长度进行动态映射。
句子层到固定维数层的权重矩阵是固定的(权重应该保持为1)。没有偏见。
但我认为这种表示会有一些问题——例如——如果这句话“我有一个可爱的冰淇淋和一个糕点当甜点”。映射到固定维度层,它将变为“我有一个可爱的冰淇淋冰淇淋和一个用于甜点甜点的糕点……”。这意味着与较长的句子相比,较短的句子将对神经网络产生更深远的影响。这种对较短句子的偏见也应该在(序列生成器的)输出中产生重复的单词。如果我错了,有人可以纠正我吗?
我会欢迎更多的解决方案,尤其是那些不会消除句子中单词之间关系的解决方案。
我将使用 theano 和 python 来实现它。我正在考虑一种基于层的方法,并使用 theano.scan 迭代层以最终形成句子表示。