如何从Gensim Word2Vec模型中提取对应词汇的向量矩阵
解决Word2Vec词向量与词汇索引匹配导出DataFrame的问题
问题根源
你用model.syn1neg提取的是负采样训练时的输出层权重矩阵,它和model.wv.index_to_key对应的输入层词向量(也就是我们实际要用的词嵌入)不是同一组数据,所以必然出现索引不匹配的问题。正确的词向量矩阵应该用model.wv.vectors,它的每一行和model.wv.index_to_key的词汇是一一对应的。
正确代码实现
import pandas as pd # 获取正确的词向量矩阵与词汇列表 word_vec_matrix = model.wv.vectors word_labels = model.wv.index_to_key # 构造DataFrame df = pd.DataFrame(word_vec_matrix) # 给向量列命名为V1、V2...V300 df.columns = [f"V{i+1}" for i in range(df.shape[1])] # 将词汇列插入到第一位置 df.insert(0, "label", word_labels)
验证索引匹配
执行以下代码可以确认对应关系:
# 获取'government'的索引 gov_index = model.wv.get_index('government') # 查看DataFrame对应行的label和向量 print(df.iloc[gov_index])
此时你会看到label列的值是government,且向量和model.wv['government']完全一致。
额外说明
model.wv.vectors是Word2Vec训练完成后,输入层的词向量矩阵,也是我们做文本任务时常用的词嵌入数据。syn1neg是负采样优化过程中用到的输出层权重,一般仅用于模型内部训练,不适合直接作为词向量使用。
内容的提问来源于stack exchange,提问作者fiskdill
相关产品推荐
相关产品推荐

