词嵌入教程( 三 )

< vocab_size:try:# 如果给定单词的嵌入存在 , 检索它并将其映射到单词 。embedding_matrix[index] = embeddings[word]except:pass构建和训练嵌入层和神经网络的代码应该稍作修改 , 以允许将嵌入矩阵用作权重 。
# 神经网络from keras.models import Sequentialfrom keras.layers import Embedding, Dense, Flattenmodel = Sequential()model.add(Embedding(input_dim = vocab_size,output_dim = glove_dim,input_length = sequence))model.add(Flatten())model.add(Dense(units = 3, activation = 'softmax'))model.compile(optimizer = 'adam', metrics = ['accuracy'], loss = 'categorical_crossentropy')# 加载我们预训练好的嵌入矩阵到嵌入层model.layers[0].set_weights([embedding_matrix])model.layers[0].trainable = False# 训练时权重不会被更新# 训练模型history = model.fit(X_train_seq, y_train, epochs = 20, batch_size = 512, verbose = 1)下面是我们预训练的模型在测试集中的性能指标 。
词嵌入教程文章插图
结论从两个模型的性能指标来看 , 训练嵌入层似乎更适合这个数据集 。
一些原因可能是1) 关于堆栈溢出的大多数问题都与IT和编程有关 , 也就是说 , 这是一个特定领域的场景 。
2) 45000个样本的大型训练数据集为我们的嵌入层提供了一个很好的学习场景 。