我正在尝试为自然语言处理问题创建LSTM网络。作为学习的玩具示例,我试图从Facebook消息内容预测喜欢的数量,因此回归(预测数字)而不是分类。
输入数据由24000个项目组成,每个项目如下所示:
[[361], [587], [26], [1], [3], [2], [1], [918], ..., [0], [0], [0]]
每个数字对应一个不同的单词,短消息用零填充。我认为NLP是一种非常标准的方法。
目标是24000个数字,每个数字对应于相应消息的喜欢数量:
[3847, 1094, 633, 969, 4374, 1583, 350, 647, 22, 9, 886, 109, 629, 782, 831, ...]
我正在编写一个试图适应这种情况的LSTM网络:
model = keras.models.Sequential()
model.add(keras.layers.LSTM(MSG_LEN, return_sequences=True, batch_input_shape=(50, MSG_LEN, 1), activation='tanh'))
model.add(keras.layers.Dropout(0.2))
model.add(keras.layers.LSTM(int(MSG_LEN / 2), return_sequences=False, batch_input_shape=(50, MSG_LEN, 1), activation='tanh'))
model.add(keras.layers.Dropout(0.2))
model.add(keras.layers.Dense(1, activation='tanh'))
model.compile(optimizer='adam',
loss='mse')
model.fit(data['training_set']['data'], data['training_set']['target'],
verbose=1,
validation_data=(data['test_set']['data'],
data['test_set']['target']),
nb_epoch=10,
batch_size=50)
predicted = model.predict(data['test_set']['data'],
batch_size=50)
现在预测应该包含一个数字数组,每个数字都预测相应的test_set消息。
预测看起来像这样:
[[ 0.99999225], [ 0.99999231], [ 0.99999225], [ 0.99999225], [ 0.99999225], [ 0.99999225], [ 0.99999225], ...]
现在,我不希望得到真正有用的结果。预测Facebook喜欢可能不是一个好主意,但考虑到测试目标是从0到100000的整数,我预计预测的数据也会在相似的范围内。
有什么明显的错误吗?这是否过度拟合?我错过了一些基本的东西吗?