使用 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
返回 x
和 positions
,其中 x
是 token_embedding
,positions
是单词数考虑?所以它基本上返回两件事?我不明白..
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
其中详细说明了您想知道的事情。
我正在尝试了解新实现的 keras
转换器 class:https://keras.io/examples/nlp/text_classification_with_transformer/
我看到先嵌入文本,然后使用自注意力。但是如果我想使用 TokenAndPositionEmbedding
之外的另一个嵌入怎么办 - 例如在我的例子中,我有预嵌入的句子,并且喜欢对它们使用自我关注。
我不明白 self.pos_emb
的作用。 class TokenAndPositionEmbedding
返回 x
和 positions
,其中 x
是 token_embedding
,positions
是单词数考虑?所以它基本上返回两件事?我不明白..
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
其中详细说明了您想知道的事情。