通过gensim,加载预训练词向量,获取embedding_matrix

使用预训练的词向量

1. 加载词向量

# 加载训练好的词向量模型

import gensim

Word2VecModel = gensim.models.Word2Vec.load(词向量模型所在路径) # 读取词向量

2. 构造包含所有词语的 list,以及初始化 “词语-索引”字典 和 “词向量”矩阵

# 获取某一个词的向量表示

In[1]: Word2VecModel.wv['申请'].shape

Out[1]: (300,)

构造{词语:索引}字典

#  2 构造包含所有词语的 list,以及初始化 “词语-序号”字典 和 “词向量”矩阵

import numpy as np

vocab_list = [word for word, Vocab in Word2VecModel.wv.vocab.items()]# 存储 所有的 词语

word_index = {" ": 0} # 初始化 `[word : token]` ,后期 tokenize 语料库就是用该词典。使用前必须添加一个索引0.
word_vector = {} # 初始化`[word : vector]`字典

# 初始化存储所有向量的大矩阵,留意其中多一位(首行),词向量全为 0,用于 padding补零。
# 行数 为 所有单词数+1 比如 10000+1 ; 列数为 词向量“维度”比如100。
embedding_matrix = np.zeros((len(vocab_list) + 1, Word2VecModel.vector_size))

词向量中不重复词语个数

len(vocab_list)

3. 填充初始化 “词语-索引”字典 和 “词向量”矩阵

## 3 填充 上述 的字典 和 大矩阵

for i in range(len(vocab_list)):
    # print(i)
    word = vocab_list[i]  # 每个词语
    word_index[word] = i + 1 # 词语:索引
    word_vector[word] = Word2VecModel.wv[word] # 词语:词向量
    embedding_matrix[i + 1] = Word2VecModel.wv[word]  # 词向量矩阵

查看embedding_matrix的信息

In[1]: embedding_matrix.shape
Out[1]: (42236, 300)
  • 前一个数表示tokenize 语料库中词语大小(因为有空值,需要减去1,故该词向量中不重复词语个数为42235)
  • 后一个数表示词向量维度

值此,我们获取了embedding_matrix,这也是使用词向量的目的。

你可能感兴趣的:(NLP)