我们正在努力进行多类文本分类,以下是我们使用的过程。
1)我们使用自己的数据通过word2vec词嵌入创建了300个dim的向量,然后将该向量作为权重传递给LSTM嵌入层。
2)然后我们使用了一层LSTM层和一层致密层。
以下是我的代码:
input_layer = layers.Input((train_seq_x.shape[1], ))
embedding_layer = layers.Embedding(len(word_index)+1, 300, weights=[embedding_matrix], trainable=False)(input_layer)
embedding_layer = layers.SpatialDropout1D(0.3)(embedding_layer)
lstm_layer1 = layers.LSTM(300,return_sequences=True,activation="relu")(embedding_layer)
lstm_layer1 = layers.Dropout(0.5)(lstm_layer1)
flat_layer = layers.Flatten()(lstm_layer1)
output_layer = layers.Dense(33, activation="sigmoid")(flat_layer)
model = models.Model(inputs=input_layer, outputs=output_layer)
model.compile(optimizer=optimizers.Adam(), loss='categorical_crossentropy',metrics=['accuracy'])
请帮助我解决以下问题:
Q1)为什么在LSTM嵌入层中将词嵌入向量(300 dim's)作为权重?
Q2)我们如何知道LSTM层中神经的最佳数量?
Q3)您能解释一下LSTM算法中的单记录处理吗?
如果您需要更多有关此信息,请告诉我。
答案 0 :(得分:1)
Q1)为什么我们将单词嵌入向量(300 dim's)作为权重传递给 LSTM嵌入层?
以一种非常简单的方式,您可以将嵌入层视为一个查找表,该查找表将单词(由词典中的索引表示)转换为向量。它是可训练的图层。由于您已经训练过单词嵌入,而不是使用随机权重初始化嵌入层,因此可以使用已学习的向量对其进行初始化。
Embedding(len(word_index)+1, 300, weights=[embedding_matrix], trainable=False)(input_layer)
所以你在这里
您已通过300,因为它是您预先训练的模型的向量大小(embedding_matrix)
Q2)我们如何知道LSTM层中神经的最佳数量?
您已经创建了一个LSTM层,该层以300个大小的向量作为输入,并返回一个大小为300的向量。输出大小和堆叠LSTMS的数量都是超参数,这些参数是手动调整的(通常使用KFold CV)
Q3)您能否解释一下LSTM中的单记录处理 算法?
import numpy as np
from keras.preprocessing.text import one_hot
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten, LSTM
from keras.layers.embeddings import Embedding
from nltk.lm import Vocabulary
from keras.utils import to_categorical
training_data = [ "it was a good movie".split(), "it was a bad movie".split()]
training_target = [1, 0]
v = Vocabulary([word for s in training_data for word in s])
model = Sequential()
model.add(Embedding(len(v),50,input_length = 5, dropout = 0.2))
model.add(LSTM(10, dropout_U = 0.2, dropout_W = 0.2))
model.add(Dense(2,activation='softmax'))
model.compile(loss = 'categorical_crossentropy', optimizer='adam',metrics = ['accuracy'])
print(model.summary())
x = np.array([list(map(lambda x: v[x], s)) for s in training_data])
y = to_categorical(training_target)
model.fit(x,y)