特征向量作为RNN的输入

时间:2017-03-20 14:43:27

标签: python nlp

为了好玩,为了更深入地了解循环神经网络,我从头开始编写自己的基于RNN的语法依赖解析器。在这种情况下,每个句子都是一个单词序列,从中可以预测一系列解析器动作。

现在,如果每个单词只是用数字表示,那就不会有问题,因为在网络输入的维度和网络的输出之间会有一对一的映射。但是,在我的情况下,每个单词由N维单词嵌入表示,而每个预测的解析器动作是有限空间内的整数值。

这意味着我的网络需要接受一系列特征向量作为输入,然后输出一个整数序列。

目前(部分)我的初始化和转发代码如下所示:

def __init__(self, trans_dim, out_dim, feature_vec_size=1, hidden_dim=100, trunc=4):
    self.trans_dim = trans_dim
    self.hidden_dim = hidden_dim
    self.out_dim = out_dim
    self.trunc = trunc

    # U = input -> hidden weights
    self.U = np.random.uniform(-np.sqrt(1./trans_dim), np.sqrt(1./trans_dim), (hidden_dim, trans_dim))
    # V = hidden -> output weights
    self.V = np.random.uniform(-np.sqrt(1./hidden_dim), np.sqrt(1./hidden_dim), (out_dim, hidden_dim))
    # W = s1 -> s2 weights
    self.W = np.random.uniform(-np.sqrt(1./hidden_dim), np.sqrt(1./hidden_dim), (hidden_dim, hidden_dim))

def forward(self, steps):
    # Number of time steps
    t_steps = len(steps)
    print t_steps
    # The initial hidden
    states = np.zeros((t_steps + 1, self.hidden_dim))
    # Output at each time step
    output = np.zeros((t_steps, self.out_dim))

    # Looping through time steps
    for t in np.arange(t_steps):
        print steps[t]
        # This is where the problem is. Indexing U by steps[t] will not work when steps
        # contains floats.
        states[t] = np.tanh(self.U[:, steps[t]] + self.W.dot(states[t-1]))
        output[t] = self.softmax(self.V.dot(states[t]))

这导致了一个问题 - 如何让我的网络接受一系列特征向量作为输入,然后在每个时间步骤中输出表示解析器动作的整数序列?

如果这是一个愚蠢的问题我很抱歉;在神经网络方面,我只是一个新手,但我希望学习。任何帮助将不胜感激。

0 个答案:

没有答案