Pytorch中的nn.Embedding()

首先,我们先理解一下什么是Embedding。

Word Embedding

翻译过来的意思就是词嵌入,通俗来讲就是将文字转换为一串数字。因为数字是计算机更容易识别的一种表达形式。
我们词嵌入的过程,就相当于是我们在给计算机制造出一本字典的过程。计算机可以通过这个字典来间接地识别文字。
词嵌入向量的意思也可以理解成:词在神经网络中的向量表示。

所以,接下来看看Pytorch里面的Embedding是什么样子的叭:

torch.nn.Embedding

介绍:

  1. 一个简单的查找表(lookup table),存储固定字典和大小的词嵌入。
  2. 此模块通常用于存储单词嵌入并使用索引检索它们(类似数组)。模块的输入是一个索引列表,输出是相应的词嵌入。

参数:

  • num_embeddings - 词嵌入字典大小,即一个字典里要有多少个词。
  • embedding_dim - 每个词嵌入向量的大小。

变量:
~Embedding.weight(Tensor)–形状模块(num_embeddings,Embedding_dim)的可学习权重,初始化自(0,1)。
也就是说,pytorch的nn.Embedding()是可以自动学习每个词向量对应的w权重的。

例子:

>>> # an Embedding module containing 10 tensors of size 3
>>> embedding = nn.Embedding(10, 3)
>>> # a batch of 2 samples of 4 indices each
>>> input = torch.LongTensor([[1,2,4,5],[4,3,2,9]])
>>> embedding(input)
tensor([[[-0.0251, -1.6902,  0.7172],
         [-0.6431,  0.0748,  0.6969],
         [ 1.4970,  1.3448, -0.9685],
         [-0.3677, -2.7265, -0.1685]],

        [[ 1.4970,  1.3448, -0.9685],
         [ 0.4362, -0.4004,  0.9400],
         [-0.6431,  0.0748,  0.6969],
         [ 0.9124, -2.3616,  1.1151]]])


>>> # example with padding_idx
>>> embedding = nn.Embedding(10, 3, padding_idx=0)
>>> input = torch.LongTensor([[0,2,0,5]])
>>> embedding(input)
tensor([[[ 0.0000,  0.0000,  0.0000],
         [ 0.1535, -2.0309,  0.9315],
         [ 0.0000,  0.0000,  0.0000],
         [-0.1655,  0.9897,  0.0635]]])

此外,我们也可以自己导入权重参数:

from_pretrained

介绍:

  1. 从给定的二维FloatTensor创建embedding实例。

参数:

  • embeddings - 包含嵌入权重的FloatTensor。
    第一个维度作为num_embeddings(这里是2)传递给Embedding,第二个维度作为Embedding_dim(这里是3)传递给Embedding。

例子:

>>> # FloatTensor containing pretrained weights
>>> weight = torch.FloatTensor([[1, 2.3, 3], [4, 5.1, 6.3]])
>>> embedding = nn.Embedding.from_pretrained(weight)
>>> # Get embeddings for index 1
>>> input = torch.LongTensor([1])
>>> embedding(input)
tensor([[ 4.0000,  5.1000,  6.3000]])

可以看到,我们weight是一个FloatTensor,维度为[2*3]:第一个维度 [1,2.3,3] 代表第一个词的词向量;第二个维度 [4,5.1,6.3] 代表第二个词的词向量。
此外,我们也可以设置:

>>> # FloatTensor containing pretrained weights
>>> embedding = nn.Embedding.from_pretrained(weight, freeze=False)

通过设置参数:freeze=False,来使模型学习embedding中的参数。
该参数默认值为:True

你可能感兴趣的:(词向量,pytorch,自然语言处理)