我想将由Doc2vec模型创建的特定Doc2Vec向量替换为另一个具有不同权重的模型。
这些是现有向量的权重(仅是800个实际权重中的一部分):
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)
我想用这些替换它们:
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)
有人可以以某种方式帮助我吗?
谢谢。
答案 0 :(得分:1)
不要使用“ Word2Vec”加载Doc2Vec
模型。因此,将其加载为:
model = gensim.models.Doc2Vec.load('mymodel.doc2vec')
加载后,您应该可以通过直接分配给方括号访问的条目来修改任何现有条目,例如:
model.docvecs['88763'] = new_vector
(您主要使用add()
来为尚不存在的键添加向量。但是,如果您提供非默认的replace=True
参数,也可以批量替换现有向量除了实体列表和向量列表。)
更新:上面的方法应该起作用,但是目前({2019年11月,gensim-3.8.1
)没有pending bug。
同时,要修改一个特定的现有向量,您可以对原始vectors_docs
属性进行操作,并查找索引位置以更改自己。例如:
slot = model.docvecs.int_index('88763',
model.docvecs.doctags,
model.docvecs.max_rawint)
model.docvecs.vectors_docs[slot] = new_vector