如何将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
相关产品推荐
相关产品推荐

