我对LSTM模型中的输入向量感到困惑,我使用的数据是文本数据,例如1000个句子。关于LSTM输入层,我有两个问题:
1。如果我将这些句子标记成向量(我们可以称之为句子向量),那么在Keras中是否有一种方法可以在给定的文档中生成句子向量?应该是单词级别的,对吧?
2。第二个问题是LSTM中的3D张量类型。我有1000个句子(样本),如果我想让LSTM在每个时间步读取一个文档,time_step将是1,这是正确的吗?最后一个是输入维度,这个输入维度是每个句子中的单词维度(100)或者在每个时间步(10)中观察到多少个单词?
因此LSTM张量应该是(1000,1,10)或(1000,1,100)我不知道第一个问题的答案。我没有使用Keras的经验。但是,我有一些使用Tensorflow的经验。
对于第二个问题,你的意思是"我想在每个时间步上LSTM读取一个句子"吗?如果您的目的是处理句子序列,我相信这是您在使用LSTM时想要做的事情,那么您需要定义序列长度(在一个特定序列中处理的句子数量)。序列长度可以通过使用time_step来定义。所以设置time_step = 1是不正确的。如果你使用的是句子向量,那么最后一个就是句子嵌入的向量维数。例如,如果文档中有1000个句子,每个句子由大小为100的向量表示,序列长度为5(您希望在一个序列中处理最多5个句子),则张量维度将为(None, 5,100)。第一个是'None',这样你就可以决定以后你想要给网络提供多少个序列(小批量学习)。
输入格式为(nb_samples, time_steps, input_dim)。在你的例子中,样本的数量就是句子的数量。时间步长是句子中的单词数,因此这将是句子中具有最大单词数的单词数(其他句子必须填充以匹配此长度)。Input_dimension是用于表示每个单词的特征的数量。例如,如果您使用word2vec嵌入说100或200个维度(特征),那将是您的input_dimension。