为什么训练集不从单词转换为 Word2Vec Numpy 向量?

Why does the train set not transform from words to Word2Vec Numpy vectors?

在网上搜索时,我正在努力创建一个用于分析推文的 Keras 模型。然而,在我努力利用 LSTM 进行句子级别的情感分析时,我遇到了麻烦。

我的目标是使用输入矩阵,它是单词标记数组的 numpy 数组,为词汇词典编制索引,为我提供 numpy 向量,并用相应的单词向量替换单词。

有很多推文我想相应地替换。以下是一个 CSV 文件的代码段和一个预先准备好的 Word2Vec 词汇表,其中提取了一百万条推文,并且之前的模型 运行 成功。

x_train, x_test, y_train, y_test = train_test_split(np.array(data.head(n).tokens),np.array(data.head(n).Sentiment), test_size=0.2)

tweet_w2v = Word2Vec.load("vocaber.txt")
vocabul = tweet_w2v.wv.vocab
x_train=np.asarray(x_train)

vectorz=copy(x_train)
for k, v in vocabul.items():
        vectorz[x_train==k] = v
print(vectorz[1])

打印时输出看起来没有变化。

[02:05<00:00, 7942.71it/s] [u'it', u'happens', u'.', u"it's", u'just', u'his', u'phone', u'got', u'cut', u'off', u'so', u'ya']

编辑:

数据元素存储一百万行带有标记化情感文本的行。

Sentiment ItemID 日期 NO_QUERY SentimentSource SentimentText 0 1467810672 Mon Apr 06 22:19:49 PDT 2009 NO_QUERY scotthamilton 很沮丧,因为他无法通过发短信来更新他的 Facebook……并且可能因此而哭泣 今天也去学校了。废话! 0 1467810917 2009 年 4 月星期一 22:19:53 PDT 2009 NO_QUERY mattycus @Kenichan 为了球我跳了很多次。设法节省 50% 其余的超出范围

由于您可能希望在测试集上执行相同的词到向量替换,因此最好在 train/test 拆分之前对“数据”本身执行此操作。

当您这样做时,您需要迭代数据中的每个示例,而不是遍历词汇字典,然后根据对 Word2Vec 模型的查找替换这些示例中的每个标记 – not 只是它的 vocab 字典,它没有向量作为它的值。

也就是说,更像是 Python 列表理解:

data_vectors = [[tweet_w2v.wv(token) for token in each_example]
                for each_example in data.head(n).tokens]
# ...*then* do your split...
x_train, x_test, y_train, y_test = train_test_split(np.array(data_vectors),np.array(data.head(n).Sentiment), test_size=0.2)

请注意,根据每个示例中不同数量的标记,data_vectors此处转换后的示例向量数量也会有所不同。对于典型的后续机器学习步骤,您可能需要另一个步骤将所有示例转换为相同大小的向量——可能是通过将每个示例的所有标记向量平均在一起。但你还没有问过。