首页 文章

Keras LSTM用可变长度序列预测下一个单词

提问于
浏览
1

我有一组可变长度的序列,我想 Build 一个模型来预测给定过去许多令牌的下一个令牌 .

问题是,如何训练具有可变长度序列的模型?

我知道填充但是,有没有办法不预先指定窗口长度?

我还读到了关于使用 batch_size = 1 的内容 . 在这种情况下,train_X和train_Y应该是什么?如果我仅使用非常长序列的最后一个标记作为目标,则它将丢弃其中的所有子序列(即从0-> 1,0-> 2 .... 0-> N-1) . 我应该在喂LSTM之前手动创建所有这些子序列吗?

2 回答

  • 0

    是的,您可以在Keras中指定可变长度输入,即通过指定 input_shape=(None, features) ,其中 None 表示未知的时间步数 . 这是一个示例模型:

    in = Input(shape=(None, num_words)) # let's assume it is one-hot encoded words
    latent = Masking()(in) # sentences in same batch need to same length, padded
    latent = LSTM(latent_size)(latent) # skips masked timesteps
    out = Dense(num_words, activation='softmax')
    model = Model(in, out)
    model.compile(loss='categorical_crossentropy', optimizer='rmsprop')
    

    关键的一点是批量句子需要填充张量操作,但实际上不同的批次可以有不同的时间步长,允许你的模型处理不同长度的句子 .

  • -1

    在keras中,您需要平滑的输入形状,但您可以填充序列(例如填充0)以具有相同的大小 .

    LSTM采用3d输入:( batch_size,timesteps,features) . 时间步长代表单词,并以单个单词的表示为特征 . 假设您有20个单词的句子,并且句子的每个单词都表示为1000个元素的OneHot向量 . 对于单个句子,您的输入形状必须是(1,20,1000) . 您可以手动预处理数据以适应这些条件,或者您可以在keras中使用预先构建的功能来为您完成工作 . 你可以在这里找到所有这些功能:https://keras.io/preprocessing/text/

相关问题