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

使用Word2Vec+TSNE绘制相近词时触发ValueError问题求助

问题修复:Word2Vec t-SNE散点图代码的ValueError解决

错误根源分析

  1. 维度不匹配问题:arr是初始化的二维数组(形状(0,300)),但test_model.wv[word]返回的是一维词向量(形状(300,)),用np.append指定axis=0时,要求输入数组维度完全一致,因此触发ValueError。
  2. 逻辑错误:循环里重复添加原词word的向量,而非相似词的向量,导致所有点都是同一个向量的t-SNE结果,完全失去展示相似词分布的意义。

修复后的完整代码

import numpy as np
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

def display_closestwords_tsnescatterplot(test_model, word):
    arr = np.empty((0, 300), dtype='f')
    word_labels = [word]

    # 获取目标词的相似词列表
    close_words = test_model.wv.similar_by_word(word)
    
    # 将原词向量转为二维数组后添加(匹配arr的维度)
    arr = np.append(arr, np.array([test_model.wv[word]]), axis=0)
    
    for wrd_score in close_words:
        wrd = wrd_score[0]
        word_labels.append(wrd)
        # 添加相似词的向量,同样转为二维数组
        arr = np.append(arr, np.array([test_model.wv[wrd]]), axis=0)
        
    # t-SNE降维处理
    tsne = TSNE(n_components=2, random_state=0)
    np.set_printoptions(suppress=True)
    Y = tsne.fit_transform(arr)

    x_coords = Y[:, 0]
    y_coords = Y[:, 1]
    
    # 绘制散点图并标注
    plt.scatter(x_coords, y_coords)
    for label, x, y in zip(word_labels, x_coords, y_coords):
        plt.annotate(label, xy=(x, y), xytext=(0, 0), textcoords='offset points')
    
    # 调整坐标轴范围,避免标签被截断
    plt.xlim(x_coords.min() - 0.5, x_coords.max() + 0.5)
    plt.ylim(y_coords.min() - 0.5, y_coords.max() + 0.5)
    plt.show()

# 调用示例
display_closestwords_tsnescatterplot(test_model, 'river')

关键修改说明

  • 所有添加向量的操作都用np.array([向量])将一维词向量包裹为二维数组(形状从(300,)变为(1,300)),和arr的维度保持一致。
  • 修正循环逻辑,改为添加相似词的向量,确保散点图展示原词+相似词的真实分布。
  • 微调坐标轴范围的计算,让标签显示更完整(原代码的+0.00005几乎无实际作用)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:05:28