Python Doc2vec:如何手动修改Doc2vec gensim模型中的训练向量?

Python Doc2vec:如何手动修改Doc2vec gensim模型中的训练向量?,python,vector,doc2vec,Python,Vector,Doc2vec,我想用另一个具有不同权重的Doc2Vec模型替换由Doc2Vec模型创建的特定Doc2Vec向量 这些是现有向量的权重(仅为800个真实权重中的一部分): 我想用这些来代替它们: array([ 1.54585496e-01, 2.22857013e-01, -8.88102770e-01, -9.27794874e-01, -1.27402091e+00, -5.38651831e-04, -1.63646400e-01, 3.38727772e-01, 8.

我想用另一个具有不同权重的Doc2Vec模型替换由Doc2Vec模型创建的特定Doc2Vec向量

这些是现有向量的权重(仅为800个真实权重中的一部分):

我想用这些来代替它们:

array([ 1.54585496e-01,  2.22857013e-01, -8.88102770e-01, -9.27794874e-01,
       -1.27402091e+00, -5.38651831e-04, -1.63646400e-01,  3.38727772e-01,
        8.28402698e-01, -2.29774594e-01,  6.77914560e-01, -1.04013634e+00,
       -1.37407500e-02,  1.48667252e+00,  5.83136305e-02, -3.88587236e-01]
      dtype=float32)
我尝试使用以下代码向我的模型添加新向量:

model = gensim.models.Word2Vec.load('mymodel.doc2vec')
model.docvecs.add(entities=["88763"], weights=[new_vector])
我没有收到任何错误,但当我回拨“88763”向量时,我发现它尚未更新:

model.docvecs["88763"]

array([ 1.72976881e-01,  2.44364753e-01, -9.90936995e-01, -1.03020036e+00,
       -1.41046381e+00,  1.00970473e-02, -1.84546992e-01,  3.77230316e-01,
        9.20825064e-01, -2.61079431e-01,  7.51454890e-01, -1.15353882e+00,
       -9.96422302e-03,  1.65010715e+00,  5.63869551e-02, -4.25169647e-01],
      dtype=float32)
谁能帮我个忙吗


谢谢。

不要加载带有“Word2Vec”的
Doc2Vec
模型。因此,将其加载为:

model = gensim.models.Doc2Vec.load('mymodel.doc2vec')
加载后,您应该能够通过直接分配到括号访问的条目来修改任何现有条目,例如:

model.docvecs['88763'] = new_vector
(主要使用
add()
为尚未存在的键添加向量。但是,如果除了实体列表和向量列表之外,还提供了非默认的
replace=True
参数,则也可以批量替换现有向量。)

更新:上述内容本应有效,但目前(2019年11月,
gensim-3.8.1
)还有一个问题无法解决

同时,要修改一个特定的现有向量,您可以对raw
vectors\u docs
属性进行操作,并查找索引位置以进行更改。例如:

slot = model.docvecs.int_index('88763', 
                               model.docvecs.doctags,
                               model.docvecs.max_rawint)
model.docvecs.vectors_docs[slot] = new_vector

你能分享你的
mymodel.doc2vec
或者我们可以测试的东西吗?通读一遍,它看起来可能是
model.docvecs['doc003']=new_vector
的形式,但是我必须看一些示例mymodel.doc2vec才能看到对象结构。非常感谢你的建议,但它仍然不起作用。事实上,即使我尝试了model.docvecs['88763']=model.docvecs['88763']*2向量替换在阿拉哈也没有发生,仔细看,我发现这些方法应该是有效的(分配给
[…]
-access或
添加(…,replace=True)
)尚未正确实现
.docvecs
对象(至少通过2019年11月最新的
gensim
版本,
gensim-3.8.1
)。我已经提交了一份bug报告,并将很快更新我的答案,并提供一个解决方案,直到修复为止。感谢您的帮助,我发现您目前还没有收到关于GH的任何答案。你认为我可以用另一种方法修改现有的向量吗?这对我的目的非常有帮助。我的“*Update*`”中的代码建议有什么错,使用这两步流程?它当前应该可以工作。非常抱歉,我没有阅读更新,但是我收到了这个错误:“int_index()缺少2个必需的位置参数:'doctags'和'max_rawint'”-->也许我必须以某种方式设置这些参数?
slot = model.docvecs.int_index('88763', 
                               model.docvecs.doctags,
                               model.docvecs.max_rawint)
model.docvecs.vectors_docs[slot] = new_vector