def
load_glove
(word_index)
:'''
args:
word_index: 分詞器生成的word_index, 第乙個元素為word, 第二個元素為索引
returns:
embedding_matrix: 按照分詞器給出的索引組成的詞嵌入矩陣
'''embedding_file =
"../embedding/glove.6b/glove.6b.50d.txt"
with
open
(embedding_file)
as f:
# 用於將embedding的每行的第乙個元素word和後面為float型別的詞向量分離出來。
# *表示後面的引數按順序作為乙個元組傳進函式
# ** 表示將呼叫函式時,有等號的部分作為字典傳入。
defget_coefs
(word,
*arr)
:return word, np.asarray(arr, dtype=
'float32'
)# 將所以的word作為key,numpy陣列作為value放入字典
embeddings_index =
dict
(get_coefs(
*o.split(
" ")
)for o in
open
(embedding_file)
)# 取出所有詞向量,dict.values()返回的是dict_value, 要用np.stack將其轉為ndarray
all_embs = np.stack(embeddings_index.values())
# 計算所有元素的均值和標準差
emb_mean,emb_std = all_embs.mean(
), all_embs.std(
)# 每個詞向量的長度
embed_size = all_embs.shape[1]
# 得到模型要使用的詞的數量(種類)
# len(word_index)是資料集中的不同詞的數量, word_index是在載入資料集時,在資料集上用分詞器tokenizer得到的。
# max_feature是最大特徵數量, 手動設定
nb_words =
min(max_features,
len(word_index)
)# 在高斯分布上取樣, 利用計算出來的均值和標準差, 生成和預訓練好的詞向量相同分布的隨機數組成的ndarray (假設預訓練的詞向量符合高斯分布)
embedding_matrix = np.random.normal(emb_mean, emb_std,
(nb_words, embed_size)
)# 這段迴圈是為了給embedding_matrix中的一些行用預訓練的詞向量進行賦值。
# 因為不能保證資料集中的每個詞都出現在了預訓練的詞向量中,所以利用預訓練的詞向量的均值和標準差為資料集中的詞隨機初始化詞向量。
# 然後再使用預訓練詞向量中的詞去替換隨機初始化資料集的詞向量。
for word, i in word_index.items():
# 如果已經修改完了所有用到的詞的詞向量,就跳過本次迴圈
if i >= max_features:
continue
# 如果dict的key中包括word, 就返回其value。 否則返回none。
embedding_vector = embeddings_index.get(word)
# 如果返回不為none,說明這個詞在資料集中和訓練詞向量的資料集中都出現了,可以使用預訓練的詞向量替換隨機初始化的詞向量
if embedding_vector is
notnone
: embedding_matrix[i]
= embedding_vector
# 經過上面的迴圈,返回的 embedding_matrix 中每行都是根據分詞器的索引進行賦值的,因此之後可以直接根據詞的索引取對應的詞向量
return embedding_matrix
pytorch中如何使用預訓練詞向量
不涉及具體 只是記錄一下自己的疑惑。我們知道對於在pytorch中,我們通過構建乙個詞向量矩陣物件。這個時候物件矩陣是隨機初始化的,然後我們的輸入是單詞的數值表達,也就是一些索引。那麼我們會根據索引,賦予每個單詞獨一無二的乙個詞向量表達。在其後的神經網路訓練過程中,每個單詞對應獨一無二的索引,從而對...
pytorch 使用預訓練層
將其他地方訓練好的網路,用到新的網路裡面 1.原先已經訓練好乙個網路 autoencoder fc 2.首先載入該網路,讀取其儲存的引數 3.設定乙個引數集 cnnpre autoencoder fc cnnpre.load state dict torch.load autoencoder fc....
tensorflow使用預訓練詞向量
glove的檔案說明如何使用預訓練詞向量,檔案格式如下 每行為乙個單詞和其對應的詞向量,以空格分隔。glove對應的詞向量,非二進位制檔案 word2vec對應的詞向量,非二進位制檔案 embedding np.asarray embd vocab 為詞表 w tf.variable tf.cons...