如何对多个文档使用infer_vector?

时间:2019-08-09 09:46:10

标签: doc2vec

我有一个训练有素的doc2vec模型。现在,我必须使用infer_vector为5个文档创建矢量。但是infer_vector可以一次为一个文档创建向量。如何发送所有5个句子并将结果附加到(5,50)数据帧中?

 def InferVector(prop,log,New_std_nested_list):
    Vec_df = np.array([])
    fname = (prop.get("Filepaths","Model_Saving_Path")+'model_July12_doc2vec_ELA.bin')
    model = Doc2Vec.load(fname)
    for i in range( 0, len(New_std_nested_list) ):
      temp = New_std_nested_list[i]
      vec = model.infer_vector([temp])
    Vec_df = np.append(Vec_df,vec)
    return Vec_df

迭代没有完成。还有其他方法吗?

1 个答案:

答案 0 :(得分:0)

由于一次只能推断一个向量,因此您必须在循环中多次调用它。但是您应该能够预分配numpy数组,并将每个结果分配到其适当的行中。例如:

vec_df = np.array(5,50)

...然后进入循环...

vec_df[i] = model.infer_vector(list_of_words)

......无需进一步分配给vec_dfvec_df的索引。

请注意:

  • infer_vector()需要一个单词列表,这些单词应该以与模型的训练文本相同的方式进行预处理/标记,以使标记最大程度地匹配。 (不在模型中的单词将被静默忽略。因此,如果模型使用所有小写字母进行训练,但是随后您尝试.infer_vector(['Mikey', 'REALLY', 'LIKES', 'McDonalds']),则模型中所有大写单词都将丢失,所有单词都将被忽略,并且产生的向量将是未执行有效推断的随机初始化向量。)

  • infer_vector()通常比默认的epochs受益更多,特别是对于较短的文本