Python 如何在Keras中使用自己的单词嵌入和预先训练的嵌入,如word2vec

Python 如何在Keras中使用自己的单词嵌入和预先训练的嵌入,如word2vec,python,keras,nlp,lstm,word-embedding,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 model = Sequential() model.add(Embedding(max_features, embeddings_dim, input_length=max_sent_len, weights=[embedding_weights])) m

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

word emo1 emo2 emo3
w1   0.5   0.3  0.2
w2   0.8   0    0
w3   0.2   0.5  0.2
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) 
Embedding(n_in, n_out, trainable=False, weights=[weights])
这个共现矩阵非常庞大,有
1584755
行和
621
列。我在
Keras
中有一个
Sequential()LSTM
模型,其中我使用预训练(word2vec)单词嵌入。现在我想使用共生矩阵作为另一个嵌入层。我该怎么做?我当前的代码是这样的:

word emo1 emo2 emo3
w1   0.5   0.3  0.2
w2   0.8   0    0
w3   0.2   0.5  0.2
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) 
Embedding(n_in, n_out, trainable=False, weights=[weights])

另外,如果共生矩阵是稀疏的,那么在嵌入层中使用它的最佳方式是什么

您可以使用
嵌入层
设置自己的权重矩阵,如下所示:

word emo1 emo2 emo3
w1   0.5   0.3  0.2
w2   0.8   0    0
w3   0.2   0.5  0.2
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) 
Embedding(n_in, n_out, trainable=False, weights=[weights])
如果我理解正确,
weights
将是您的共现矩阵,
n_in
行数,
n_out
列数


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

好的,谢谢,但共生矩阵存储在csv文件中。如何将文件链接到嵌入?博客文章在嵌入中使用测试和训练数据,但我的测试和训练数据与矩阵不同。@AbuShoeb然后你必须在代码中加载
csv
,使用
pandas
numpy
。无法将文件直接“链接”到权重。