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

如何将fastText词向量以数值形式存入DataFrame用于后续计算?

解决fastText词向量存入DataFrame及均值计算问题

关于词向量维度的疑问

fastText的get_word_vector返回的是一维numpy数组(shape=(300,),ndim=1),这是完全正常的。单条词向量本质就是300个数值组成的一维序列,并非二维矩阵,所以用arr.ndim得到1是正确的。如果后续需要二维格式(比如(1,300)),可以用arr.reshape(1, -1)转换,但大多数场景下没必要。

方案1:拆分词向量为多列存入(推荐,便于后续计算)

把每个词向量的300个维度拆成单独的列,这样计算均值会更直观,也符合DataFrame的数值型数据存储逻辑:

import pandas as pd
import numpy as np

# 提取word_sg的词向量,拆分为300列
vec_cols = [f"vec_{i}" for i in range(300)]
full_forms[vec_cols] = full_forms.apply(lambda row: pd.Series(ft.get_word_vector(row["word_sg"])), axis=1)

# 同理处理word_vec_pl对应的词向量(假设原列名为word_pl)
pl_vec_cols = [f"pl_vec_{i}" for i in range(300)]
full_forms[pl_vec_cols] = full_forms.apply(lambda row: pd.Series(ft.get_word_vector(row["word_pl"])), axis=1)

# 计算每个维度的均值,生成300个均值列
for i in range(300):
    full_forms[f"avg_{i}"] = full_forms[[vec_cols[i], pl_vec_cols[i]]].mean(axis=1)

方案2:保留数组列,正确计算均值

如果不想拆分列,需要把多个列的一维数组堆叠成二维数组后再求均值,修正你之前的错误代码:

# 修正后的均值计算代码
full_forms["average"] = full_forms.apply(lambda row: np.mean([row["word_vec"], row["word_vec_pl"]], axis=0), axis=1)

你之前的代码失败原因是:row["word_vec":"word_vec_pl"]返回的是包含两个一维数组的Series,直接调用.mean(axis=0)无法对数组元素进行数值计算,需要先将这些数组组合成一个二维数组(用np.mean([arr1, arr2], axis=0)),再按行维度求均值。

内容的提问来源于stack exchange,提问作者Ana Ya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:42:42