我有一个电影评论数据集,该数据集有两列Review(Sentences)和Sentiment(1或0)。
我想使用word2vec进行嵌入并使用CNN进行分类来创建分类模型。
我一直在youtube上寻找教程,但它们所做的只是为每个单词创建矢量,并向我展示相似的单词。像这样-
model= gensim.models.Word2Vec(cleaned_dataset, min_count = 2, size = 100, window = 5)
words= model.wv.vocab
simalar= model.wv.most_similar("bad")
我已经有了我的因变量(y),这是我的'情感'栏,我需要的是可以传递给CNN模型的自变量(X)。
[在使用word2vec之前,我使用了单词袋(BOW)模型,该模型生成了一个稀疏矩阵,这是我的自变量(X)。如何使用word2vec实现类似的功能?
如果我做错了,请纠正我。
要获取单词向量,您必须执行以下操作:
model['word_that_you_want']
如果您在模型中找不到给定的单词,您可能还想处理可能出现的KeyError
。您可能还想读一下embedding layer
是什么,它通常用作神经网络的第一层(通常用于NLP),基本上是一个单词到其对应单词矢量的查找映射。
要获取整个句子的单词向量,您首先需要将零的一个numpy数组初始化为所需的维度。
您需要其他变量,例如最长句子的长度,以便可以将所有句子填充到该长度。 Keras的pad_sequences
方法的文档是here。
获得单词向量的句子的简单示例是:
import numpy as np
embedding_matrix = np.zeros((vocab_len, size_of_your_word_vector))
如果遍历嵌入矩阵的索引并添加到它,如果在模型中找到单词向量,则添加到它。
[我使用这个resource,其中有很多示例,我从那里的代码中引用(有时我自己也使用过它:):
embedding_matrix = np.zeros((vocab_length, 100))
for word, index in word_tokenizer.word_index.items():
embedding_vector = embeddings_dictionary.get(word)
if embedding_vector is not None:
embedding_matrix[index] = embedding_vector
我希望这会有所帮助。