带有注意力的神经机器翻译中的嵌入层

Posted

技术标签:

【中文标题】带有注意力的神经机器翻译中的嵌入层【英文标题】:Embedding layer in neural machine translation with attention 【发布时间】:2021-02-16 20:41:11 【问题描述】:

我正在尝试通过website 了解如何实现一个 seq-to-seq 模型。

我的问题:nn.embedding 是否只是为每个单词返回一些 ID,所以每个单词的嵌入在整个训练过程中都是相同的?还是在培训过程中发生了变化?

我的第二个问题是因为我很困惑训练后 nn.embedding 的输出是否是 word2vec 词嵌入之类的东西。

提前致谢

【问题讨论】:

【参考方案1】:

根据PyTorch docs:

一个简单的查找表,用于存储固定字典和大小的嵌入。

此模块通常用于存储词嵌入并使用索引检索它们。模块的输入是索引列表,输出是对应的词嵌入。

简而言之,nn.Embedding 将一系列词汇索引嵌入到新的嵌入空间中。确实可以大致理解为word2vec风格的机制。

作为一个虚拟示例,让我们创建一个嵌入层,将总共 10 个词汇表作为输入(即输入数据仅包含总共 10 个唯一标记),并返回生活在 5 维空间中的嵌入词向量。换句话说,每个单词都表示为 5 维向量。虚拟数据是 3 个单词的序列,索引依次为 1、2 和 3。

>>> embedding = nn.Embedding(10, 5)
>>> embedding(torch.tensor([1, 2, 3]))
tensor([[-0.7077, -1.0708, -0.9729,  0.5726,  1.0309],
        [ 0.2056, -1.3278,  0.6368, -1.9261,  1.0972],
        [ 0.8409, -0.5524, -0.1357,  0.6838,  3.0991]],
       grad_fn=<EmbeddingBackward>)

您可以看到这三个词中的每一个现在都表示为 5 维向量。我们还看到有一个grad_fn函数,意思是这个层的权重会通过backprop来调整。这回答了嵌入层是否可训练的问题:答案是肯定的。事实上,这就是嵌入的全部意义:我们希望嵌入层能够学习有意义的表示,著名的例子king - man = queen 就是这些嵌入层可以学习的经典例子。


编辑

正如文档所述,嵌入层是来自矩阵的简单查找表。您可以通过这样做来看到这一点

>>> embedding.weight
Parameter containing:
tensor([[-1.1728, -0.1023,  0.2489, -1.6098,  1.0426],
        [-0.7077, -1.0708, -0.9729,  0.5726,  1.0309],
        [ 0.2056, -1.3278,  0.6368, -1.9261,  1.0972],
        [ 0.8409, -0.5524, -0.1357,  0.6838,  3.0991],
        [-0.4569, -1.9014, -0.0758, -0.6069, -1.2985],
        [ 0.4545,  0.3246, -0.7277,  0.7236, -0.8096],
        [ 1.2569,  1.2437, -1.0229, -0.2101, -0.2963],
        [-0.3394, -0.8099,  1.4016, -0.8018,  0.0156],
        [ 0.3253, -0.1863,  0.5746, -0.0672,  0.7865],
        [ 0.0176,  0.7090, -0.7630, -0.6564,  1.5690]], requires_grad=True)

您将看到该矩阵的第一行、第二行和第三行对应于上例中返回的结果。换句话说,对于索引为n 的词汇表,嵌入层将简单地“查找”其权重矩阵中的第n 行并返回该行向量;因此查找表。

【讨论】:

至于确认我的问题,假设我们在两句话中都有“门”这个词。首先,“门”得到一个词汇索引(在整个过程中是固定的)。那么“门”这个词,出现在几个句子中。对于每个句子,它会从这个 nn.embedding 获得不同的嵌入,还是在它所在的任何句子中都相同?此外,我们如何从一个特定的嵌入中检索相关的索引(单词)?谢谢 很高兴它有帮助。至于后续,“门”这个词的嵌入向量不会因句子而异,因为“门”的索引在所有句子中都是恒定的。然而,嵌入向量本身会在整个训练过程中发生变化。

以上是关于带有注意力的神经机器翻译中的嵌入层的主要内容,如果未能解决你的问题,请参考以下文章

在神经机器翻译中加权

PyTorch基础——机器翻译的神经网络实现

数学之路-机器学习-机器学习算法-神经网络[11]

神经网络机器翻译与注意力机制

神经网络与机器学习

机器学习12卷积神经网络