在RNN模型的訓練過程中,需要用到詞嵌入,而torch.nn.Embedding就提供了這樣的功能。我們只需要初始化torch.nn.Embedding(n,m),n是單詞數,m就是詞向量的維度。
一開始embedding是隨機的,在訓練的時候會自動更新。
舉個簡單的例子:
word1和word2是兩個長度為3的句子,保存的是單詞所對應的詞向量的索引號。
隨機生成(4,5)維度大小的embedding,可以通過embedding.weight查看embedding的內容。
輸入word1時,embedding會輸出第0、1、2行詞向量的內容,word2同理。
import torch
word1 = torch.LongTensor([0, 1, 2])
word2 = torch.LongTensor([3, 1, 2])
embedding = torch.nn.Embedding(4, 5)
print(embedding.weight)
print('word1:')
print(embedding(word1))
print('word2:')
print(embedding(word2))

除此之外,我們也可以導入已經訓練好的詞向量,但是需要設置訓練過程中不更新。
如下所示,emb是已經訓練得到的詞向量,先初始化等同大小的embedding,然后將emb的數據復制過來,最后一定要設置weight.requires_grad為False。
self.embedding = torch.nn.Embedding(emb.size(0), emb.size(1))
self.embedding.weight = torch.nn.Parameter(emb)
# 固定embedding
self.embedding.weight.requires_grad = False
