如何对多个文件使用infer_vector?

How to use infer_vector for more than one document?

我有一个训练有素的 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

迭代不起作用。还有其他方法吗?

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

vec_df = np.array(5,50)

...然后在你的循环中...

vec_df[i] = model.infer_vector(list_of_words)

...没有进一步重新分配给 vec_df 或索引-vec_df.

注意:

  • infer_vector()需要一个词表,应该和模型的训练文本一样pre-processed/tokenized,让token最大程度匹配. (不在模型中的单词将被默默地忽略。因此,如果模型是用所有小写标记训练的,但随后您尝试 .infer_vector(['Mikey', 'REALLY', 'LIKES', 'McDonalds']),模型中将丢失所有那些大写单词,所有这些都将被忽略,并且生成的向量将是一个随机初始化的向量,没有执行有效的推理。)

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