如何在Keras中将自己的词嵌入与像word2vec这样的预训练嵌入一起使用

时间:2018-09-03 08:21:21

标签: python keras nlp lstm word-embedding

我在CSV文件中存储了一个共现矩阵,其中包含单词和表情符号之间的关系,如下所示:

word emo1 emo2 emo3
w1   0.5   0.3  0.2
w2   0.8   0    0
w3   0.2   0.5  0.2

这个共现矩阵很大,有1584755行和621列。我在Sequential() LSTM中有一个Keras模型,其中我使用了预先训练的(word2vec)词嵌入。现在,我想将共现矩阵用作另一个嵌入层。我怎样才能做到这一点?我当前的代码是这样的:

model = Sequential()
model.add(Embedding(max_features, embeddings_dim, input_length=max_sent_len, weights=[embedding_weights]))
model.add(Dropout(0.25))
model.add(Convolution1D(nb_filter=nb_filter, filter_length=filter_length, border_mode='valid', activation='relu', subsample_length=1))
model.add(MaxPooling1D(pool_length=pool_length))
model.add(LSTM(embeddings_dim))
model.add(Dense(reg_dimensions))
model.add(Activation('sigmoid'))
model.compile(loss='mean_absolute_error', optimizer='adam')
model.fit( train_sequences , train_labels , nb_epoch=30, batch_size=16) 

此外,如果同现矩阵稀疏,那么在嵌入层中使用它的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用Embedding层并按如下所示设置自己的权重矩阵:

Embedding(n_in, n_out, trainable=False, weights=[weights])

如果我对您的理解正确,weights将是您的同现矩阵,n_in是行数,n_out是列数。

您可以在this博客文章中找到更多信息和示例。