我正在研究句子标签问题。我自己完成了嵌入和填充,我的输入看起来像:
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%,但是当我尝试使用训练有素的模型预测新句子时,结果真的很糟糕。看起来模型刚刚学习了一些关于第一个单词的类,并且每次都显示出来。我认为问题可以是:
自己写的padding(句尾零向量),会不会让学习变差?
我应该尝试学习不同长度的句子,没有填充(如果是的话,你能帮我如何在 Keras 中训练这种模型吗?)
错误的学习目标,但我尝试了均方误差、二元交叉熵等,它没有改变。
我认为带有
TimeDistributedDense
andsoftmax
的东西我已经知道它是如何工作的,但仍然不是 100% 确定。
我很高兴看到有关此问题的任何提示或帮助,谢谢!