You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用infer_vector批量生成多文档向量?Doc2Vec模型问题求助

如何批量使用Doc2Vec的infer_vector生成文档向量并转为(5,50)的DataFrame?

我已经训练好一个Doc2Vec模型,现在需要用infer_vector为5个文档生成向量,但infer_vector仅支持单次处理一个文档。请问如何批量传入这5个文档,将结果拼接为形状(5,50)的DataFrame?

我编写了如下代码,但循环无法正常运行:

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. np.append会破坏数组形状:每次调用np.append(Vec_df, vec)都会把新向量扁平化后追加到一维数组里,最终你得到的是长度为5*50=250的一维数组,而非期望的(5,50)二维数组。
  2. infer_vector的参数格式错误:如果New_std_nested_list里的每个temp已经是分词后的文档列表(比如["hello", "world", "doc2vec"]),那么model.infer_vector([temp])相当于把整个列表当成了一个单独的"词",这会导致生成的向量完全不符合预期——你应该直接传入temp本身。

修正后的代码

我们改用列表来收集每个文档的向量,最后统一转换为二维数组再生成DataFrame,这样既高效又能保证形状正确:

import numpy as np
import pandas as pd
from gensim.models.doc2vec import Doc2Vec

def InferVector(prop, log, New_std_nested_list):
    # 只加载一次模型,避免重复IO操作
    model_path = prop.get("Filepaths", "Model_Saving_Path") + "model_July12_doc2vec_ELA.bin"
    model = Doc2Vec.load(model_path)
    
    # 用列表批量收集向量
    document_vectors = []
    for doc_tokens in New_std_nested_list:
        # 关键:doc_tokens必须是分词后的词列表,比如["this", "is", "my", "document"]
        vec = model.infer_vector(doc_tokens)
        document_vectors.append(vec)
    
    # 转换为(5,50)的二维数组,再转为DataFrame
    vec_array = np.array(document_vectors)
    vec_df = pd.DataFrame(vec_array)
    
    return vec_df

额外说明

  • 如果你的New_std_nested_list里存储的是原始字符串文档而非分词列表,需要先对每个文档做分词处理,比如:
    # 示例:简单分词(实际场景建议用专业分词工具,比如jieba、nltk等)
    for raw_doc in New_std_nested_list:
        doc_tokens = raw_doc.split()  # 按空格拆分,根据你的需求调整
        vec = model.infer_vector(doc_tokens)
        document_vectors.append(vec)
    
  • 建议给infer_vector加上epochs参数(比如model.infer_vector(doc_tokens, epochs=20)),默认的epochs可能较少,生成的向量稳定性不足。

内容的提问来源于stack exchange,提问作者Jennifer Therese

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:44:45