使用 transformer block keras 进行自我注意

Self-Attention using transformer block keras

我正在尝试了解新实现的 keras 转换器 class:https://keras.io/examples/nlp/text_classification_with_transformer/

我看到先嵌入文本,然后使用自注意力。但是如果我想使用 TokenAndPositionEmbedding 之外的另一个嵌入怎么办 - 例如在我的例子中,我有预嵌入的句子,并且喜欢对它们使用自我关注。

我不明白 self.pos_emb 的作用。 class TokenAndPositionEmbedding 返回 xpositions,其中 xtoken_embeddingpositions 是单词数考虑?所以它基本上返回两件事?我不明白..

class TokenAndPositionEmbedding(layers.Layer):
    def __init__(self, maxlen, vocab_size, emded_dim):
        super(TokenAndPositionEmbedding, self).__init__()
        self.token_emb = layers.Embedding(input_dim=vocab_size, output_dim=emded_dim)
        self.pos_emb = layers.Embedding(input_dim=maxlen, output_dim=emded_dim)

    def call(self, x):
        maxlen = tf.shape(x)[-1]
        positions = tf.range(start=0, limit=maxlen, delta=1)
        positions = self.pos_emb(positions)
        x = self.token_emb(x)
        return x + positions

或者我只是将嵌入的句子提供给 MultiHeadSelfAttention 并在其后放置一个 Dense-Layer 用于 class 化目的?

如您所知,transformer 是仅基于许多具有残差概念的 Dense 层的结构;然而,这使得时间序列数据失去了时间依赖性。所以对于transformer,你需要定位位置,你可以把它作为这个结构的附加信息,这样它就不会错过时间依赖。如果想通过keras更好的理解,我推荐Tensorflow写的官方教程https://www.tensorflow.org/tutorials/text/transformer 其中详细说明了您想知道的事情。