在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