gpt4 book ai didi

python - 在 keras 中使用预训练的 gensim Word2vec 嵌入

转载 作者:太空狗 更新时间:2023-10-29 22:08:47 25 4
gpt4 key购买 nike

我在 gensim 中训练过 word2vec。在 Keras 中,我想用它来制作使用该词嵌入的句子矩阵。由于存储所有句子的矩阵非常占用空间和内存效率。所以,我想在 Keras 中制作嵌入层来实现这一点,以便它可以用于更多层(LSTM)。你能详细告诉我怎么做吗?

PS:和其他题不同,因为我用的是gensim训练word2vec,而不是keras。

最佳答案

假设您有以下需要编码的数据

docs = ['Well done!',
'Good work',
'Great effort',
'nice work',
'Excellent!',
'Weak',
'Poor effort!',
'not good',
'poor work',
'Could have done better.']

然后您必须像这样使用来自 Keras 的 Tokenizer 对其进行标记化,并找到 vocab_size

t = Tokenizer()
t.fit_on_texts(docs)
vocab_size = len(t.word_index) + 1

然后你可以将它编码成这样的序列

encoded_docs = t.texts_to_sequences(docs)
print(encoded_docs)

然后您可以填充序列,以便所有序列的长度都是固定的

max_length = 4
padded_docs = pad_sequences(encoded_docs, maxlen=max_length, padding='post')

然后使用word2vec模型制作embedding矩阵

# load embedding as a dict
def load_embedding(filename):
# load embedding into memory, skip first line
file = open(filename,'r')
lines = file.readlines()[1:]
file.close()
# create a map of words to vectors
embedding = dict()
for line in lines:
parts = line.split()
# key is string word, value is numpy array for vector
embedding[parts[0]] = asarray(parts[1:], dtype='float32')
return embedding

# create a weight matrix for the Embedding layer from a loaded embedding
def get_weight_matrix(embedding, vocab):
# total vocabulary size plus 0 for unknown words
vocab_size = len(vocab) + 1
# define weight matrix dimensions with all 0
weight_matrix = zeros((vocab_size, 100))
# step vocab, store vectors using the Tokenizer's integer mapping
for word, i in vocab.items():
weight_matrix[i] = embedding.get(word)
return weight_matrix

# load embedding from file
raw_embedding = load_embedding('embedding_word2vec.txt')
# get vectors in the right order
embedding_vectors = get_weight_matrix(raw_embedding, t.word_index)

一旦你有了嵌入矩阵,你就可以像这样在Embedding层中使用它

e = Embedding(vocab_size, 100, weights=[embedding_vectors], input_length=4, trainable=False)

这一层可以用来制作这样的模型

model = Sequential()
e = Embedding(vocab_size, 100, weights=[embedding_matrix], input_length=4, trainable=False)
model.add(e)
model.add(Flatten())
model.add(Dense(1, activation='sigmoid'))
# compile the model
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['acc'])
# summarize the model
print(model.summary())
# fit the model
model.fit(padded_docs, labels, epochs=50, verbose=0)

所有代码均改编自this很棒的博客文章。关注它以了解更多关于使用 Glove 的嵌入

有关 word2vec 的使用,请参阅 this发布

关于python - 在 keras 中使用预训练的 gensim Word2vec 嵌入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52126539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com