【问题标题】:How to generate independent(X) variable using Word2vec?如何使用 Word2vec 生成独立(X)变量?
【发布时间】:2020-02-08 17:42:22
【问题描述】:

我有一个电影评论数据集,它有两列 Review(Sentences) 和 Sentiment(1 or 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 实现类似的功能?

如果我做错了什么,请纠正我。

【问题讨论】:

  • 对不起,如果我没有完全理解您的问题。你想要词向量吗?
  • 我有每个单词的向量。我只是不知道如何将这些向量关联起来以获得适当的情绪,即好的(1)或坏的(0)。我必须将整个句子与一种情感联系起来,而不是一个词。

标签: python word2vec sentiment-analysis


【解决方案1】:

要得到词向量,你必须这样做:

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))

然后遍历 embedding_matrix 的索引并添加到​​它,如果你在你的模型中找到一个词向量。

我使用这个resource,它有很多示例,并且我已经引用了那里的一些代码(我有时自己也使用过):

embedding_matrix = np.zeros((vocab_length, 100))
for word, index in word_tokenizer.word_index.items():
    embedding_vector = model[word] # using your w2v model, KeyError possible
    if embedding_vector is not None:
        embedding_matrix[index] = embedding_vector

在你的模型中(我假设使用 Keras 的 Tensorflow)

embedding_layer = Embedding(vocab_length, 100, weights=[embedding_matrix], input_length=length_long_sentence, trainable=False)

我希望这会有所帮助。

【讨论】:

  • 我需要整个句子的向量而不是一个单词。例如“我喜欢这部电影”
  • @Bot 感谢您的澄清。我更新了我的答案。如果这回答了您的问题,请告诉我。
【解决方案2】:

Word2Vec 本身并不为文本(单词集)创建向量——只是单个单词。

但是,有时对于多词文本来说,一个不那么糟糕的向量是其所有词向量的平均值。

如果list_of_words 是文本中的单词列表,并且所有单词都在Word2Vec 模型中,那么获取这些单词向量平均值的简单方法是:

avg_vector_of_words = model.wv[list_of_words].mean(axis=0)

(如果某些单词不存在,您需要在尝试此操作之前对其进行过滤以避免KeyErrors。如果您想省略一些单词,或者使用单位规范的单词向量,或者单位-归一化最终向量,您需要更多代码。)

那么avg_vector_of_wordslist_of-words 文本的一个小而密集/“嵌入”的特征向量。

您可以将这些向量(每个文本一个)传递给另一个下游分类器,例如您的 CNN,这与您之前使用稀疏 BOW 向量的方式完全相似。

【讨论】:

  • 这就是我要找的东西
猜你喜欢
  • 2021-11-27
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
  • 1970-01-01
  • 2012-10-10
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多