Keras 序列嵌入与时间序列特征的融合

Keras 序列嵌入与时间序列特征的融合,keras,lstm,word-embedding,sequence-to-sequence,Keras,Lstm,Word Embedding,Sequence To Sequence,我在Keras实施LSTM的某些方面遇到了问题。这是对我的问题的描述: 我正在尝试训练一个单词正确性预测模型。我的模型有两种类型的输入: 词序(句子) 和一系列特征向量(对于每个单词,我计算特征向量为6) 例如 input_1 = ['we', 'have', 'two', 'review'] input_2 = [ [1.25, 0.01, 0.000787, 5.235, 0.0, 0.002091], [ 0.0787, 0.02342, 5

我在Keras实施LSTM的某些方面遇到了问题。这是对我的问题的描述:

我正在尝试训练一个单词正确性预测模型。我的模型有两种类型的输入:

  • 词序(句子)
  • 和一系列特征向量(对于每个单词,我计算特征向量为6)
  • 例如

    input_1 = ['we', 'have', 'two', 'review'] 
    input_2 = [
               [1.25, 0.01, 0.000787, 5.235, 0.0, 0.002091], 
               [ 0.0787, 0.02342, 5.4595, 0.002091, 0.003477, 0.0], 
               [0.371533, 0.529893, 0.371533, 0.6, 0.0194156, 0.003297],
               [0.471533, 0.635, 0.458, 0.7, 0.0194156, 0.0287]
              ] 
    
     gives output = [1, 1, 2, 1]
    
    由于训练集中的每个句子都有不同的长度,我应该对所有句子进行零填充,使它们都具有相同的长度

    我的问题是第二个输入如何,我应该填充吗!怎么做?因为它们是向量

    模型架构:

    input1 = Input(shape=(seq_length,), dtype='int32')
    emb = Embedding(input_dim=num_words, output_dim = num_dimension, 
    input_length=seq_length, weights=[embeddings], mask_zero=True,trainable=False)(input_layer)
    
    input2 = Input(shape=(seq_length,6 ))
    x = keras.layers.concatenate([emb, input2],axis=2)
    
    lstm = LSTM(64, return_sequences=True)(x)
    ackwards = LSTM(128, return_sequences=True, go_backwards=True)(x)
    
    common = merge([forwards, backwards], mode='concat', concat_axis=-1)
    out = TimeDistributed(Dense(no_targets, activation='softmax'))(lstm)
    

    你在正确的轨道上,是的,你需要用零行填充第二个输入,以匹配句子长度。基本上是这样的:

    # Input 1
    X1 = [[12, 34, 3], [6, 7, 0]] # where numbers are word indices and 0 is padding
    # Input 2
    X2 = [[[1.23,...,2.4], [1.24, ...], [0.6, ...]], [[3.25, ...], [2.4, ...], [0,0,0,0,0]]]
    # So the padded words get zero feature vectors as well and the shapes match
    

    但是不要担心,因为您将
    emb
    input2
    连接起来,
    mask\u zero=True
    也会传播到连接的向量,因此LSTM实际上也会忽略第二个输入的填充。

    谢谢,即使我不确定,我也已经尝试过了。1个历元后,我的准确率达到75%。随着训练精度开始上升,更多的训练使验证精度开始下降——这是过度拟合的明显迹象。有什么想法吗?嗯,是的,你可以在LSTM中添加
    dropout=0.2
    ,以减少嵌入的过度拟合甚至脱落。另一种选择是只减少每个模型的单元数量,以减少模型的容量。