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

如何查看Word2Vec模型及相关计算变量的具体内容?

嘿,我明白你想拆解这个小语料库上的Word2Vec+软余弦相似度流程,还想深挖每个环节的具体数值对吧?我来一步步教你怎么查看这些对象的内容,顺便理清楚每一步的计算逻辑~

1. 查看 word_vectors 的具体内容

word_vectors 是Word2Vec模型训练出的所有词向量的集合,咱们可以直接提取里面的细节:

  • 查看语料库中所有被训练的词汇:
    print("所有训练词汇:", word_vectors.index_to_key)
    
  • 查看单个词汇的具体向量值(比如你的语料里有"apple"):
    print("'apple'的词向量:", word_vectors['apple'])
    
  • 查看词向量的维度(Word2Vec默认是100维,你也可以在初始化时用size参数修改):
    print("词向量维度:", word_vectors.vector_size)
    

计算过程解释:
因为你设置了min_count=1,语料里哪怕只出现一次的词都会被纳入训练。Word2Vec默认用CBOW模式,会根据每个词的上下文窗口(默认是5个词),不断调整词向量的数值,让语义相近的词向量在空间里更靠近,最终得到每个词的分布式表示。

2. 查看 termsim_index 的具体内容

termsim_index 是封装了词向量相似度计算的索引,本质是用余弦相似度衡量词与词的语义距离。要查看具体的词对相似度,可以这么做:

  • 查看指定两个词的相似度:
    print("'apple'和'banana'的相似度:", termsim_index.similarity('apple', 'banana'))
    
  • 遍历所有词对,查看全部相似度:
    from itertools import combinations
    # 先拿到字典里的所有词汇
    all_words = list(dictionary.token2id.keys())
    for word1, word2 in combinations(all_words, 2):
        sim_score = termsim_index.similarity(word1, word2)
        print(f"{word1} ↔ {word2} 的相似度:{sim_score:.4f}")
    

计算过程解释:
这个索引的核心逻辑就是余弦相似度公式:cosθ = (向量A · 向量B) / (||向量A|| × ||向量B||),它把词向量的点积结果归一化到[-1,1]区间,值越接近1说明两个词语义越相似。

3. 查看 similarity_matrix 的具体内容

similarity_matrix 是稀疏格式的词-词相似度矩阵,对应字典中每个词两两之间的相似度。因为你的语料很小,完全可以转成稠密矩阵查看:

  • 转换成稠密矩阵并打印:
    import numpy as np
    dense_sim_matrix = similarity_matrix.to_dense()
    print("词-词相似度矩阵:")
    print(np.round(dense_sim_matrix, 4))  # 保留4位小数更易读
    
  • 查看指定词对应的相似度行(比如字典中第0个词):
    print("字典第0个词的相似度行:", similarity_matrix.get_row(0))
    
  • 查看矩阵的形状(对应字典的词汇数量):
    print("相似度矩阵形状:", similarity_matrix.shape)
    

计算过程解释:
它以termsim_index为基础,遍历字典里的每一对词,计算它们的余弦相似度,然后把结果存储为稀疏矩阵(节省内存,不过小语料用稠密矩阵也没问题)。矩阵中第(i,j)位置的数值,就是字典里第i个词和第j个词的语义相似度。

4. 查看 docsim_index 的具体内容

docsim_index 是用来快速计算文档间软余弦相似度的索引,num_best=10表示会返回每个文档最相似的前10个文档。查看方法如下:

  • 查看单个文档的相似结果(比如第0个文档):
    similar_docs = docsim_index[0]
    print("第0个文档的Top10相似文档:")
    for doc_idx, sim_score in similar_docs:
        print(f"文档{doc_idx},相似度:{sim_score:.4f}")
    
  • 生成完整的文档相似度矩阵(小语料适用):
    doc_sim_matrix = []
    for i in range(len(bow_corpus)):
        # 提取相似度分数,按文档索引排序
        sorted_scores = sorted(docsim_index[i], key=lambda x: x[0])
        doc_sim_matrix.append([score for _, score in sorted_scores])
    print("文档-文档相似度矩阵:")
    print(np.round(np.array(doc_sim_matrix), 4))
    

计算过程解释:
软余弦相似度和普通余弦不同,它不要求文档有完全匹配的词,而是通过词相似度矩阵,把文档的BoW向量转换成“语义加权”后的向量,再计算这些向量之间的余弦相似度。比如文档A里的"apple"和文档B里的"banana",会通过它们的词相似度贡献到文档相似度中,而不是直接忽略不匹配的词。

内容的提问来源于stack exchange,提问作者Susan-l3p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:14:13