如何使用word2vec生成词汇列表的两两余弦相似度矩阵
相似度矩阵实现方案
前提:你已经训练完成gensim的word2vec模型,可正常调用wv.similarity()方法,待计算的目标词汇列表为word_list。
方法1:双重循环实现(逻辑简单,适合小词汇量场景)
不需要额外依赖复杂计算库,逻辑直观易调整:
import pandas as pd import numpy as np # 替换为你自己的词汇列表 word_list = ["苹果", "香蕉", "水果", "汽车"] vocab_len = len(word_list) # 初始化空矩阵 sim_matrix = np.zeros((vocab_len, vocab_len)) # 两两遍历计算相似度 for i in range(vocab_len): for j in range(vocab_len): sim_matrix[i][j] = wv.similarity(word_list[i], word_list[j]) # 转换为带行列标签的表格形式,方便查看 sim_df = pd.DataFrame(sim_matrix, index=word_list, columns=word_list) print(sim_df)
方法2:向量化计算实现(效率更高,适合大词汇量场景)
直接批量提取所有词汇的向量,一次性计算所有两两余弦相似度,避免循环耗时:
from sklearn.metrics.pairwise import cosine_similarity import pandas as pd # 过滤不在wv词汇表中的词,避免报错 filtered_word_list = [word for word in word_list if word in wv.key_to_index] # 批量提取所有词的向量 word_vecs = wv[filtered_word_list] # 直接计算相似度矩阵 sim_matrix = cosine_similarity(word_vecs) # 生成带标签的表格 sim_df = pd.DataFrame(sim_matrix, index=filtered_word_list, columns=filtered_word_list) # 导出到本地csv文件 sim_df.to_csv("词相似度矩阵.csv", encoding="utf-8-sig")
注意事项
- 不同gensim版本判断词汇是否存在的属性略有差异,低版本可将
wv.key_to_index替换为wv.vocab - 矩阵对角线数值恒为1,是单词与自身的相似度,属于正常结果
- 若不需要带标签的表格格式,直接使用
sim_matrix数组即可进行后续计算
内容的提问来源于stack exchange,提问作者Doosan Paik
相关产品推荐
相关产品推荐

