Я пытаюсь понять недавно реализованный класс трансформатора keras
: https://keras.io/examples/nlp/text_classification_with_transformer/
Я вижу, что сначала встраивается текст, а затем используется самовнимание. Но что, если я хочу использовать другое встраивание, кроме TokenAndPositionEmbedding
- например, в моем случае у меня есть предварительно встроенные предложения, и я люблю использовать на них самовнимание.
Я не понимаю, что это за self.pos_emb
делает. Класс 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 для целей классификации?