使用預訓練的詞向量
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,這也是使用詞向量的目的。