原始transformer中使用了什么样的词嵌入?

人工智能 自然语言处理 变压器 注意力 词嵌入
2021-11-13 03:11:25

我目前正在尝试了解变压器。

首先,我阅读了Attention Is All You Need教程。

让我好奇的是模型中使用的词嵌入。使用的是 word2vec 还是 GloVe?词嵌入是从头开始训练的吗?

在上面链接的教程中,转换器是从头开始实现的,并且来自 pytorch 的 nn.Embedding 用于嵌入。我查了这个函数,不太理解,但我倾向于认为嵌入是从头开始训练的,对吧?

3个回答

我在这篇博文 The Transformer: Attention is All You Need中找到了一个很好的答案:

我们学习了一个“词嵌入”,它是一个较小的词的实值向量表示,它携带了一些关于这个词的信息。我们可以使用 Pytorch 中的 nn.Embedding 来做到这一点,或者更一般地说,通过将我们的 one-hot 向量与学习的权重矩阵 W 相乘。

处理 Pytorch nn.Embedding 权重矩阵有两种选择。一种选择是使用预训练的嵌入对其进行初始化并使其保持固定,在这种情况下,它实际上只是一个查找表。另一种选择是随机初始化它,或者使用预先训练的嵌入,但保持可训练。在这种情况下,单词表示将在整个训练过程中得到细化和修改,因为权重矩阵将在整个训练过程中得到细化和修改。

Transformer 使用权重矩阵的随机初始化并在训练期间细化这些权重——即它学习自己的词嵌入。

不,Word2Vec 和 GloVe 都没有被使用,因为 Transformer 是一类较新的算法。Word2Vec 和 GloVe 基于静态词嵌入,而 Transformer 则基于动态词嵌入。

嵌入是从头开始训练的。

从一开始就使用“初始”词嵌入(每个词或子词没有任何位置或上下文信息)在我看来,有人必须在一开始就为每个词提供经过训练的嵌入。