【问题标题】:How to manually change the vector dimensions of a word in Gensim Word2Vec如何在 Gensim Word2Vec 中手动更改单词的向量维度
【发布时间】:2018-03-20 18:02:07
【问题描述】:

我有一个包含大量词向量的 Word2Vec 模型。我可以这样访问一个词向量。

word_vectors = gensim.models.Word2Vec.load(wordspace_path)
print(word_vectors['boy'])

输出

[ -5.48055351e-01   1.08748421e-01  -3.50534245e-02  -9.02988110e-03...]

现在我有了一个合适的向量表示,我想用它替换 word_vectors['boy']。

word_vectors['boy'] = [ -7.48055351e-01   3.08748421e-01  -2.50534245e-02  -10.02988110e-03...]

但是抛出以下错误

TypeError: 'Word2Vec' object does not support item assignment

是否有任何时尚或解决方法可以做到这一点?那是在训练模型后手动操作词向量吗?是否可以在除 Gensim 之外的其他平台上使用?

【问题讨论】:

    标签: python vector gensim word2vec vector-space


    【解决方案1】:

    由于 word2vec 向量通常仅由迭代训练过程创建,然后被访问,gensim Word2Vec 对象不支持通过其词索引直接分配新值。

    但是,就像在 Python 中一样,它的所有内部结构都完全可以被您查看/篡改,而且由于它是开源的,您可以准确地查看它是如何完成所有现有功能的,并将其用作模型关于如何做新事物。

    具体来说,原始词向量(在最新版本的 gensim 中)存储在名为 wvWord2Vec 对象的属性中,而此 wv 属性是 KeyedVectors 的一个实例。如果你查看它的源代码,你可以看到通过字符串键(例如'boy')对词向量的访问,包括那些通过[]-通过__getitem__()方法实现的索引,通过它的方法word_vec()。您可以在本地安装或 Github 中查看该方法的源代码:

    https://github.com/RaRe-Technologies/gensim/blob/c2201664d5ae03af8d90fb5ff514ffa48a6f305a/gensim/models/keyedvectors.py#L265

    你会看到这个词实际上被转换为整数索引(通过self.vocab[word].index),然后用于访问内部syn0syn0norm 数组(取决于用户访问的是原始数组还是单元数组-归一化向量)。如果您查看设置这些的其他地方,或者只是在您自己的控制台/代码中检查它们(就像通过word_vectors.wv.syn0),您会看到这些是numpy 数组,确实支持直接按索引赋值。

    所以,你可以通过整数索引直接篡改它们的值,就像通过:

    word_vectors.wv.syn0[word_vectors.wv.vocab['boy'].index] = [ -7.48055351e-01   3.08748421e-01  -2.50534245e-02  -10.02988110e-03...]
    

    然后,word_vectors.wv['boy'] 的未来访问将返回您更新的值。

    注意事项:

    • 如果您希望更新syn0norm,以获得正确的单位范数向量(在most_similar() 和其他操作中使用),最好先修改syn0,然后丢弃并重新计算syn0norm,通过:

    word_vectors.wv.syn0norm = None
    word_vectors.wv.init_sims()
    

    • 添加新词将需要更多涉及的对象篡改,因为这将需要增加syn0(用更大的数组替换它),并更新vocab dict

    【讨论】:

      猜你喜欢
      • 2017-07-10
      • 2016-12-04
      • 2019-07-02
      • 2017-10-09
      • 2021-06-26
      • 2019-10-15
      • 1970-01-01
      • 2018-12-10
      • 2018-08-18
      相关资源
      最近更新 更多