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

如何在Python中生成Word2Vec向量?训练后转换DataFrame方法

如何将分词后的DataFrame转换为Word2Vec文档向量

嘿,我来帮你搞定这个问题~ Word2Vec本身并没有像一些文本分类模型那样自带transform方法,因为它本质上是训练词向量的,而你需要的是把整个文档(也就是每一行的分词列表)转换成文档向量,这得我们自己来实现一下,其实并不复杂。

核心思路

Word2Vec只给每个单独的词生成了向量,文档向量需要把当前文档里所有词的向量做聚合计算,最常用的方式是取平均值(当然你也可以用加权平均、最大值等方式,这里先讲最通用的平均法)。

具体实现步骤

  1. 首先,我们可以通过model.wv获取训练好的词向量集合,它包含了所有满足min_count要求的词对应的向量。
  2. 写一个辅助函数,输入一个分词列表,返回对应的文档向量:
import numpy as np

def get_doc_vector(tokens, word2vec_model, feature_dim):
    # 初始化一个全0的向量,维度和你训练时设置的size一致
    doc_vector = np.zeros(feature_dim, dtype="float32")
    valid_token_count = 0
    
    # 遍历每个分词,累加存在于词向量中的词的向量
    for token in tokens:
        if token in word2vec_model.wv:
            doc_vector += word2vec_model.wv[token]
            valid_token_count += 1
    
    # 如果有有效词,就取平均值;否则保持全0向量
    if valid_token_count > 0:
        doc_vector /= valid_token_count
    
    return doc_vector
  1. 把这个函数应用到你的DataFrame的token列上,生成文档向量列:
# 这里的num_features就是你训练Word2Vec时设置的size参数
df["doc_vector"] = df["token"].apply(
    lambda x: get_doc_vector(x, model, num_features)
)

额外说明

  • 如果你想追求更高的效率,可以用列表推导式代替apply:
doc_vectors = [get_doc_vector(tokens, model, num_features) for tokens in df["token"]]
df["doc_vector"] = doc_vectors
  • 除了平均法,你也可以尝试其他聚合方式,比如用TF-IDF权重对词向量做加权平均,或者取每个维度的最大值,这取决于你的业务需求。
  • 注意:训练时设置的min_count参数会过滤掉低频词,这些词不会出现在model.wv中,所以在生成文档向量时会被自动忽略。

内容的提问来源于stack exchange,提问作者Jerry George

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:03:39