Machine learning Keras中的序列标记

Machine learning Keras中的序列标记,machine-learning,deep-learning,keras,lstm,recurrent-neural-network,Machine Learning,Deep Learning,Keras,Lstm,Recurrent Neural Network,我正在研究句子标注问题。我自己做了嵌入和填充,我的输入看起来像: X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...], [0,0,0,0,0...], ....] Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...] 对于句子中的每个单词,我想预测四个类中的一个,所以我想要的输出应该如下所示: X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], .

我正在研究句子标注问题。我自己做了嵌入和填充,我的输入看起来像:

X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...],  [0,0,0,0,0...], ....]
Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...]
对于句子中的每个单词,我想预测四个类中的一个,所以我想要的输出应该如下所示:

X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...],  [0,0,0,0,0...], ....]
Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...]
我的简单网络架构是:

model = Sequential()

model.add(LSTM(input_shape = (emb,),input_dim=emb, output_dim=hidden, return_sequences=True))
model.add(TimeDistributedDense(output_dim=4))
model.add(Activation('softmax'))
    model.compile(loss='binary_crossentropy', optimizer='adam')

model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, validation_data=(X_test, Y_test), verbose=1, show_accuracy=True)
它在训练时显示了大约95%,但当我试图用训练过的模型预测新句子时,结果非常糟糕。看起来模特刚学了一些课,每次都会展示。我认为问题可能是:

  • 我自己写的填充(句末零向量),会让学习变得更糟吗

  • 我应该试着学习不同长度的句子,不加填充(如果是的话,你能帮助我如何在Keras中训练这样一个模型吗?)

  • 错误的学习目标,但我尝试了均方误差、二进制交叉熵和其他方法,它并没有改变

  • 关于
    timedistributedense
    softmax
    ,我想,我已经了解了它的工作原理,但仍然不能100%确定


  • 我很高兴看到任何关于这个问题的提示或帮助,谢谢

    我个人认为您误解了“序列标签”的含义

    你是说:

  • X
    是一个句子列表,每个元素
    X[i]
    是一个任意长度的单词序列
  • Y[i]
    X[i]
    的范畴,而
    Y[i]
    的一个热门形式是
    [0,1,0,0]
    类数组
  • 如果是,那就不是序列标签问题,而是分类问题


    不要使用
    timedistributedense
    ,如果这是一个多类分类问题,即
    len(Y[i])>2
    ,那么使用“
    categorical\u crossentropy
    ”而不是“
    binary\u crossentropy

    您尝试过退出LSTM吗?另外,你有没有尝试过lstm批量规范化?因为你有很高的训练集学习率,你可以用高辍学率来进行规范化,然后可能尝试多层lstmI,这是一个一次性的问题!您是否从word2vec模型中获得了您的输入?我的意思是你在X_中显示的每个子列表,我喜欢[0,1,1,0,2,3…]是一个单词的向量表示?我需要尽快回答这个问题!我可以知道你对为什么这不是序列标签问题的观点吗?我有一个相同的挑战,输入是单词的顺序,我需要每个单词的标签。这不是序列标签问题吗?