尝试从word2vec创建嵌入矩阵时,任何有效的解决方案?

时间:2019-03-17 20:55:46

标签: python word2vec word-embedding neura

当我尝试从word2vec嵌入向量创建嵌入矩阵时,我遇到了一个非常奇怪的问题,创建这样的矩阵花了我很长时间,而且我弄清楚了为什么。但是,我的目标是创建word2vec嵌入矩阵以构建嵌入层并将其用于训练CNN

这是我尝试过的:

import gensim
import numpy as np
import string
import gensim
from gensim.models import Word2Vec
from gensim.utils import simple_preprocess
from gensim.models.keyedvectors import KeyedVectors

word2vec = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True)

word2vec.syn0.shape[0]     // 300000
word2vec.syn0.shape[1]     // 300
word2vec.syn0.shape        // (3000000, 300)

这是矩阵表示中的原始原始文本:

word2vec.syn0 ->

array([[ 1.1291504e-03, -8.9645386e-04,  3.1852722e-04, ...,
        -1.5640259e-03, -1.2302399e-04, -8.6307526e-05],
       [ 7.0312500e-02,  8.6914062e-02,  8.7890625e-02, ...,
        -4.7607422e-02,  1.4465332e-02, -6.2500000e-02],
       [-1.1779785e-02, -4.7363281e-02,  4.4677734e-02, ...,
         7.1289062e-02, -3.4912109e-02,  2.4169922e-02],
       ...,
       [-1.9653320e-02, -9.0820312e-02, -1.9409180e-02, ...,
        -1.6357422e-02, -1.3427734e-02,  4.6630859e-02],
       [ 3.2714844e-02, -3.2226562e-02,  3.6132812e-02, ...,
        -8.8500977e-03,  2.6977539e-02,  1.9042969e-02],
       [ 4.5166016e-02, -4.5166016e-02, -3.9367676e-03, ...,
         7.9589844e-02,  7.2265625e-02,  1.3000488e-02]], dtype=float32)

这是我建立数组的方式:

embeddings = np.zeros((word2vec.syn0.shape[0] + 1, word2vec.syn0.shape[1]), dtype = "float32")

问题

下面的代码在我的计算机上花费了大量时间,我正在寻找另一种方法。

embeddings[:word2vec.syn0.shape[0]] = word2vec.syn0

由于我是初学者使用word2vec嵌入,所以我不知道从word2vec嵌入创建嵌入层的最佳方法是什么。如果上述行代码可以通过某种方式进行优化,或者等效于使用glove嵌入,我会对此感到满意。如果上面的过程可以很好地处理,我将在下面执行此操作以创建嵌入矩阵并从中构建嵌入层。

这是我上面代码的续篇:

MAX_TOKENS = word2vec.syn0.shape[0]
embedding_dim = word2vec.syn0.shape[1]
hidden_dim_1 = 200
hidden_dim_2 = 100
NUM_CLASSES = 10

embedder = Embedding(MAX_TOKENS + 1, embedding_dim, weights = [embeddings], trainable = False)

是否有任何方法可以优化上述代码以从word2vec构建嵌入层?谁能提供可能的技巧来做到这一点?有想法吗?

更新

如果glove等效,我也可以使用word2vec嵌入的解决方案。有什么可行的解决方案吗?

更新2

之所以提出这一点,是因为我对训练NN模型时使用word2vec嵌入感到好奇。我在先前的解决方案中使用了glove嵌入,但是word2vec在我的机器上完全是灾难。也许,我需要缩小到与数据集相等的大小。如何缩小比例?那可行吗?我的训练数据暗淡为(10240, 6)。有想法吗?

0 个答案:

没有答案