使用 Gensim word2vec 中先前训练的向量修改 .trainables.syn1neg[i]
Modifying .trainables.syn1neg[i] with previously trained vectors in Gensim word2vec
我的问题如下。
在我的代码中,我在训练之前但在 .build_vocab() 之后修改 .wv[word],这非常简单。只是不是那里的向量,而是为每个单词添加我的向量。
for elem in setIntersection:
if len(word_space[elem]) != 300:
print('here', elem) #cast it to the fire
sys.exit()
w2vObjectRI.wv[elem] = np.asarray(word_space[elem], dtype=np.float32)
其中setIntersection只是gensim word2vec和RandomIndexing训练的一组常用词。两者大小相同,均为 300。
现在我还想修改隐藏到输出层的权重,有人告诉我它们在 .trainables.syn1neg[i] 中,但这是我的问题,这个矩阵不是词可寻址的,只是没有名字的普通矩阵。我怎么知道我将在此矩阵中修改哪个字母?我还看到它们是用 0 初始化的,我只是在想这些权重是否在训练前没有重置?更清楚的是,如果我更改这些权重然后调用 train,它会使用我提供的权重吗?谢谢
for i in range(len(setIntersection)):
if len(word_space[setIntersection[i]]) != 300:
print('here', setIntersection[i]) #cast it to the fire
sys.exit()
w2vObjectRI.trainables.syn1neg[i] = np.asarray(word_space[setIntersection[i]], dtype=np.float32)
干杯,
佩德罗
在 Gensim 4.0+ 中,“隐藏到输出层”就在 w2v_model.syn1neg
中,而不是(现已删除的)子组件 .trainables
。
按照 Gensim 实现所基于的原始 word2vec.c
,这些权重开始训练为未初始化的零。
由于输出(预测词)节点与 input/projection 层中考虑的词汇表完全相同,因此行到词的对应关系与输入层完全相同,也就是被训练的词向量。 (以前在一个名为 .syn0
的数组中,最近称为 .vectors
。)
因此 w2v_model.wv.vectors
中槽 0 中的单词也是由 w2v_model.syn1neg[0]
提供的输出节点表示的单词。
在 Gensim 4.0+ 中,可以从 w2v_model.wv.key_to_index[word]
中读取这些字槽值。 (4.0 之前,我认为是 w2v_model.wv.vocab[word].index
。)
我的问题如下。
在我的代码中,我在训练之前但在 .build_vocab() 之后修改 .wv[word],这非常简单。只是不是那里的向量,而是为每个单词添加我的向量。
for elem in setIntersection:
if len(word_space[elem]) != 300:
print('here', elem) #cast it to the fire
sys.exit()
w2vObjectRI.wv[elem] = np.asarray(word_space[elem], dtype=np.float32)
其中setIntersection只是gensim word2vec和RandomIndexing训练的一组常用词。两者大小相同,均为 300。
现在我还想修改隐藏到输出层的权重,有人告诉我它们在 .trainables.syn1neg[i] 中,但这是我的问题,这个矩阵不是词可寻址的,只是没有名字的普通矩阵。我怎么知道我将在此矩阵中修改哪个字母?我还看到它们是用 0 初始化的,我只是在想这些权重是否在训练前没有重置?更清楚的是,如果我更改这些权重然后调用 train,它会使用我提供的权重吗?谢谢
for i in range(len(setIntersection)):
if len(word_space[setIntersection[i]]) != 300:
print('here', setIntersection[i]) #cast it to the fire
sys.exit()
w2vObjectRI.trainables.syn1neg[i] = np.asarray(word_space[setIntersection[i]], dtype=np.float32)
干杯,
佩德罗
在 Gensim 4.0+ 中,“隐藏到输出层”就在 w2v_model.syn1neg
中,而不是(现已删除的)子组件 .trainables
。
按照 Gensim 实现所基于的原始 word2vec.c
,这些权重开始训练为未初始化的零。
由于输出(预测词)节点与 input/projection 层中考虑的词汇表完全相同,因此行到词的对应关系与输入层完全相同,也就是被训练的词向量。 (以前在一个名为 .syn0
的数组中,最近称为 .vectors
。)
因此 w2v_model.wv.vectors
中槽 0 中的单词也是由 w2v_model.syn1neg[0]
提供的输出节点表示的单词。
在 Gensim 4.0+ 中,可以从 w2v_model.wv.key_to_index[word]
中读取这些字槽值。 (4.0 之前,我认为是 w2v_model.wv.vocab[word].index
。)