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

如何用Python/Word2Vec将词向量投影到‘男-女’与‘富-贫’双轴?

词向量投影到自定义坐标轴的正确实现

错误原因分析

你最后一行触发IndexError是因为Wp是一维数组(形状为(2,)),但你错误使用了二维索引(如Wp[0,2]),数组维度不匹配导致报错。此外,原代码里还存在拼写错误:model.wv['woma']应为model.wv['woman']。

正确实现方案

要将词向量投影到自定义的"贫-富"(X轴)和"男-女"(Y轴)尺度上,推荐先对轴向量做正交化处理,避免投影结果互相干扰。以下是步骤清晰的代码:

1. 定义坐标轴方向向量

# 加载模型后,定义两个尺度的方向向量
axis_male_female = model.wv['man'] - model.wv['woman']  # 男-女尺度(Y轴)
axis_poor_rich = model.wv['rich'] - model.wv['poor']    # 贫-富尺度(X轴)

2. 正交化轴向量(Gram-Schmidt方法)

原始的两个方向向量可能不正交,正交化后能保证两个尺度的投影结果独立:

# 单位化X轴向量,保持方向
axis_x = axis_poor_rich / np.linalg.norm(axis_poor_rich)

# 从Y轴向量中减去其在X轴上的投影,得到正交的Y轴向量
proj_y_on_x = np.dot(axis_male_female, axis_x) * axis_x
axis_y = axis_male_female - proj_y_on_x
axis_y = axis_y / np.linalg.norm(axis_y)  # 单位化Y轴

3. 计算目标词的投影值

# 获取目标词向量
king_vec = model.wv['king']

# 投影值 = 词向量与单位轴向量的点积
proj_x = np.dot(king_vec, axis_x)  # 贫-富尺度的投影值
proj_y = np.dot(king_vec, axis_y)  # 男-女尺度的投影值

print(f"king在贫-富(X轴)的投影值: {proj_x}")
print(f"king在男-女(Y轴)的投影值: {proj_y}")

原代码修正版(伪逆方法)

如果坚持使用伪逆做降维,只需修正拼写错误并移除错误的索引操作:

# 修正拼写错误
b1 = model.wv['man'] - model.wv['woman']
b2 = model.wv['rich'] - model.wv['poor']
B = np.array([b1, b2])
Bi = np.linalg.pinv(B.T)

Wv = model.wv['king']
Wp = np.matmul(Bi, Wv.T)  # Wp为(2,)一维数组,对应两个轴的投影坐标

print(f"投影坐标(男-女轴, 贫-富轴): {Wp}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:35:17