如何查看Word2Vec模型及相关计算变量的具体内容?
嘿,我明白你想拆解这个小语料库上的Word2Vec+软余弦相似度流程,还想深挖每个环节的具体数值对吧?我来一步步教你怎么查看这些对象的内容,顺便理清楚每一步的计算逻辑~
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个词),不断调整词向量的数值,让语义相近的词向量在空间里更靠近,最终得到每个词的分布式表示。
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说明两个词语义越相似。
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个词的语义相似度。
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

